XML外部實體(XXE)注入漏洞
阿新 • • 發佈:2022-05-23
XML外部實體(XXE)注入漏洞
XML
簡介
XML 指可擴充套件標記語言(eXtensible Markup Language),是一種用於標記電子檔案使其具有結構性的標記語言,被設計用來傳輸和儲存資料。
構建模組
- 元素 元素是XML以及 HTML文件的主要構建模組,元素可包含文字、其他元素或者為空。
- 屬性 屬性可提供有關元素的額外資訊,屬性總是被置於某元素的開始標籤中。例如:<imgsrc="pinginglab.gif">,其中img為元素名,src為屬性。
- 實體 實體是用來定義普通文字的變數。
- PCDATA PCDATA 的意思是被解析的字元資料(parsed character data) PCDATA是會被解析器解析的文字,這些文字將被解析器檢查實體以及標記。
- DATA DATA的意思是字元資料(character data )。CDATA是不會被解析器解析的文字。
基本語法
XML 文件在開頭有 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
的結構,這種結構被稱為 XML prolog ,用於宣告XML文件的版本和編碼,是可選的,但是必須放在文件開頭。
除了可選的開頭外,XML 語法主要有以下的特性:
- 所有 XML 元素都須有關閉標籤
- XML 標籤對大小寫敏感
- XML 必須正確地巢狀
- XML 文件必須有根元素
- XML 的屬性值需要加引號
XML外部實體(XXE)注入
原理
當允許引用外部實體時,攻擊者通過XML實體傳遞自己構造的惡意內容,傳送給應用程式並執行
攻擊方式
- 利用XXE來讀取任意檔案:定義一個包含檔案內容的外部實體,並在應用程式的響應包中返回其內容
- 利用XXE來執行SSRF 攻擊:根據後端系統的URL定義外部實體
- 利用XXE盲注帶外資料洩露:敏感資料從應用伺服器傳輸到攻擊者控制的系統
- 利用XXE盲注通過報錯資訊來讀取資料:通過觸發XML解析錯誤,在返回的錯誤訊息中包含敏感資料
危害
- 任意檔案讀取
- 執行系統命令
- 探測內網埠
- 攻擊內網網站
- 發起DOS攻擊
漏洞修復方法
XXE注入較為少見,修復也是比較簡單的事,只需將預定義字元進行轉義即可
預定義字元 | 轉義後的預定義字元 |
---|---|
< | < |
> | > |
& | & |
' | ' |
" | " |