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 漏洞 (需要科学上网)