更优雅的BurpSuite被动扫描流量转发插件实现
字数 1235 2025-08-22 18:37:15
BurpSuite被动扫描流量转发插件优化指南
背景与问题分析
在BurpSuite中设置上游代理时,所有流量(包括Intruder和Repeater模块)都会被转发到被动扫描器,这会导致:
- 手动测试时的流量也被转发,增加大量无用扫描
- 即使被动扫描器有去重功能,也会造成资源浪费
- 现有插件passive-scan-client存在功能缺陷
技术分析
原有实现的问题
- 认证处理缺陷:在Basic认证处理时,未对空用户名/密码进行正确判断,使用了错误的空值检查方法
- 流量控制不足:通过
IProxyListener接口实现,无法区分不同模块的流量 - 性能问题:默认每个流量转发间隔5秒,效率过低
解决方案
改用IHttpListener接口实现,利用toolFlag参数区分流量来源:
@Override
public void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo) {
// 插件开启
if (Config.IS_RUNNING && !messageIsRequest) {
// 开启监控Proxy,并且该消息是Proxy模块的
if (Config.PROXY && toolFlag == IBurpExtenderCallbacks.TOOL_PROXY) {
// 处理逻辑
}
}
}
实现步骤
1. 开发环境准备
- 使用IDEA进行开发调试
- 配置远程调试BurpSuite社区版:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar burpsuite_community_v2023.10.2.4.jar
2. 关键代码修改
-
接口变更:
// 原代码 BurpExtender.this.callbacks.registerProxyListener(BurpExtender.this); // 修改后 BurpExtender.this.callbacks.registerHttpListener(BurpExtender.this); -
模块识别:通过
toolFlag识别流量来源模块:IBurpExtenderCallbacks.TOOL_PROXY- 代理模块IBurpExtenderCallbacks.TOOL_INTRUDER- Intruder模块IBurpExtenderCallbacks.TOOL_REPEATER- Repeater模块
-
Basic认证修复:
// 错误方式 if(username == null || username == "" || password == null || password == "") // 正确方式 if(username.isEmpty() || password.isEmpty())
3. 功能增强
- 模块选择:GUI增加控制选项,可选择监控哪些模块的流量
- 认证配置:将Basic认证请求头配置暴露到GUI
- 性能优化:将默认转发间隔从5秒改为100毫秒
使用指南
-
安装插件:
- 从GitHub获取编译好的jar文件
- 在BurpSuite的Extender标签页中加载插件
-
配置选项:
- 模块选择:默认只监控Proxy模块,可根据需要开启Intruder/Repeater
- Basic认证:设置被动扫描器的认证信息
- 转发间隔:调整流量转发间隔时间(默认100ms)
-
使用场景:
- 常规被动扫描:只开启Proxy模块
- 主动Fuzz配合扫描:可开启Intruder模块
- API测试配合扫描:可开启Repeater模块
项目资源
- 原项目地址:https://github.com/c0ny1/passive-scan-client
- 优化版地址:https://github.com/yhy0/passive-scan-client
最佳实践
- 前端收集API后,使用Intruder模块Fuzz时开启Intruder流量转发
- 测试403绕过等场景时,配合被动扫描器使用
- 手动测试时关闭非必要模块的流量转发,减少干扰
总结
通过改用IHttpListener接口和模块识别机制,解决了原有插件的关键问题,实现了:
- 精确控制转发哪些模块的流量
- 修复了认证处理缺陷
- 大幅提升了转发效率
这种实现方式为BurpSuite被动扫描提供了更灵活、高效的流量转发方案。