XXE漏洞原理分析

2021-10-24 20:26:08 字數 1420 閱讀 3131

除了json外,xml也是一種常用的資料傳輸格式。對xml的解析有以下幾種常用的方式:dom,sax,jdom,dom4j,stax等。然而這幾種解析方式都可能會出現外部實體注入漏洞,這類漏洞統稱 xml 外部實體漏洞。

以下提供乙個請求如果接受的值是xml格式資料,則會存在xxe漏洞,我們使用下面簡單的xml內容來分析:

<?xml version="1.0" encoding="iso-8859-1"?>

]>

>

&xxe;

foo>

在上面的**中,xml外部實體 xxe 被賦值為file://etc/passwd內容的值(也就是paswd檔案的內容),關鍵字system 會告訴xml解析器, xxe 實體的值是從其後的uri中獲取.

簡單說就是攻擊者強制xml解析器去訪問攻擊者指定的資源內容(可能是系統上本地檔案/遠端系統上的檔案).

許多較早的或配置錯誤的xml處理器評估了xml檔案中的外部實體引用。攻擊者可以利用外部實體竊取使用uri檔案處理器的內部檔案和共享檔案、監聽內部掃瞄埠、執行遠端**和實施拒絕服務攻擊。

大量xxe缺陷已經被發現並被公開,這些缺陷包括嵌入式裝置的xxe缺陷。最簡單的方法是上傳可被接受的惡意xml檔案:

場景 #1:攻擊者嘗試從服務端提取資料:

<?xml version="1.0" encoding="iso-8859-1"?>

]>

>

&xxe;

foo>

場景 #2:攻擊者通過將上面的實體行更改為以下內容來探測服務

器的專用網路:

]>
場景 #3:攻擊者通過惡意檔案執行拒絕服務攻擊:

]>
總結:

通過xml解析器存在的漏洞, 基於uri的方式訪問一些協議(比如 file, ftp,dict, gopher,expect…)下的資源非法獲取一些伺服器上的檔案,或者將外部的檔案通過實體的方式寫入伺服器.

開發人員培訓是識別和減少xxe缺陷的關鍵,此外,防止xxe陷還需要:

• 盡可能使用簡單的資料格式(如: json),避免對敏感資料行序列化。

• 及時修復或更新應用程式或底層作業系統使用的所有xml處和庫。同時,通過依賴項檢測,將soap更新到1.2版本或更版本。

• 在應用的所有xml解析器中禁用xml外部實體和dtd程序。

• 在伺服器端實施積極的(「白名單」)輸入驗證、過濾和清以防止在xml文件、標題或節點**現惡意資料。

• 驗證xml或xsl檔案上傳功能是否使用xsd驗證或其他類似方法來驗證上傳的xml檔案。

• 儘管在許多整合環境中,手動**審查是大型、複雜應用程最佳選擇,但是sast 工具可以檢測源**中的xxe漏洞。

XXE 原理漏洞詳解

1 什麼是xxe漏洞 xxe漏洞全程xml external entity injection 即xml外部實體注入漏洞,xxe漏洞發生在應用程式解析xml輸入時,沒有禁止外部實體的載入,導致可載入惡意外部檔案,造成檔案讀取,命令執行 內網埠掃瞄 攻擊內網 發起dos攻擊等危害 可以模擬sql注入解...

XXE漏洞概述

xxe xml external entity injection 是xml的外部文件的一種注入漏洞。首先來看一下xml的大體結構 dtd document type definition 即文件型別定義,用來為xml文件定義語義約束。主要出問題的大多是從dtd這部分出的。dtd大體框架 dtd 內...

XXE漏洞利用

docker搜尋xxe相關映象包,然後pull下來,我這裡pull的是 rrodrigo xxelab 映象包。啟動docker環境,對映到vps的32776埠 訪問 輸入註冊資料,抓包重放。發現提交資料報採用 xml 格式傳遞,且郵箱有返回。這裡我們引用外部dtd實體,並且將email的值修改為引...