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 文件宣告,在文件...