Burp Suite怎么测试XML外部实体注入(XXE)漏洞

13次阅读

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

Burp Suite怎么测试XML外部实体注入(XXE)漏洞

Burp Suite 测试 XXE 漏洞,核心是拦截并修改 XML 类型请求,注入恶意外部实体,观察响应中是否回显文件内容、触发 DNS 请求或引发报错——关键在于确认服务端是否解析了外部 DTD 且未禁用外部实体。

识别可能的 XXE 入点

先找带 XML 特征的请求:Content-Type 为 application/xmltext/xmlapplication/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),再发:

    ]>
    &xxe;

    (看是否有 DNS 请求到达)

检查响应与辅助验证

不是所有 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://(打内网)
  • 用参数实体嵌套:规避关键词过滤,例如:

    %xxe; ]>
    &send;

    (evil.dtd 内定义

  • 尝试不同编码:URL 编码 %20、HTML 实体 zuojiankuohaophpcn,或用注释包裹关键字干扰 WAF

基本上就这些。XXE 测试重在“试”和“看”——别只盯回显,DNS 外带和报错信息同样关键。只要服务端解析 XML 且没禁用外部实体,基本就能打穿。

text=ZqhQzanResources