XXE漏洞利用技巧:從XML到遠(yuǎn)程代碼執(zhí)行

*本文中涉及到的相關(guān)漏洞已報(bào)送廠商并得到修復(fù),本文僅限技術(shù)研究與討論,嚴(yán)禁用于非法用途,否則產(chǎn)生的一切后果自行承擔(dān)。

你的Web應(yīng)用是否存在XXE漏洞? 如果你的應(yīng)用是通過用戶上傳處理XML文件或POST請求(例如將SAML用于單點(diǎn)登錄服務(wù)甚至是RSS)的,那么你很有可能會受到XXE的攻擊。XXE是一種非常常見的漏洞類型,我們幾乎每天都會碰到它。在去年的幾次web應(yīng)用滲透中,我們就成功的利用了好幾回。

什么是XXE

簡單來說,XXE就是XML外部實(shí)體注入。當(dāng)允許引用外部實(shí)體時(shí),通過構(gòu)造惡意內(nèi)容,就可能導(dǎo)致任意文件讀取、系統(tǒng)命令執(zhí)行、內(nèi)網(wǎng)端口探測、攻擊內(nèi)網(wǎng)網(wǎng)站等危害。

例如,如果你當(dāng)前使用的程序?yàn)镻HP,則可以將libxml_disable_entity_loader設(shè)置為TRUE來禁用外部實(shí)體,從而起到防御的目的。

基本利用

通常攻擊者會將payload注入XML文件中,一旦文件被執(zhí)行,將會讀取服務(wù)器上的本地文件,并對內(nèi)網(wǎng)發(fā)起訪問掃描內(nèi)部網(wǎng)絡(luò)端口。換而言之,XXE是一種從本地到達(dá)各種服務(wù)的方法。此外,在一定程度上這也可能幫助攻擊者繞過防火墻規(guī)則過濾或身份驗(yàn)證檢查。

以下是一個簡單的XML代碼POST請求示例:

之后,上述代碼將交由服務(wù)器的XML處理器解析。代碼被解釋并返回:{“Request Successful”: “Added!”}

現(xiàn)在,當(dāng)攻擊者試圖濫用XML代碼解析時(shí)會發(fā)生什么?讓我們編輯代碼并包含我們的惡意payload:

代碼被解釋并返回:

Blind OOB XXE

如上例所示,服務(wù)器將/etc/passwd文件的內(nèi)容作為響應(yīng)返回給我們的XXE。但是在某些情況下,即便服務(wù)器可能存在XXE,也不會向攻擊者的瀏覽器或代理返回任何響應(yīng)。遇到這種情況,我們可以使用Blind

XXE漏洞來構(gòu)建一條外帶數(shù)據(jù)(OOB)通道來讀取數(shù)據(jù)。雖然我們無法直接查看文件內(nèi)容,但我們?nèi)匀豢梢允褂靡资芄舻姆?wù)器作為代理,在外部網(wǎng)絡(luò)上執(zhí)行掃描以及代碼。

場景1 – 端口掃描

在第一個示例中,我們通過URI將請求指向了/etc/passwd文件,并最終成功的為我們返回了文件中的內(nèi)容。除此之外,我們也可以使用http URI并強(qiáng)制服務(wù)器向我們指定的端點(diǎn)和端口發(fā)送GET請求,將XXE轉(zhuǎn)換為SSRF(服務(wù)器端請求偽造)。

以下代碼將嘗試與端口8080通信,根據(jù)響應(yīng)時(shí)間/長度,攻擊者將可以判斷該端口是否已被開啟。

場景2 – 通過DTD竊取文件

外部文檔類型定義(DTD)文件可被用于觸發(fā)OOB XXE。攻擊者將.dtd文件托管在VPS上,使遠(yuǎn)程易受攻擊的服務(wù)器獲取該文件并執(zhí)行其中的惡意命令。

以下請求將被發(fā)送到應(yīng)用程序以演示和測試該方法:

上述代碼一旦由易受攻擊的服務(wù)器處理,就會向我們的遠(yuǎn)程服務(wù)器發(fā)送請求,查找包含我們的payload的DTD文件:

讓我們花點(diǎn)時(shí)間了解上述請求的執(zhí)行流程。結(jié)果是有兩個請求被發(fā)送到了我們的服務(wù)器,第二個請求為/etc/passwd文件的內(nèi)容。

在我們的VPS日志中我們可以看到,帶有文件內(nèi)容的第二個請求,以此我們也確認(rèn)了OOB XXE漏洞的存在:

場景3 – 遠(yuǎn)程代碼執(zhí)行

這種情況很少發(fā)生,但有些情況下攻擊者能夠通過XXE執(zhí)行代碼,這主要是由于配置不當(dāng)/開發(fā)內(nèi)部應(yīng)用導(dǎo)致的。如果我們足夠幸運(yùn),并且PHP expect模塊被加載到了易受攻擊的系統(tǒng)或處理XML的內(nèi)部應(yīng)用程序上,那么我們就可以執(zhí)行如下的命令:

響應(yīng):

場景4 – 釣魚

我們使用Java的XML解析器找到了一個易受攻擊的端點(diǎn)。掃描內(nèi)部端口后,我們發(fā)現(xiàn)了一個偵聽在25端口的SMTP服務(wù),Java支持在sun.net.ftp.impl.FtpClient中的ftp URI。因此,我們可以指定用戶名和密碼,例如ftp://user:password@host:port/test.txt,F(xiàn)TP客戶端將在連接中發(fā)送相應(yīng)的USER命令。

但是如果我們將%0D%0A?(CRLF)添加到URL的user部分的任意位置,我們就可以終止USER命令并向FTP會話中注入一個新的命令,即允許我們向25端口發(fā)送任意的SMTP命令:

當(dāng)FTP客戶端使用此URL連接時(shí),以下命令將會被發(fā)送給VULNERABLESYSTEM.com上的郵件服務(wù)器:

這意味著攻擊者可以從從受信任的來源發(fā)送釣魚郵件(例如:帳戶重置鏈接)并繞過垃圾郵件過濾器的檢測。除了鏈接之外,甚至我們也可以發(fā)送附件。

實(shí)用工具

能手動編輯web請求對于XXE攻擊至關(guān)重要,這里我推薦大家使用BurpSuite。BurpSuite的掃描功能可以為我們檢測潛在的XXE漏洞,其次burp的Intruder功能非常適合用于端口探測。但要提醒的是工具只是我們的輔助,在某些情況下手動測試可能效果更好!

HTTP請求分析工具像RequestBinHookBin都非常適合OOB XXE的測試。此外,BurpSuite Pro的Collaborator也是個不錯的選擇,但一些安全研究人員他們更喜歡使用他們自己的VPS。

緩解措施

上面討論的主要問題就是XML解析器解析了用戶發(fā)送的不可信數(shù)據(jù)。然而,要去校驗(yàn)DTD(document type

definition)中SYSTEM標(biāo)識符定義的數(shù)據(jù),并不容易,也不大可能。大部分的XML解析器默認(rèn)對于XXE攻擊是脆弱的。因此,最好的解決辦法就是配置XML處理器去使用本地靜態(tài)的DTD,不允許XML中含有任何自己聲明的DTD。

參考

1.https://blog.zsec.uk/blind-xxe-learning/

2.https://www.acunetix.com/blog/articles/xml-external-entity-xxe-limitations/

3.https://depthsecurity.com/blog/exploitation-xml-external-entity-xxe-injection

4.https://mikeknoop.com/lxml-xxe-exploit/

XXE Cheatsheet

1.https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injections

2.https://www.gracefulsecurity.com/xxe-cheatsheet/

3.https://gist.github.com/abdilahrf/63ea0a21dc31010c9c8620425e212e30

*參考來源:gardienvirtuel,F(xiàn)B小編 secist 編譯,轉(zhuǎn)載請注明來自FreeBuf.COM

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 0×00 背景 近期看到OWASP TOP 10 2017 版中添加了XXE的內(nèi)容便對XXE的一些知識進(jìn)行梳理和總...
    查無此人asdasd閱讀 1,194評論 0 2
  • 2019-05-21 1前言 對于xxe漏洞可能是自己挖洞時(shí)間太短,真是沒用遇到過啊!都是靶機(jī)或者ctf遇到的。寫...
    _Holy_閱讀 7,166評論 0 0
  • 外部實(shí)體引用 DTD文件用來定義XML文件遵循的規(guī)則(格式),而!ENTITY就可實(shí)現(xiàn)如同占位符的作用,例如: 此...
    gambr0閱讀 2,332評論 0 1
  • 0x01 XXE基礎(chǔ)-XML基礎(chǔ)語法 XML被設(shè)計(jì)用來傳輸和存儲數(shù)據(jù)。 HTML被設(shè)計(jì)用來顯示數(shù)據(jù)。 0x02 什...
    BerL1n閱讀 7,266評論 1 5
  • 【旅行天數(shù)】:第84天 【特別的日子】: 早睡的一晚 【天氣/溫度/濕度】: 21-17 陰 【早睡】:目標(biāo)22:...
    書童_6869閱讀 344評論 0 1

友情鏈接更多精彩內(nèi)容