1. 程式人生 > 其它 >XML外部實體(XXE)注入漏洞

XML外部實體(XXE)注入漏洞

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注入較為少見,修復也是比較簡單的事,只需將預定義字元進行轉義即可

預定義字元 轉義後的預定義字元
< &lt;
> &gt;
& &amp;
' &apos;
" &quot;