XXE 检测方法
XXE(XML External Entity,XML 外部实体)指 XML 解析器在解析用户提交的 XML 时允许引用外部实体定义,攻击者可借此读取服务器本地文件、探测内网服务,或让服务器向指定地址发起请求。典型入口包括 SOAP 接口、XML 文件上传、配置导入、RSS 与报表解析;容易被忽略的是那些同时接受 JSON 与 XML 的接口——用 XML 重放同样的请求即可命中解析器。验证步骤是先找接受 XML 的入口,提交包含自定义实体定义的教学样例,观察是否被展开或报出解析路径错误;带外验证只在自建回调服务上进行。
基本信息
| 典型入口 | SOAP 接口、XML 上传、配置导入、RSS 与报表解析 |
|---|---|
| 信号 | 自定义实体被展开、报错暴露解析路径、带外回调 |
| 顺序 | 先回显验证,再考虑带外验证 |
| 带外要求 | 只使用自建或授权平台承载回调数据 |
| 修复方向 | 禁用外部实体与 DTD 解析,或使用安全的解析配置 |
典型使用场景
- SOAP 与 XML-RPC 接口:直接以 XML 作为请求体
- 文件上传:上传 XML 配置、导入数据、导入书签
- 报表与订阅:RSS、ATOM、报表模板解析
- 双格式接口:同时接受 JSON 与 XML 的接口需用 XML 重放
- 第三方对接:对接方提交的 XML 报文进入本地解析器
验证步骤
验证步骤
1. 找接受 XML 的入口(含兼容 XML 的接口)
2. 提交含自定义实体定义的教学样例,观察是否展开或报解析错误
3. 带外验证仅在自建回调服务上进行
4. 记录解析器类型、现象与请求样本(脱敏)
# 不要用第三方公网平台承载回调数据解析器行为与风险
| 解析器行为 | 风险 | 说明 |
|---|---|---|
| 允许外部实体 | 可读取本地文件 | 最典型的风险表现 |
| 允许 DTD | 可被放大与滥用 | 需一并评估资源消耗风险 |
| 回显解析报错 | 泄露路径与版本 | 错误信息可用于进一步探测 |
| 允许外部 DTD | 可发起外呼请求 | 配合带外验证判断是否可达 |
不要用第三方公网平台承载回调数据;涉及敏感系统的 DTD 解析行为要与客户确认后再测。
修复视角:禁用外部实体与 DTD 解析,或在解析器层面关闭外部实体加载能力,并保持解析库版本更新。