burp使用效率提升工具:bambda过滤模式的使用
字数 2473 2025-10-01 14:05:52

Burp Suite Bambda 过滤模式深度教学文档

1. 概述与前言

Bambda 是 Burp Suite Professional 在 2023.10.3 版本中引入的一项革命性特性。它允许用户通过编写自定义代码来筛选 HTTP History 中的条目,提供了远比传统基于设置模式的过滤更强大和灵活的操控能力。

主要价值

  1. 实现极其灵活的请求/响应数据过滤,能够基于复杂的逻辑条件精确匹配目标数据流。
  2. 支持对请求内容进行动态处理和替换,为高级攻击测试和流量修改提供了可能。

新版本同时支持将已配置的规则视图转换为 Bambda 表达式,便于学习和迁移。

2. 核心接口详解

Bambda 功能的实现依赖于 Burp Extensions Montoya API 中的几个关键接口。理解这些接口是编写有效 Bambda 代码的基础。

2.1 ProxyHttpRequestResponse 接口

此接口是处理 Burp 代理拦截的 HTTP 请求与响应 的核心。

常用方法与属性举例

// 获取当前请求的 MIME 类型 (e.g., "application/json", "text/html")
var mimeType = requestResponse.mimeType();

// 获取请求的路径(不包含查询参数),并转换为小写便于比较
var path = requestResponse.request().pathWithoutQuery().toLowerCase();

// 获取请求的 HTTP 方法 (e.g., "GET", "POST")
var method = requestResponse.request().method();

// 获取请求的目标主机名
String host = requestResponse.request().httpService().host();

// 获取完整的请求 URL
String url = requestResponse.request().url();

// 获取请求体内容(适用于 POST 等)
String body = requestResponse.request().bodyToString();

// 获取响应的状态码
int statusCode = requestResponse.response().statusCode();

官方API文档参考:https://portswigger.github.io/burp-extensions-montoya-api/javadoc/burp/api/montoya/proxy/ProxyHttpRequestResponse.html

2.2 ProxyWebSocketMessage 接口

此接口专门用于处理 WebSocket 消息

常用方法与属性举例

// 检查 WebSocket 消息负载中是否包含特定字符串(不区分大小写)
message.contains("openim.ws_msg_push_ack", false);

// 获取接收此 WebSocket 消息的监听器端口
int listenerPort = message.listenerPort();

// 获取 WebSocket 消息的负载内容,并转换为字符串
// 需要配合 Utilities 接口的转换工具
String payload = utilities().byteUtils().convertToString(message.payload().getBytes());

// 判断消息方向(客户端到服务器 / 服务器到客户端)
boolean isOutgoing = message.direction().isOutgoing();

官方API文档参考:ProxyWebSocketMessage (burp-extensions-montoya-api 2025.8 API)

2.3 Utilities 接口

这是一个功能丰富的工具类接口,提供各种数据编码、解码、转换和生成实用方法,是处理原始数据的瑞士军刀。

包含的常用工具类

  • base64Utils(): 用于 Base64 编码和解码。
  • byteUtils(): 用于字节数组和字符串之间的转换(非常常用)。
  • htmlUtils(): 用于 HTML 编码和解码。
  • urlUtils(): 用于 URL 编码和解码。
  • randomUtils(): 用于生成随机数、字符串等。
  • jsonUtils(): 用于解析和处理 JSON 数据。

2.4 logging 接口

用于在 Burp 的 Extender > Bambda 标签页下的输出控制台中进行调试和日志记录。在编写复杂表达式时,打印日志至关重要。

基本用法

// 输出日志到 Bambda 控制台
logging().output().println("This is a debug message: " + someVariable);
// 记录错误信息
logging().raiseError("An error occurred!");

3. 实际应用场景与代码示例

以下是一些可直接使用或稍作修改即可投入实战的 Bambda 代码片段。

3.1 过滤掉特定的 HTTP Method 请求

场景:在流量巨大的历史记录中隐藏所有 OPTIONS 或 TRACE 等噪音请求。

// 隐藏所有 OPTIONS 方法的请求
var method = requestResponse.request().method();
return !method.equalsIgnoreCase("OPTIONS");

// 隐藏 GET 和 OPTIONS 请求
var method = requestResponse.request().method();
return !(method.equalsIgnoreCase("GET") || method.equalsIgnoreCase("OPTIONS"));

3.2 过滤掉特定的 Host 请求

场景:专注于测试目标域名,排除第三方资源(如 jQuery、Google Analytics 等)的干扰。

// 只显示指向 example.com 或其子域的请求
String host = requestResponse.request().httpService().host();
return host.endsWith("example.com") || host.endsWith(".example.com"); // 注意前面的点

// 排除所有对 google.com 相关域的请求
String host = requestResponse.request().httpService().host();
return !host.contains("google");

