XSS姿勢——檔案上傳XSS

wyzsk發表於2020-08-19

Zeroyu · 2016/04/15 10:14

原文連結:brutelogic.com.br/blog/

0x01 簡單介紹


一個檔案上傳點是執行XSS應用程式的絕佳機會。很多網站都有使用者許可權上傳個人資料圖片的上傳點,你有很多機會找到相關漏洞。如果碰巧是一個self XSS,你可以看看這篇文章。

0x02 例項分析


首先基本上我們都可以找到類似下面的一個攻擊入口點,我覺得這個並不難。

姿勢一:檔名方式

檔名本身可能會反映在頁面所以一個帶有XSS命名的檔案便可以起到攻擊作用。

p1

雖然我沒有準備靶場,但是你可以選擇在W3Schools練習這種XSS 。

姿勢二:Metadata

使用exiftool這個工具可以通過改變EXIF  metadata進而一定機率引起某處反射:

#!bash
$ exiftool -field = XSS FILE
複製程式碼

例如:

#!bash
$ exiftool -Artist=’ “><img src=1 onerror=alert(document.domain)>’ brute.jpeg
複製程式碼

p2

姿勢三:Content

如果應用允許上傳SVG格式的檔案(其實就是一個影象型別的),那麼帶有以下content的檔案可以被用來觸發XSS:

#!html
<svg xmlns="http://www.w3.org/2000/svg" onload="alert(document.domain)"/>
複製程式碼

一個 PoC用來驗證。你可以通過訪問brutelogic.com.br/poc.svg看到效果

姿勢四:Source

建立一個攜帶有JavaScript payload的GIF影象用作一個指令碼的源。這對繞過CSP(內容安全策略)保護“script-src ‘self’”(即不允許使用示例的這種xss方式進行攻擊<script>alert(1)</script>)是很有用的,但前提是我們能夠成功地在相同的域注入,如下所示。

p3

要建立這樣的影象需要這個作為content 和 name,並使用.gif副檔名:

#!html
GIF89a/*<svg/onload=alert(1)>*/=alert(document.domain)//;
複製程式碼

這個GIF的圖片頭——GIF89a,作為alert function的變數分配給alert function。但是他們之間,還有一個被標註的XSS變數用來防止圖片被恢復為text/HTML MIME檔案型別,因此只需傳送一個對這個檔案的請求payload 就可以被執行。

正如我們下面看到的,檔案類unix命令和PHP函式中的exif_imagetype()和getimagesize()會將其識別為一個GIF檔案。所以如果一個應用程式僅僅是使用這些方式驗證是否是一個影象,那麼該檔案將可以上傳成功(但可能在上傳後被殺掉)。

p4

0x03 最後


如果你想知道更多的有其標誌性ASCII字元可以用於一個javascript變數賦值的檔案型別,看我隨後的文章。

也有很多比較詳細的使用XSS和影象檔案相結合繞過圖形處理函式庫過濾的例子。這方面的一個很好的例子是here

相關文章