Burp Suite 测试XXE漏洞需拦截修改XML请求注入外部实体,通过回显文件、DNS外带或报错确认DTD解析;识别入点看Content-Type和XML结构;构造payload分回显/盲注/错误触发三类;配合Collaborator验证,绕过技巧包括协议替换、参数实体嵌套和编码混淆。

Burp Suite 测试 XXE 漏洞,核心是拦截并修改 XML 类型请求,注入恶意外部实体,观察响应中是否回显文件内容、触发 DNS 请求或引发报错——关键在于确认服务端是否解析了外部 DTD 且未禁用外部实体。
识别可能的 XXE 入点
先找带 XML 特征的请求:Content-Type 为 application/xml、text/xml 或 application/xhtml+xml;请求体是格式良好的 XML(如含 、);常见于 API 接口、SOAP 请求、配置上传、SAML 身份断言等场景。
注意:有些接口虽不显式声明 XML 类型,但实际接受 XML 数据(比如 POST body 是纯 XML 字符串),需手动测试。
构造并发送 XXE payload
在 Burp Proxy 或 Repeater 中拦截目标请求,将原始 XML body 替换为以下基础 XXE 测试载荷之一:
-
基础文件读取(有回显):
]>
&xxe; -
带错误触发的读取(适用于盲 XXE):
(观察是否返回路径不存在类错误)
]>
&xxe; -
DNS 外带验证(盲 XXE):
先起一个监听域名(如用 interact.sh 或自己搭 DNSlog),再发:
(看是否有 DNS 请求到达)
]>
&xxe;
检查响应与辅助验证
不是所有 XXE 都直接回显内容。要综合判断:
- 响应中是否包含
/etc/passwd等敏感内容片段(注意编码,可能被 HTML 编码或 Base64) - 响应状态码是否异常(如 500 + 错误信息含 “xxe”、“entity”、“DTD”)
- 配合 Burp Collaborator:把 payload 中的 URL 换成 Burp 自动生成的 collaborator 域名,发送后点 “Poll Collaborator” 查看是否收到 HTTP/DNS 请求
- 若服务端用 PHP,尝试
php://filter/read=convert.base64-encode/resource=/etc/passwd绕过乱码
绕过常见防护的小技巧
遇到过滤或解析失败时可尝试:
- 改用不同协议:如
file://→expect://(PHP)、gopher://(打内网) - 用参数实体嵌套:规避关键词过滤,例如:
(evil.dtd 内定义
%xxe; ]>
&send; ) - 尝试不同编码:URL 编码
%20、HTML 实体zuojiankuohaophpcn,或用注释包裹关键字干扰 WAF
基本上就这些。XXE 测试重在“试”和“看”——别只盯回显,DNS 外带和报错信息同样关键。只要服务端解析 XML 且没禁用外部实体,基本就能打穿。










