XXE(XML外部實體注入)學習

2021-10-19 11:19:19 字數 1923 閱讀 7349

xml外部實體注入(xml external entity),簡稱 xxe 漏洞。

xml是用於標記電子檔案使其具有結構性的標記語言,可以用來標記資料、定義資料型別,是一種允許使用者對自己的標記語言進行定義的源語言。

xml 文件結構包括 xml 宣告、dtd文件型別定義、文件元素。

dtd (document type definition,文件型別定義),用來為 xml 文件定義語法約束。

攻擊者通過向伺服器注入指定的xml實體內容,從而讓伺服器按照指定的配置進行執行,導致問題。

即服務端接收和解析了來自使用者端的xml資料,而又沒有做嚴格的安全控制,從而導致xml外部實體注入。

一段常見的 xml 語法結構:

看起來有點像 html 語言,不過 xml 是用來傳輸和儲存資料,html 是用來顯示資料。

文件型別定義可以是內部宣告也可以用外部 dtd。

內部宣告 dtd 格式:

doctype

根元素[

元素宣告

]>

引用外部 dtd 格式:

doctype

根元素system

"檔名"

>

內部宣告實體格式:

實體名稱

"實體的值"

>

引用外部實體格式:

實體名稱

system

"uri"

>

在 dtd 中進行實體宣告時,將使用 entity 關鍵字來宣告。

實體是用於定義引用普通文字或特殊字元的快捷方式的變數。

還有其他的一些關鍵字:

doctype (dtd 的宣告)

system 、public (外部資源申請)

——

——

檔案讀取

命令執行

內網埠掃瞄

攻擊內網**

發起 dos 攻擊

……

——

——禁止使用外部實體,例如 libxml_disable_entity_loader(true) 。

過濾使用者提交的 xml 資料,防止出現非法內容。

————

下面通過pikachu 靶場對 xxe 漏洞進行簡單的測試

開啟介面,可以看到乙個輸入視窗,如果隨便輸入的話,會回顯錯誤。

先嘗試輸入:

<?xml version="1.0"?>

doctype

note

[b"text"

> ]

>

>

&b;name

>

&b; 是用來將 b 這個實體進行呼叫,可以以看到 b 實體的內容 「text」成功在前端回顯。( b 這個的名稱是可以更改的)

再嘗試用file協議讀取本地檔案 win.ini :

<?xml version="1.0"?>

doctype

note[

]>

>

&b;name

>

可以看到,成功回顯檔案裡的內容。

OWASP之XXE(XML外部實體注入)

前提條件 libxml2.9.1 及以後,預設不解析外部實體。可使用phpinfo 檢視libxml的版本資訊。後加phpinfo.php xml文件 組成 xml宣告,dtd部分,xml部分 cross domain policy根節點,http dtd引用檔案位置 dtd 文件型別定義 為xml...

CTF中關於XXE XML外部實體注入 題目兩道

題目 unctf do you like xml?hint weak password 弱密碼 2 根據題目hint 嘗試登陸 賬號密碼統一admin 提示登陸成功 bp發現為xxe xml外部實體注入 3 構造一下xxe 進行base64解密 得到flag 解密結果如下 flag flag 題目 ...

XML外部實體注入

參考文章 xxe漏洞逐漸走向消亡 libxml 2.9.0 以後 預設不解析外部實體 遂 xxe漏洞逐漸消亡 語法 1.xml元素都必須有關閉標籤。2.xml 標籤對大小寫敏感。3.xml 必須正確地巢狀。4.xml 文件必須有根元素。5.xml 的屬性值須加引號。結構 1.xml 文件宣告,在文件...