3.3 过滤 WebSocket 中包含特定字符的请求

场景:在大量的 WS 消息中,只关注包含特定指令或数据的消息。

// 只显示包含 "critical_error" 或 "user_login" 的 WebSocket 消息
String payload = utilities().byteUtils().convertToString(message.payload().getBytes());
return payload.contains("critical_error") || payload.contains("user_login");

3.4 提取并高亮 WebSocket JSON 消息中的特定字段

场景:WS 消息是 JSON 格式,需要快速定位其中某个字段的值(如 userID)。

// 1. 首先确保是 JSON 格式的 WS 消息
String payload = utilities().byteUtils().convertToString(message.payload().getBytes());
if(payload.trim().startsWith("{") && payload.contains("\"userId\":")) {
    // 此处可以编写简单的解析逻辑或使用 jsonUtils() 提取值
    // 这里仅作过滤,高亮需要在匹配器 (Matcher) 中设置
    return true;
}
return false;

3.5 提取请求中的 Email 并高亮显示

场景:在请求参数或响应中快速发现和标记可能的敏感信息(邮箱)。

// 组合使用请求和响应搜索
import java.util.regex.Pattern;
import java.util.regex.Matcher;

String requestAndResponse = requestResponse.request().toString() + requestResponse.response().toString();
Pattern pattern = Pattern.compile("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}");
Matcher matcher = pattern.matcher(requestAndResponse);
return matcher.find(); // 如果找到邮箱则返回 true,该条目会显示

注意:此正则表达式仅作示例,可能需调整以适应不同格式的邮箱。

3.6 动态替换消息头中的值

场景:自动化修改所有请求中的某个 Header,例如将 User-Agent 替换为自定义值。

// 注意:Bambda 主要用于过滤,但结合 Montoya API 的修改能力可以实现替换
// 以下概念性代码展示逻辑,完整实现通常在 Burp 扩展中而非单行 Bambda
var request = requestResponse.request();
if (request.headers().contains("User-Agent: Old-Agent")) {
    // 创建一个修改后的请求(此处为概念性代码)
    var newRequest = request.withHeader("User-Agent", "My-Custom-Agent");
    // 用修改后的请求替换原请求(此操作通常在代理拦截或修改扩展中完成)
    // requestResponse = requestResponse.withRequest(newRequest);
    return true; // 让修改后的请求通过
}
return true;

重要:在 Bambda 过滤器中直接修改请求/响应需要深入理解 API 的工作流程,通常更复杂的修改会通过编写完整的 Burp 扩展来实现。

4. 使用流程与技巧

  1. 开启 Bambda

    • 进入 Proxy > HTTP history
    • 点击过滤器栏中的 Filter 按钮。
    • 在弹出的规则视图中,将模式从 SimpleAdvanced 切换到 Bambda
  2. 编写与测试

    • 在下方的代码编辑器中输入你的逻辑。代码必须返回一个 boolean 值(true 表示保留该条目,false 表示过滤掉)。
    • 充分利用 logging().output().println() 进行调试,输出变量值,判断逻辑分支。
    • 编写完成后,流量列表会实时刷新,立即呈现过滤效果。
  3. 转换学习

    • 先在 Simple/Advanced 模式下配置规则,然后切换到 Bambda 模式,Burp 会自动生成等效的代码表达式。这是学习 Bambda 语法的最佳方式
  4. 性能考量

    • 过于复杂的 Bambda 表达式(如深度解析大型 JSON 或 XML)可能会对 Burp 性能产生轻微影响。在处理极高流量时,应保持逻辑简洁高效。

5. 总结

Bambda 模式将 Burp Suite 的流量过滤能力从简单的模式匹配提升到了可编程级别。通过掌握 ProxyHttpRequestResponseProxyWebSocketMessageUtilities 等核心接口,安全测试人员能够:

  • 精准定位:从海量流量中快速筛选出与测试目标最相关的关键请求。
  • 降低噪音:有效排除第三方资源、健康检查等无关流量的干扰。
  • 深度处理:不仅限于过滤,更为高级的流量分析和修改提供了入口。
  • 提升效率:将重复性的手动筛选工作自动化,极大提升了渗透测试和漏洞挖掘的工作流效率。

建议结合官方 Montoya API 文档进行实践,从简单的规则转换开始,逐步编写更复杂的自定义过滤逻辑,从而完全掌控 Burp Suite 中的流量视图。

