记一次特殊格式数据包加密后的burp与xray联动
字数 1067 2025-08-10 16:34:25
特殊格式数据包加密后的Burp与Xray联动渗透测试教学文档
0x00 案例背景与场景
本案例描述了一种特殊的数据包加密场景:请求包的body部分全部采用Base64编码。在实际渗透测试中,这种加密方式会带来以下挑战:
- 每次测试需要手动解密数据包
- 添加payload后需要重新编码
- 传统扫描工具无法直接处理加密数据
0x01 解决方案概述
通过Burp Suite与Xray联动,构建自动化处理流程:
- Burp1:负责解密原始请求
- Xray:负责漏洞扫描
- Burp2:负责重新加密并发送最终请求
0x02 详细配置步骤
1. Burp1配置(解密端)
安装必要插件
- 使用
autoDecode插件或自定义脚本处理Base64解码
自定义解密脚本配置
在Burp的Proxy > Options > Match and Replace中添加规则:
类型:Request body
匹配:.*
替换:base64解码后的内容
或使用Extensions > BApp Store安装Custom Payloads插件编写解码逻辑
代理设置
- 将处理后的流量转发到Xray监听端口(如7777)
2. Xray配置(扫描端)
基本配置
./xray webscan --listen 127.0.0.1:7777 --html-output xray-report.html
可选参数
--plugins:指定启用插件(如本例只启用sql注入检测)--level:设置扫描级别--proxy:设置上游代理(指向Burp2)
3. Burp2配置(加密端)
代理设置
- 监听端口与Xray配置的上游代理一致
- 在
Proxy>Options中添加加密规则
加密脚本
在Extensions中使用Python脚本实现自动Base64编码:
from burp import IBurpExtender
from burp import IHttpListener
import base64
class BurpExtender(IBurpExtender, IHttpListener):
def registerExtenderCallbacks(self, callbacks):
self._callbacks = callbacks
self._helpers = callbacks.getHelpers()
callbacks.setExtensionName("Auto Base64 Encoder")
callbacks.registerHttpListener(self)
def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):
if messageIsRequest:
request = messageInfo.getRequest()
analyzedRequest = self._helpers.analyzeRequest(request)
body = request[analyzedRequest.getBodyOffset():].tostring()
encodedBody = base64.b64encode(body)
newRequest = self._helpers.buildHttpMessage(
analyzedRequest.getHeaders(),
encodedBody
)
messageInfo.setRequest(newRequest)
0x03 测试流程验证
- 在Burp1的Repeater中发送加密请求
- 通过Logger查看解密后的明文
- 确认Xray接收到解密后的请求
- 检查Burp2是否正确重新编码并发送
0x04 常见问题排查
-
数据包格式错误
- 检查Base64编解码是否完整
- 验证HTTP头是否保留
-
代理链路中断
- 验证各组件监听端口是否正确
- 检查防火墙设置
-
编码异常
- 确保使用UTF-8编码
- 验证二进制数据兼容性
0x05 扩展应用
本方案可适用于其他加密场景:
- AES加密数据包
- 自定义加密算法
- 多层编码数据
只需相应修改Burp插件中的编解码逻辑即可实现自动化处理。
0x06 安全注意事项
- 生产环境测试前应在测试环境充分验证
- 注意敏感数据处理,避免信息泄露
- 扫描强度设置应符合测试授权范围
- 及时清理测试产生的临时数据
通过这套自动化流程,可显著提高加密接口的渗透测试效率,避免繁琐的手工操作。