用途
本技能用于对 Web 应用进行 XML 注入漏洞测试,识别数据泄露与服务端请求伪造等问题。适用场景包括:处理 XML 输入的应用(SOAP API、XML-RPC、文件上传);带有 XML 解析器的应用渗透测试;SAML 认证实现评估;处理 XML 格式的文件导入/导出功能测试;SOAP 或基于 XML 的 Web 服务 API 安全测试。
前置条件
- Burp Suite 及 XML 相关扩展(Content Type Converter、XXE Scanner)
- XMLLint 或类似 XML 校验工具
- 理解 XML 结构、DTD 与实体处理
- Python 3.x 及 lxml、requests 库
- 可访问带外交互服务器(Burp Collaborator、interact.sh)
- 来自 PayloadsAllTheThings 仓库的示例 XXE 载荷
工作流
步骤 1 — 识别 XML 处理端点
查找接受 XML 内容类型的端点(application/xml、text/xml、application/soap+xml);检查 SOAP 服务的 WSDL 文件;通过修改 Content-Type 测试端点是否接受 XML;检查 XML 文件上传功能(.xml、.svg、.xlsx、.docx 文件处理)。
步骤 2 — 测试基础 XXE(文件读取)
使用外部实体读取本地文件,如 /etc/passwd、c:/windows/win.ini;可使用 PHP wrapper 对文件内容进行 base64 编码。
步骤 3 — 测试盲注 XXE 与带外检测
使用外部 DTD 进行带外 XXE;通过 DNS 或 HTTP 带外通道检测盲注 XXE。
步骤 4 — 测试 SSRF via XXE
通过 XXE 进行内网扫描;访问云元数据端点(如 169.254.169.254);进行内部端口扫描。
步骤 5 — 测试 XPath 注入
在搜索参数中进行基础 XPath 注入;XPath 认证绕过;XPath 数据提取;基于布尔值的盲注 XPath 提取。
步骤 6 — 测试 XML Billion Laughs(DoS)
Billion Laughs 攻击(仅在授权测试中使用);二次爆炸攻击。
关键概念
- XXE(XML 外部实体):利用处理外部实体引用的 XML 解析器进行攻击
- 盲注 XXE:响应不反射的 XXE,需要带外通道
- XPath 注入:注入用于导航 XML 文档的 XPath 查询
- DTD(文档类型定义):定义 XML 文档结构和实体的声明
- 参数实体:DTD 中用于盲注 XXE 利用的特殊实体(%)
- SSRF via XXE:利用 XXE 使服务端请求内部资源
- XML 炸弹:通过递归实体扩展导致拒绝服务(Billion Laughs)
工具与系统
- Burp Suite:带 XXE Scanner 扩展的 HTTP 代理,用于自动化检测
- XXEinjector:自动化 XXE 注入与数据外泄工具
- OXML_XXE:在 Office XML 文档中嵌入 XXE 载荷的工具
- xmllint:用于载荷测试的 XML 校验与解析工具
- interact.sh:用于盲注 XXE 检测的带外交互服务器
- Content Type Converter:将 JSON 请求转换为 XML 以进行 XXE 测试的 Burp 扩展
常见场景
- 文件泄露:通过 XML 输入字段中的经典 XXE 实体注入读取敏感服务端文件(/etc/passwd、web.config)
- SSRF 至云元数据:通过 XXE 访问 AWS/GCP/Azure 元数据端点,窃取 IAM 凭证与访问令牌
- 盲注数据外泄:当 XXE 输出不反射时,通过带外 DNS/HTTP 通道提取敏感数据
- SAML XXE:在单点登录认证流程中向 SAML 断言注入 XXE 载荷
- SVG 文件上传 XXE:上传包含 XXE 载荷的恶意 SVG 文件,触发服务端 XML 解析
输出格式
评估报告包含目标、发现的漏洞类型、严重程度、发现表格(类型、端点、载荷、影响)以及修复建议。修复建议包括:在 XML 解析器配置中禁用外部实体处理;尽可能使用 JSON 替代 XML;实施带严格 DTD 限制的 XML schema 校验;阻止 XML 处理服务的出站连接。