更优雅的BurpSuite被动扫描流量转发插件实现
字数 1235 2025-08-22 18:37:15

BurpSuite被动扫描流量转发插件优化指南

背景与问题分析

在BurpSuite中设置上游代理时,所有流量(包括Intruder和Repeater模块)都会被转发到被动扫描器,这会导致:

  1. 手动测试时的流量也被转发,增加大量无用扫描
  2. 即使被动扫描器有去重功能,也会造成资源浪费
  3. 现有插件passive-scan-client存在功能缺陷

技术分析

原有实现的问题

  1. 认证处理缺陷:在Basic认证处理时,未对空用户名/密码进行正确判断,使用了错误的空值检查方法
  2. 流量控制不足:通过IProxyListener接口实现,无法区分不同模块的流量
  3. 性能问题:默认每个流量转发间隔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. 开发环境准备

  1. 使用IDEA进行开发调试
  2. 配置远程调试BurpSuite社区版:
    java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar burpsuite_community_v2023.10.2.4.jar
    

2. 关键代码修改

  1. 接口变更

    // 原代码
    BurpExtender.this.callbacks.registerProxyListener(BurpExtender.this);
    
    // 修改后
    BurpExtender.this.callbacks.registerHttpListener(BurpExtender.this);
    
  2. 模块识别:通过toolFlag识别流量来源模块:

    • IBurpExtenderCallbacks.TOOL_PROXY - 代理模块
    • IBurpExtenderCallbacks.TOOL_INTRUDER - Intruder模块
    • IBurpExtenderCallbacks.TOOL_REPEATER - Repeater模块
  3. Basic认证修复

    // 错误方式
    if(username == null || username == "" || password == null || password == "")
    
    // 正确方式
    if(username.isEmpty() || password.isEmpty())
    

3. 功能增强

  1. 模块选择:GUI增加控制选项,可选择监控哪些模块的流量
  2. 认证配置:将Basic认证请求头配置暴露到GUI
  3. 性能优化:将默认转发间隔从5秒改为100毫秒

使用指南

  1. 安装插件

    • 从GitHub获取编译好的jar文件
    • 在BurpSuite的Extender标签页中加载插件
  2. 配置选项

    • 模块选择:默认只监控Proxy模块,可根据需要开启Intruder/Repeater
    • Basic认证:设置被动扫描器的认证信息
    • 转发间隔:调整流量转发间隔时间(默认100ms)
  3. 使用场景

    • 常规被动扫描:只开启Proxy模块
    • 主动Fuzz配合扫描:可开启Intruder模块
    • API测试配合扫描:可开启Repeater模块

项目资源

  • 原项目地址:https://github.com/c0ny1/passive-scan-client
  • 优化版地址:https://github.com/yhy0/passive-scan-client

最佳实践

  1. 前端收集API后,使用Intruder模块Fuzz时开启Intruder流量转发
  2. 测试403绕过等场景时,配合被动扫描器使用
  3. 手动测试时关闭非必要模块的流量转发,减少干扰

总结

通过改用IHttpListener接口和模块识别机制,解决了原有插件的关键问题,实现了:

  1. 精确控制转发哪些模块的流量
  2. 修复了认证处理缺陷
  3. 大幅提升了转发效率

这种实现方式为BurpSuite被动扫描提供了更灵活、高效的流量转发方案。

BurpSuite被动扫描流量转发插件优化指南 背景与问题分析 在BurpSuite中设置上游代理时,所有流量(包括Intruder和Repeater模块)都会被转发到被动扫描器,这会导致: 手动测试时的流量也被转发,增加大量无用扫描 即使被动扫描器有去重功能,也会造成资源浪费 现有插件passive-scan-client存在功能缺陷 技术分析 原有实现的问题 认证处理缺陷 :在Basic认证处理时,未对空用户名/密码进行正确判断,使用了错误的空值检查方法 流量控制不足 :通过 IProxyListener 接口实现,无法区分不同模块的流量 性能问题 :默认每个流量转发间隔5秒,效率过低 解决方案 改用 IHttpListener 接口实现,利用 toolFlag 参数区分流量来源: 实现步骤 1. 开发环境准备 使用IDEA进行开发调试 配置远程调试BurpSuite社区版: 2. 关键代码修改 接口变更 : 模块识别 :通过 toolFlag 识别流量来源模块: IBurpExtenderCallbacks.TOOL_PROXY - 代理模块 IBurpExtenderCallbacks.TOOL_INTRUDER - Intruder模块 IBurpExtenderCallbacks.TOOL_REPEATER - Repeater模块 Basic认证修复 : 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被动扫描提供了更灵活、高效的流量转发方案。