Web服务中很多接口使用XML作为数据交换格式,尤其是企业级应用、SOAP服务以及部分REST风格API。测试人员在对这类接口进行安全评估时,往往需要拦截并篡改XML请求来验证服务端是否存在注入、逻辑绕过或信息泄露等问题。Burp Suite作为最流行的Web安全测试工具,天然支持对HTTP请求体的拦截与修改,XML请求也不例外。关键在于理解代理拦截机制以及如何高效编辑XML内容而不破坏其结构。

拦截XML请求的前置条件与识别方法
Burp Suite拦截任意HTTP请求的前提是客户端流量经过其代理。通常将浏览器或测试客户端的代理地址设置为127.0.0.1端口8080,并在Burp的Proxy模块中确认监听器处于运行状态。点击Proxy标签下的Intercept子标签,将拦截开关置为Intercept is on,此时所有经过代理的请求会被暂停显示在拦截窗口中。
XML请求与普通表单请求的不同点主要在于请求头中的Content-Type字段以及请求体的格式。当Content-Type为application/xml或text/xml时,请求体内容通常以<?xml声明开头,或者直接包含成对的XML标签。在拦截窗口的Raw视图中可以清晰看到这些特征。例如下面这个典型的XML登录请求:
POST /api/login HTTP/1.1
Host: target.ippipp.com
Content-Type: application/xml
Content-Length: 135
<?xml version="1.0" encoding="UTF-8"?>
<loginRequest>
<username>admin</username>
<password>123456</password>
</loginRequest>
从请求头判断Content-Type是识别XML请求最直接的方式。有时服务器也接受通配类型,但只要请求体以<开头且包含大量尖括号标签,基本可以断定是XML数据。拦截后首先要确认请求没有被Burp自动转发,否则需要重新触发请求。
在Proxy拦截窗口中实时修改XML内容
当XML请求被拦截后,测试人员可以直接在Raw视图中编辑请求体。Raw视图展示的是完整的HTTP报文,包括请求行、请求头和请求体,所有内容以纯文本呈现。修改XML时,重点改动请求体中的节点值、属性或者节点结构。比如把上面示例中的username节点值从admin改为任意测试字符串,或者把password节点删除,观察服务器响应是否异常。
修改操作非常直观:找到需要改动的节点标签,直接编辑其中的文本即可。例如把<username>admin</username>修改为<username>admin' or '1'='1</username>,用来测试XML注入。也可以添加新的节点,比如在loginRequest下插入<role>administrator</role>,看服务端是否会解析这个多余字段并赋予高权限。修改完成后点击Forward按钮放行请求,服务器处理后的响应会显示在HTTP历史记录中。
需要注意的是,手工修改可能破坏XML的语法结构。比如漏写结束标签、把属性引号去掉、或者错误地转义特殊字符(&、<、>等在XML中必须写成&、<、>),都可能导致服务器返回400错误。此时可以借助Burp的Pretty视图检查请求体格式是否合法,但Pretty视图对XML的渲染不如专用XML编辑器,因此建议在修改复杂XML时先在本地文本编辑器中验证结构。
利用Repeater模块反复修改并重放XML请求
拦截窗口适合快速的一次性修改,但当需要多次尝试不同参数值并对比响应差异时,Repeater模块更加高效。在Proxy拦截到XML请求后,右键点击请求,选择Send to Repeater,或者直接按Ctrl+R快捷键,该请求会被复制到Repeater标签页中。
在Repeater界面里,左侧显示请求报文,右侧显示响应报文。可以任意修改左侧的XML内容,然后点击Send按钮单独发送,不必经过代理拦截流程。每一次修改和发送都会在历史面板中留下记录,方便回溯。例如测试XML实体注入(XXE)时,可以反复修改DOCTYPE声明和实体引用:
POST /api/upload HTTP/1.1 Host: target.ippipp.com Content-Type: application/xml <?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <upload> <content>&xxe;</content> </upload>
每次修改实体定义或引用位置后发送,观察响应中是否返回了文件内容或出现错误信息,从而判断漏洞是否存在。Repeater还支持保存请求到项目文件,方便后续整理报告时调用。
使用Intruder对XML请求参数进行模糊测试
当需要系统性地测试XML中某个参数的不同取值时,Intruder模块提供了自动化攻击能力。将XML请求发送到Intruder后,在Positions子标签中标记需要替换的位置。Burp默认会标记所有可注入点,但测试人员应该手动清除多余标记,只保留目标XML节点值或者节点名称的一部分。例如只标记username节点中的文本内容。
标记方式是在XML请求体中选择目标文本,然后点击Add §按钮,所选区域会被§符号包围。比如<username>§admin§</username>,表示admin部分将被载荷替换。攻击类型选择Sniper(狙击手)即可逐个测试载荷,也可以选择Battering ram或Pitchfork处理多个位置。然后在Payloads子标签中配置载荷列表,可以加载常见用户名字典或者生成的注入Payload。
点击Start attack后,Intruder会向服务器连续发送修改后的请求,每个请求中的XML结构保持不变,只有标记位置的文本被替换。攻击结果会以表格形式呈现,包含响应状态码、长度和时间等信息,通过对比响应长度可以快速筛选出异常响应。例如用SQL注入载荷替换username值,若某条请求的响应长度显著增加,可能意味着注入生效。在进行XML爆破时,务必确保Content-Type头正确,并且载荷中不包含未转义的XML特殊字符,否则请求可能因格式错误而全部失败。
掌握Burp Suite对XML请求的拦截、修改、重放和模糊测试方法后,测试人员可以更深入地评估XML接口的安全性。关键在于理解代理的工作流程,并熟练利用各个模块的优势。实际测试中,结合手工修改和自动化攻击往往能发现更多潜在漏洞。
Burp Suite拦截XML请求修改XML请求修改时间:2026-09-22 22:30:08