Skip to content

handbye/RSVmpBypass

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

瑞数VMP bypass工具 - 综合文档

本项目是完全利用cursor编写的瑞数VMP bypass工具,过程文档目录中是在编码过程中我自己写的一些需求和cursor自己生成的总结文档。

项目概述

该工具用于捕获和替换HTTP请求参数,特别针对路径与特定参数的映射关系,主要应用于Burp Suite的请求重放场景。工具可以自动捕获关键参数(如自定义参数和Cookie),并在后续请求中自动替换这些参数,大大提高测试效率。

最新版本增加了多线程参数预获取和缓存功能,解决了每次请求都需要调用Playwright导致的延迟问题。

需求背景

基本需求

这个项目旨在解决以下问题:

  1. 当用户在burpsuite中使用repeater或intruder重放数据包时,有些特定参数(如LCXcLVWn和Cookie)需要实时捕获
  2. 这些参数通常在浏览器环境中动态生成,一旦使用就会失效
  3. 手动获取这些参数非常繁琐,影响测试效率

进阶需求

在基本功能实现后,我们发现了一些性能问题:

  1. Burp Suite插件调用Playwright获取参数和cookie的时候需要一定的时间,导致请求存在明显延迟
  2. 需要在第一次执行请求时就启动多个线程获取多组未使用的参数,然后缓存起来
  3. 之后的请求可以直接使用缓存的参数,使用后标记为已使用并删除

实际应用举例

以下是一个典型的请求示例:

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",可以根据具体应用场景进行配置。

系统组件

系统由三个主要组件组成:

  1. Burp Suite插件 (Java)

    • 实现了Burp Suite的扩展接口
    • 提供用户界面进行配置
    • 拦截和修改HTTP请求
    • 与Playwright脚本交互
    • 管理参数缓存池
  2. Playwright脚本 (Node.js)

    • 模拟HTTP请求
    • 拦截请求并提取参数
    • 通过WebSocket发送参数到服务器
  3. WebSocket服务器 (Node.js)

    • 接收参数并保存到JSON文件
    • 提供数据持久化存储

工作流程

基本流程

  1. 当用户在Burp Suite中使用Repeater或Intruder重放数据包时,插件提取数据包内容并通过Playwright模拟
  2. Playwright拦截此请求不发送,提取相关参数:
    • GET请求:提取路径和Cookie参数
    • POST请求:提取路径、自定义参数(默认为LCXcLVWn)和Cookie参数
  3. 捕获的参数通过WebSocket发送到服务器
  4. WebSocket服务器将数据保存到JSON文件
  5. Burp Suite插件加载此JSON文件,并在发出请求时自动替换相应参数

优化后的流程(多线程预获取)

  1. 首次执行请求时,除了获取当前所需的参数外,还会启动多个线程同时获取多组未使用的参数
  2. 预获取的参数被缓存到内存中,以供后续使用
  3. 后续请求时,直接从缓存中获取参数,无需等待Playwright
  4. 当缓存中的参数用完后,自动启动新的预获取任务

新功能说明:多线程参数预获取与缓存

主要改进

  1. 多线程参数预获取

    • 首次执行请求时,会启动多个线程同时获取多组未使用的参数
    • 默认启动3个线程,可在界面中自定义线程数
    • 预获取的参数被缓存到内存中,以供后续使用
  2. 参数缓存管理

    • 按请求路径分类管理缓存的参数
    • 使用一组参数后自动从缓存中删除
    • 当缓存中的参数用完后,自动启动新的预获取任务
  3. 性能优化

    • 避免每次请求都启动Playwright,大大减少操作延迟
    • 实现"用一组、补一组"的机制,保证参数供应
    • 线程池管理,避免创建过多线程
  4. 自定义参数名称

    • 不再局限于固定的"LCXcLVWn"参数名
    • 用户可以自定义需要捕获和替换的参数名称
    • 支持任意名称的参数捕获和替换

配置选项

  1. 预获取线程数

    • 控制同时启动的预获取任务数量
    • 默认值:3
    • 建议值:2-5(根据系统性能调整)
  2. 自定义参数名称

    • 设置需要捕获和替换的自定义参数名称
    • 默认值:"LCXcLVWn"
    • 可根据目标应用调整为任意参数名
  3. 清除缓存

    • 提供"清除参数缓存"按钮,可手动清空所有缓存的参数
    • 当需要重新获取全新参数时使用

使用方法

  1. 激活插件

    • 点击"激活插件"按钮,启动插件并初始化线程池
    • 可以根据需要调整"预获取线程数"和"自定义参数名称"
  2. 首次请求

    • 第一次在Repeater或Intruder中发送请求时,插件会实时获取参数
    • 同时会启动多个线程预获取更多参数用于后续请求
  3. 后续请求

    • 后续请求会直接使用缓存中的参数,无需等待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插件)

1. 安装WebSocket服务器

cd server
npm install

2. 安装Playwright脚本

cd playwright-script
npm install
# 安装Playwright浏览器
npx playwright install chromium

3. 构建Burp Suite插件

cd burp-plugin
gradle build

构建完成后,JAR文件将位于 burp-plugin/build/libs/ 目录下。

使用说明

1. 启动WebSocket服务器

cd server
npm start

服务器将在端口8081上启动WebSocket服务。

2. 在Burp Suite中加载插件

  1. 打开Burp Suite Professional
  2. 导航到 Extender -> Add
  3. 选择构建好的JAR文件
  4. 点击 Next 直到插件加载完成

3. 配置插件

  1. 在Burp Suite中打开 瑞数VMP bypass 选项卡
  2. 设置Node.js路径(默认为 /usr/local/bin/node
  3. 设置Playwright脚本路径(默认为用户主目录下的 playwright-script
  4. 设置JSON文件路径(默认为用户主目录下的 server/params-data.json
  5. 设置自定义参数名称(默认为 LCXcLVWn
  6. 设置预获取线程数(默认为 3
  7. 点击 激活插件 按钮启用功能

4. 使用插件捕获和替换参数

  1. 在Burp Suite的Repeater或Intruder中发送请求
  2. 插件将自动捕获请求并通过Playwright模拟
  3. 捕获的参数将通过WebSocket发送到服务器并保存到JSON文件
  4. 后续请求将自动使用保存的参数,实现参数替换

注意事项

  1. 预获取操作在后台进行,不会阻塞UI或其他操作
  2. 建议根据系统性能和网络状况调整线程数
  3. 如果参数泄露或失效,可以使用"清除参数缓存"重新获取
  4. 确保Playwright脚本和WebSocket服务器正在运行
  5. 插件默认每10秒重新加载一次参数数据,也可点击 重新加载参数数据 按钮手动加载
  6. 日志区域显示插件的运行状态和错误信息

故障排除

无法连接到WebSocket服务器

  • 确保WebSocket服务器正在运行
  • 检查防火墙设置是否允许端口8081的连接
  • 检查服务器地址是否正确(默认为 ws://localhost:8081

参数未被捕获

  • 检查Playwright脚本路径是否正确
  • 确保Node.js已正确安装
  • 查看插件日志区域中的错误信息

参数未被替换

  • 确保插件已激活
  • 检查JSON文件路径是否正确
  • 尝试手动点击 重新加载参数数据 按钮

性能问题

  • 增加预获取线程数可能提高性能,但会消耗更多系统资源
  • 减少预获取线程数可能降低性能,但会减少资源消耗
  • 根据实际情况进行调整

未来改进方向

  1. 支持更多参数类型:扩展对更多HTTP参数类型的支持
  2. 多会话支持:支持多个测试会话的参数隔离
  3. 参数智能分析:添加参数变化监测和智能分析功能
  4. 自动化测试:添加自动化测试脚本,确保功能稳定性
  5. 性能优化:进一步优化参数处理和替换的性能
  6. 更丰富的统计信息:提供更详细的参数使用统计和性能指标
  7. 更多浏览器支持:扩展对Firefox、Edge等浏览器的支持

安全考虑

  1. 本地处理:参数数据保存在本地,不涉及远程传输敏感数据
  2. 无网络泄露:Playwright拦截请求不实际发送,避免测试请求泄露
  3. 访问控制:WebSocket服务器仅在本地运行,减少外部访问风险

About

瑞数VMP bypass工具,适用于burpsuite。

Resources

Stars

Watchers

Forks

Packages

No packages published