本项目是完全利用cursor编写的瑞数VMP bypass工具,过程文档目录中是在编码过程中我自己写的一些需求和cursor自己生成的总结文档。
该工具用于捕获和替换HTTP请求参数,特别针对路径与特定参数的映射关系,主要应用于Burp Suite的请求重放场景。工具可以自动捕获关键参数(如自定义参数和Cookie),并在后续请求中自动替换这些参数,大大提高测试效率。
最新版本增加了多线程参数预获取和缓存功能,解决了每次请求都需要调用Playwright导致的延迟问题。
这个项目旨在解决以下问题:
- 当用户在burpsuite中使用repeater或intruder重放数据包时,有些特定参数(如LCXcLVWn和Cookie)需要实时捕获
- 这些参数通常在浏览器环境中动态生成,一旦使用就会失效
- 手动获取这些参数非常繁琐,影响测试效率
在基本功能实现后,我们发现了一些性能问题:
- Burp Suite插件调用Playwright获取参数和cookie的时候需要一定的时间,导致请求存在明显延迟
- 需要在第一次执行请求时就启动多个线程获取多组未使用的参数,然后缓存起来
- 之后的请求可以直接使用缓存的参数,使用后标记为已使用并删除
以下是一个典型的请求示例:
POST http://xxx:7501/mobileAppServer/100/110?LCXcLVWn=0qvpJZalqWJ_pyGIwbrcmbA6qW8eC6Gyo3mw.ju8JN3eHCLo5N2AfEwwoXGKrFy4Rkk4g4XMq9kk64X.INSQMq0jXihtiuWYCNWf0cu6qaKBYRDCXJ4I6RLPe4EBTYOrJyQeAXj9p5t3 HTTP/1.1
Host: xxx:7501
Content-Length: 24
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
Accept: application/json, text/plain, */*
DNT: 1
Content-Type: application/x-www-form-urlencoded
Origin: http://xxx:7501
Referer: http://xxx:7501/mobileApp/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: RrWXLfYMshGCS=60lOjnFBW5QTn5PV8dgLRvGu2bBjM_pqRC5PmtmaE17CgvoclbRqq7eNM_dhXa.ghME3vOEwVjwuFabAegSxHDxA; RrWXLfYMshGCT=050jJCeyBXw9PTJGHuZmERGfkL0waOB46EE3B85egv56sO3ZJddNE7DLBpadpO5XHjUXpLVC0R.w.6Yav6Q7S4O0SGZWEh9ysiKUvnPpPPewjWIoNp1oTOvW0K_bbXzGrLILFF.YyPHSZ1gTYiObqK.eL6nD.EfPYELjK24luAph_9SiKYNViwRKI1DoFu.5ETWw9hTYiofSdEX5vTzMci.wt4EyUWEVh17c1s9ID8dVaS6_HIpg64WCmeoTErzPqXklglTfsqumBNxw2VXZak0Tdl9cyO7L6VVW72sUIYKHhN_8AnzSnWBxGvXfdmrgkWSql3p_h33IujblEshhgp4xZEhXhrFNUDg4X19_uyq1VyeFaL6PPQtkCZUA_yTHRkyYa_HKTvIfoFBCqpC7wAhyfAHs8IKAPZDtCQT9zL4L
sec-ch-ua-platform: "Windows"
sec-ch-ua: "Not/A)Brand";v="8", "Chromium";v="118", "Google Chrome";v="118"
sec-ch-ua-mobile: ?0
Connection: keep-alive
showLoading=false&token=
这个请求中的LCXcLVWn参数和Cookie是不能直接使用的,需要在浏览器中模拟此请求后自动生成。而且,生成后不能发送数据包,否则这些参数就会失效。我们的工具就是要自动提取在浏览器中生成的这些参数,并在后续请求中使用。
最新版本支持自定义参数名称,不再局限于"LCXcLVWn",可以根据具体应用场景进行配置。
系统由三个主要组件组成:
- 
Burp Suite插件 (Java) - 实现了Burp Suite的扩展接口
- 提供用户界面进行配置
- 拦截和修改HTTP请求
- 与Playwright脚本交互
- 管理参数缓存池
 
- 
Playwright脚本 (Node.js) - 模拟HTTP请求
- 拦截请求并提取参数
- 通过WebSocket发送参数到服务器
 
- 
WebSocket服务器 (Node.js) - 接收参数并保存到JSON文件
- 提供数据持久化存储
 
- 当用户在Burp Suite中使用Repeater或Intruder重放数据包时,插件提取数据包内容并通过Playwright模拟
- Playwright拦截此请求不发送,提取相关参数:
- GET请求:提取路径和Cookie参数
- POST请求:提取路径、自定义参数(默认为LCXcLVWn)和Cookie参数
 
- 捕获的参数通过WebSocket发送到服务器
- WebSocket服务器将数据保存到JSON文件
- Burp Suite插件加载此JSON文件,并在发出请求时自动替换相应参数
- 首次执行请求时,除了获取当前所需的参数外,还会启动多个线程同时获取多组未使用的参数
- 预获取的参数被缓存到内存中,以供后续使用
- 后续请求时,直接从缓存中获取参数,无需等待Playwright
- 当缓存中的参数用完后,自动启动新的预获取任务
- 
多线程参数预获取 - 首次执行请求时,会启动多个线程同时获取多组未使用的参数
- 默认启动3个线程,可在界面中自定义线程数
- 预获取的参数被缓存到内存中,以供后续使用
 
- 
参数缓存管理 - 按请求路径分类管理缓存的参数
- 使用一组参数后自动从缓存中删除
- 当缓存中的参数用完后,自动启动新的预获取任务
 
- 
性能优化 - 避免每次请求都启动Playwright,大大减少操作延迟
- 实现"用一组、补一组"的机制,保证参数供应
- 线程池管理,避免创建过多线程
 
- 
自定义参数名称 - 不再局限于固定的"LCXcLVWn"参数名
- 用户可以自定义需要捕获和替换的参数名称
- 支持任意名称的参数捕获和替换
 
- 
预获取线程数 - 控制同时启动的预获取任务数量
- 默认值:3
- 建议值:2-5(根据系统性能调整)
 
- 
自定义参数名称 - 设置需要捕获和替换的自定义参数名称
- 默认值:"LCXcLVWn"
- 可根据目标应用调整为任意参数名
 
- 
清除缓存 - 提供"清除参数缓存"按钮,可手动清空所有缓存的参数
- 当需要重新获取全新参数时使用
 
- 
激活插件 - 点击"激活插件"按钮,启动插件并初始化线程池
- 可以根据需要调整"预获取线程数"和"自定义参数名称"
 
- 
首次请求 - 第一次在Repeater或Intruder中发送请求时,插件会实时获取参数
- 同时会启动多个线程预获取更多参数用于后续请求
 
- 
后续请求 - 后续请求会直接使用缓存中的参数,无需等待Playwright
- 缓存中的参数用完后,会自动获取新的参数
 
插件日志中增加了以下相关信息:
- 线程池已初始化,线程数: X- 线程池创建完成
- 从缓存获取参数,路径: XXX,剩余: X- 成功从缓存获取参数
- 缓存中没有路径 'XXX' 的参数,启动实时获取- 缓存未命中
- 计划预获取 X 组参数,路径: XXX- 开始预获取参数
- 启动预获取任务 #X,路径: XXX- 预获取任务开始
- 预获取任务 #X 完成,已添加到缓存,当前缓存大小: X- 预获取任务完成
- 参数缓存已清除- 手动清除缓存操作完成
.
├── README.md              # 项目说明
├── README_新功能.md        # 新功能说明
├── INSTALL.md             # 安装和使用指南
├── SUMMARY.md             # 项目总结
├── burp-plugin/           # Burp Suite插件代码
│   ├── build.gradle       # Gradle构建文件
│   └── src/               # 源代码目录
│       └── main/java/com/http/paramcapture/
│           └── BurpExtender.java  # 插件主类
├── playwright-script/     # Playwright脚本代码
│   ├── index.js           # 脚本主文件
│   └── package.json       # Node.js依赖配置
└── server/                # WebSocket服务器代码
    ├── server.js          # 服务器主文件
    └── package.json       # Node.js依赖配置
- Burp Suite Professional
- Node.js 14+
- Java JDK 1.8+
- Gradle(用于构建Burp插件)
cd server
npm installcd playwright-script
npm install
# 安装Playwright浏览器
npx playwright install chromiumcd burp-plugin
gradle build构建完成后,JAR文件将位于 burp-plugin/build/libs/ 目录下。
cd server
npm start服务器将在端口8081上启动WebSocket服务。
- 打开Burp Suite Professional
- 导航到 Extender->Add
- 选择构建好的JAR文件
- 点击 Next直到插件加载完成
- 在Burp Suite中打开 瑞数VMP bypass选项卡
- 设置Node.js路径(默认为 /usr/local/bin/node)
- 设置Playwright脚本路径(默认为用户主目录下的 playwright-script)
- 设置JSON文件路径(默认为用户主目录下的 server/params-data.json)
- 设置自定义参数名称(默认为 LCXcLVWn)
- 设置预获取线程数(默认为 3)
- 点击 激活插件按钮启用功能
- 在Burp Suite的Repeater或Intruder中发送请求
- 插件将自动捕获请求并通过Playwright模拟
- 捕获的参数将通过WebSocket发送到服务器并保存到JSON文件
- 后续请求将自动使用保存的参数,实现参数替换
- 预获取操作在后台进行,不会阻塞UI或其他操作
- 建议根据系统性能和网络状况调整线程数
- 如果参数泄露或失效,可以使用"清除参数缓存"重新获取
- 确保Playwright脚本和WebSocket服务器正在运行
- 插件默认每10秒重新加载一次参数数据,也可点击 重新加载参数数据按钮手动加载
- 日志区域显示插件的运行状态和错误信息
- 确保WebSocket服务器正在运行
- 检查防火墙设置是否允许端口8081的连接
- 检查服务器地址是否正确(默认为 ws://localhost:8081)
- 检查Playwright脚本路径是否正确
- 确保Node.js已正确安装
- 查看插件日志区域中的错误信息
- 确保插件已激活
- 检查JSON文件路径是否正确
- 尝试手动点击 重新加载参数数据按钮
- 增加预获取线程数可能提高性能,但会消耗更多系统资源
- 减少预获取线程数可能降低性能,但会减少资源消耗
- 根据实际情况进行调整
- 支持更多参数类型:扩展对更多HTTP参数类型的支持
- 多会话支持:支持多个测试会话的参数隔离
- 参数智能分析:添加参数变化监测和智能分析功能
- 自动化测试:添加自动化测试脚本,确保功能稳定性
- 性能优化:进一步优化参数处理和替换的性能
- 更丰富的统计信息:提供更详细的参数使用统计和性能指标
- 更多浏览器支持:扩展对Firefox、Edge等浏览器的支持
- 本地处理:参数数据保存在本地,不涉及远程传输敏感数据
- 无网络泄露:Playwright拦截请求不实际发送,避免测试请求泄露
- 访问控制:WebSocket服务器仅在本地运行,减少外部访问风险