Skip to content

About

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

Resources

Stars

77 stars

Watchers

2 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

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

77 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages