當前位置:
首頁 > 新聞 > 淺談XXE攻擊

淺談XXE攻擊

0×00. 介紹


現在越來越多主要的web程序被發現和報告存在XXE(XML External Entity attack)漏洞,比如說facebook、paypal等等。

舉個例子,我們掃一眼這些網站最近獎勵的漏洞,充分證實了前面的說法。儘管XXE漏洞已經存在了很多年,但是它從來沒有獲得它應得的關注度。

很多XML的解析器默認是含有XXE漏洞的,這意味著開發人員有責任確保這些程序不受此漏洞的影響。

本文主要討論什麼是XML外部實體,這些外部實體是如何被攻擊的。


0×01. 什麼是XML外部實體?

如果你了解XML,你可以把XML理解為一個用來定義數據的東東。因此,兩個採用不同技術的系統可以通過XML進行通信和交換數據。

比如,下圖就是一個用來描述一個職工的XML文檔樣本,其中的』name』,"salary』,"address』 被稱為XML的元素。

有些XML文檔包含system標識符定義的「實體」,這些XML文檔會在DOCTYPE頭部標籤中呈現。

這些定義的』實體』能夠訪問本地或者遠程的內容。比如,下面的XML文檔樣例就包含了XML 『實體』。

在上面的代碼中, XML外部實體 『entityex』 被賦予的值為:file://etc/passwd。在解析XML文檔的過程中,實體』entityex』的值會被替換為URI(file://etc/passwd)內容值(也就是passwd文件的內容)。

關鍵字』SYSTEM』會告訴XML解析器,』entityex』實體的值將從其後的URI中讀取。因此,XML實體被使用的次數越多,越有幫助。


0×02. 什麼是XML外部實體攻擊?

有了XML實體,關鍵字』SYSTEM』會令XML解析器從URI中讀取內容,並允許它在XML文檔中被替換。因此,攻擊者可以通過實體將他自定義的值發送給應用程序,然後讓應用程序去呈現。

簡單來說,攻擊者強制XML解析器去訪問攻擊者指定的資源內容(可能是系統上本地文件亦或是遠程系統上的文件)。比如,下面的代碼將獲取系統上folder/file的內容並呈獻給用戶。


0×03. 怎麼甄別一個XML實體攻擊漏洞?

最直接的回答就是: 甄別那些接受XML作為輸入內容的端點。 但是有時候,這些端點可能並不是那麼明顯(比如,一些僅使用JSON去訪問服務的客戶端)。

在這種情況下,滲透測試人員就必須嘗試不同的測試方式,比如修改HTTP的請求方法,修改Content-Type頭部欄位等等方法,然後看看應用程序的響應,看看程序是否解析了發送的內容,如果解析了,那麼則可能有XXE攻擊漏洞。


0×04. 如何確認XXE漏洞?

出於演示的目的,我們將用到一個Acunetix維護的demo站點,這個站點就是: http://testhtml5.vulnweb.com/。這個站點可用於測試Acunetix web掃描器的功能。

訪問 http://testhtml5.vulnweb.com/ 站點,點擊 『Login』下面的 『Forgot Password』 鏈接。

注意觀察應用程序怎樣使用XML傳輸數據,過程如下圖所示:

請求:

響應:

觀察上面的請求與響應,我們可以看到,應用程序正在解析XML內容,接受特定的輸入,然後將其呈現給用戶。為了測試驗證XML解析器確實正在解析和執行我們自定義的XML內容,我們發送如下的請求

修改後的請求和響應:

如上圖所示,我們在上面的請求中定義了一個名為myentity、值為』testing』的實體。 響應報文清晰地展示了解析器已經解析了我們發送的XML實體,然後並將實體內容呈現出來了。 由此,我們可以確認,這個應用程序存在XXE漏洞。


0×05. 如何進行XXE攻擊?


Code 1:

1. To read files on same server:

]>

&myentity;

2. To crash the server / Cause denial of service:

]>

&lol9;

上面樣例代碼1中的XXE漏洞攻擊就是著名的』billion laughs』(https://en.wikipedia.org/wiki/Billion_laughs)攻擊,該攻擊通過創建一項遞歸的 XML 定義,在內存中生成十億個」Ha!」字元串,從而導致 DDoS 攻擊。

原理為:構造惡意的XML實體文件耗盡可用內存,因為許多XML解析器在解析XML文檔時傾向於將它的整個結構保留在內存中,解析非常慢,造成了拒絕伺服器攻擊。

除了這些,攻擊者還可以讀取伺服器上的敏感數據,還能通過埠掃描,獲取後端系統的開放埠。


影響:

此漏洞非常危險, 因為此漏洞會造成伺服器上敏感數據的泄露,和潛在的伺服器拒絕服務攻擊。


補救措施:

上面討論的主要問題就是XML解析器解析了用戶發送的不可信數據。然而,要去校驗DTD(document type definition)中SYSTEM標識符定義的數據,並不容易,也不大可能。大部分的XML解析器默認對於XXE攻擊是脆弱的。

因此,最好的解決辦法就是配置XML處理器去使用本地靜態的DTD,不允許XML中含有任何自己聲明的DTD。

比如下面的Java代碼,通過設置相應的屬性值為false,XML外部實體攻擊就能夠被阻止。因此,可將外部實體、參數實體和內聯DTD 都被設置為false,從而避免基於XXE漏洞的攻擊。 點擊閱讀原文查看代碼的第二段。


*參考來源:

resources

, 譯者:wenjian_tk0,轉載請註明來自FreeBuf


您的贊是小編持續努力的最大動力,動動手指贊一下吧!


本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

Cobalt Strike之DNS Beacon使用記錄
伊朗黑客對中東發起名為Magic Hound的網路間諜行為
淺談拒絕服務攻擊的原理與防禦(2) :反射型DDOS
矛與盾 | 二進位漏洞攻防思想對抗

TAG:FreeBuf |

您可能感興趣

淺談非PE的攻擊技巧
DNF全職業換裝攻略 淺談新版本技能攻擊力BUFF如何收益最大
淺談拒絕服務攻擊的原理與防禦(3)| 反射DDOS攻擊利用代碼
震驚!欲淘汰JAVA?淺談微軟的MC戰略
淺談GTAOL未來的5個願景
旅行必備?淺談ORICO智能插座方便在哪
淺談App Store改版對APP推廣帶來的影響
淺談《守望先鋒》中的 ECS 構架
淺談拒絕服務攻擊的原理與防禦(4):新型DDOS攻擊 – Websocket和臨時透鏡
GAMECO 李春:思路決定出路-淺談飛機排故
淺談WAF繞過技巧
淺談3D-NAND、QLC和SCM介質技術和新產品
淺談拒絕服務攻擊的原理與防禦(5) | NTP反射攻擊復現
淺談X射線天文
CAR-T研發及產業化淺談
《淺談AI、Bigdata、IOT》第2篇「BigAI」
淺談拒絕服務攻擊的原理與防禦(2) :反射型DDOS
淺談CPU,GPU,TPU,DPU,NPU,BPU
IT之家學院:Mac OS效率操作入門,淺談Option鍵妙用