1. 前置知識#
XML 用於標記電子文件使其具有結構性的標記
語言,可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。XML 文檔結構包括 XML 声明、DTD 文檔類型定義(可選)、文檔元素
通常始於異步 JavaScript 和 XML 技術(ajax 技術):網頁應用能夠快速地將增量更新呈現在用戶界面上,而不需要重載(刷新)整個頁面。目前 JSON 的使用比 XML 更加普遍 JSON 和 XML 都被用於在 Ajax 模型中的 XML 技術。這種標記語言允許開發人員定義和表示任意數據結構的 HTML
常見的 XML 語法結構如下所示:
內部聲明實體格式:<!ENTITY 實體名稱 “實體的值”>。
引用外部實體格式:<!ENTITY 實體名稱 SYSTEM “URI”>
2. 漏洞描述#
XML 外部實體注入(XML External Entity)簡稱 XXE 漏洞
漏洞原理:
XXE 漏洞主要是利用了 DTD 引用外部實體導致的
一般會出現在當前站點允許引用外部實體的情況下
3. XXE 漏洞的攻擊#
3.1 有回显#
- 讀取敏感文件
- 使用 php 偽協議讀取文件
- 掃描內網端口
- 執行命令
3.2 沒回显#
- 可以使用外帶數據通道提取數據
4. XXE 漏洞防禦#
- 禁止外部實體方法
- 過濾用戶提交的 XML 數據
- 升級 libxml 組件
最後看個視頻結合文字來理解 XXE 漏洞 (需要科學上網)