Burp Suite Bambda 过滤模式深度教学文档 1. 概述与前言 Bambda 是 Burp Suite Professional 在 2023.10.3 版本中引入的一项革命性特性。它允许用户通过编写 自定义代码 来筛选 HTTP History 中的条目,提供了远比传统基于设置模式的过滤更强大和灵活的操控能力。 主要价值 : 实现极其灵活的请求/响应数据过滤 ,能够基于复杂的逻辑条件精确匹配目标数据流。 支持对请求内容进行动态处理和替换 ,为高级攻击测试和流量修改提供了可能。 新版本同时支持将已配置的规则视图转换为 Bambda 表达式,便于学习和迁移。 2. 核心接口详解 Bambda 功能的实现依赖于 Burp Extensions Montoya API 中的几个关键接口。理解这些接口是编写有效 Bambda 代码的基础。 2.1 ProxyHttpRequestResponse 接口 此接口是处理 Burp 代理拦截的 HTTP 请求与响应 的核心。 常用方法与属性举例 : 官方API文档参考: https://portswigger.github.io/burp-extensions-montoya-api/javadoc/burp/api/montoya/proxy/ProxyHttpRequestResponse.html 2.2 ProxyWebSocketMessage 接口 此接口专门用于处理 WebSocket 消息 。 常用方法与属性举例 : 官方API文档参考: ProxyWebSocketMessage (burp-extensions-montoya-api 2025.8 API) 2.3 Utilities 接口 这是一个功能丰富的 工具类接口 ,提供各种数据编码、解码、转换和生成实用方法,是处理原始数据的瑞士军刀。 包含的常用工具类 : base64Utils() : 用于 Base64 编码和解码。 byteUtils() : 用于字节数组和字符串之间的转换( 非常常用 )。 htmlUtils() : 用于 HTML 编码和解码。 urlUtils() : 用于 URL 编码和解码。 randomUtils() : 用于生成随机数、字符串等。 jsonUtils() : 用于解析和处理 JSON 数据。 2.4 logging 接口 用于在 Burp 的 Extender > Bambda 标签页下的输出控制台中进行 调试和日志记录 。在编写复杂表达式时,打印日志至关重要。 基本用法 : 3. 实际应用场景与代码示例 以下是一些可直接使用或稍作修改即可投入实战的 Bambda 代码片段。 3.1 过滤掉特定的 HTTP Method 请求 场景:在流量巨大的历史记录中隐藏所有 OPTIONS 或 TRACE 等噪音请求。 3.2 过滤掉特定的 Host 请求 场景:专注于测试目标域名,排除第三方资源(如 jQuery、Google Analytics 等)的干扰。 3.3 过滤 WebSocket 中包含特定字符的请求 场景:在大量的 WS 消息中,只关注包含特定指令或数据的消息。 3.4 提取并高亮 WebSocket JSON 消息中的特定字段 场景:WS 消息是 JSON 格式,需要快速定位其中某个字段的值(如 userID)。 3.5 提取请求中的 Email 并高亮显示 场景:在请求参数或响应中快速发现和标记可能的敏感信息(邮箱)。 注意:此正则表达式仅作示例,可能需调整以适应不同格式的邮箱。 3.6 动态替换消息头中的值 场景:自动化修改所有请求中的某个 Header,例如将 User-Agent 替换为自定义值。 重要:在 Bambda 过滤器中直接修改请求/响应需要深入理解 API 的工作流程,通常更复杂的修改会通过编写完整的 Burp 扩展来实现。 4. 使用流程与技巧 开启 Bambda : 进入 Proxy > HTTP history 。 点击过滤器栏中的 Filter 按钮。 在弹出的规则视图中,将模式从 Simple 或 Advanced 切换到 Bambda 。 编写与测试 : 在下方的代码编辑器中输入你的逻辑。代码必须返回一个 boolean 值( true 表示保留该条目, false 表示过滤掉)。 充分利用 logging().output().println() 进行调试,输出变量值,判断逻辑分支。 编写完成后,流量列表会 实时刷新 ,立即呈现过滤效果。 转换学习 : 先在 Simple/Advanced 模式下配置规则,然后切换到 Bambda 模式,Burp 会自动生成等效的代码表达式。这是 学习 Bambda 语法的最佳方式 。 性能考量 : 过于复杂的 Bambda 表达式(如深度解析大型 JSON 或 XML)可能会对 Burp 性能产生轻微影响。在处理极高流量时,应保持逻辑简洁高效。 5. 总结 Bambda 模式将 Burp Suite 的流量过滤能力从简单的模式匹配提升到了 可编程级别 。通过掌握 ProxyHttpRequestResponse 、 ProxyWebSocketMessage 、 Utilities 等核心接口,安全测试人员能够: 精准定位 :从海量流量中快速筛选出与测试目标最相关的关键请求。 降低噪音 :有效排除第三方资源、健康检查等无关流量的干扰。 深度处理 :不仅限于过滤,更为高级的流量分析和修改提供了入口。 提升效率 :将重复性的手动筛选工作自动化,极大提升了渗透测试和漏洞挖掘的工作流效率。 建议结合官方 Montoya API 文档进行实践,从简单的规则转换开始,逐步编写更复杂的自定义过滤逻辑,从而完全掌控 Burp Suite 中的流量视图。