vigolium/burp-vigolium
GitHub: vigolium/burp-vigolium
一款将 Burp Suite 流量深度对接至 Vigolium 安全扫描引擎的扩展,支持双向同步、多种扫描调度及结果管理。
Stars: 5 | Forks: 0
# Vigolium Burp Suite 扩展
一款 Burp Suite 扩展,用于将 HTTP 流量发送至 Vigolium 安全扫描引擎、查看生成的扫描结果,以及进行双向流量同步。它支持从 Burp 进行显式调度、自动 Proxy 转发、Target Site map 快照,以及用于 CLI 和服务器集成的可选的、仅限环回(loopback-only)的实时桥接。
- **版本:** `0.2.0`
- **GitHub:** [github.com/vigolium/vigolium](https://github.com/vigolium/vigolium)
- **文档:** [docs.vigolium.com](https://docs.vigolium.com/)
- **官网:** [www.vigolium.com](https://www.vigolium.com/)
| Vigolium Burp 集成 1 | Vigolium Burp 集成 2 |
|:---:|:---:|
|  |  |
|  |  |
## 架构
```
Selected or Proxy traffic ──► Vigolium Extension ──► Vigolium API ──► Scan Engine
▲ │
└──── Records ◄──────┘
Burp Target Site map ── snapshot upload ───────────► Vigolium API
Vigolium CLI/server ◄── loopback live bridge ────► Burp Proxy history / Site map
```
## 功能特性
- **三种调度工作流** — 将选定的 Burp 流量发送至摄取 (ingestion)、原生扫描 (native scan) 或 Agentic 扫描 (agentic scan)
- **直接上下文菜单操作** — 无需打开嵌套菜单,即可直接从 Proxy History、Target Site map、Repeater 以及其他受支持的 Burp 请求视图中进行调度
- **Proxy 模式** — 根据可配置的包含、排除和范围内 (in-scope) 规则自动转发 Proxy 流量
- **Target Site map 快照** — 使用 `Ctrl+Alt+S` 按需同步当前的 Target Site map,或按可配置的时间间隔自动同步
- **双向实时桥接** — 通过可选的、仅限环回的监听器,从 Vigolium 查询实时的 Burp 历史记录,或将 Vigolium 流量复制到 Burp 的 Target Site map 中
- **Findings 工作流** — 过滤和排序 findings,在多个证据标签页之间切换,在 Burp 编辑器中检查消息,展开查看完整描述,并将完整的 finding 复制为 Markdown
- **HTTP 记录工作流** — 在查看已存储的请求和响应记录时,支持对每个数据列进行过滤、分页和排序
- **扫描追踪** — 通过一致的工具栏、分页、刷新控制和日志视图来审查原生扫描和 Agentic 扫描
- **键盘驱动刷新** — 在任何记录视图中使用 `Ctrl+Alt+R` 激活其“刷新”按钮
- **集成诊断** — 测试 Vigolium 服务器和本地 Bridge 连接,检查请求计数器,并在 Logs 标签页中跟踪活动情况
## 标签页
| 标签页 | 用途 |
|-----|---------|
| **Findings Records** | 可搜索和排序的 findings、证据标签页、请求/响应编辑器、描述以及 Markdown 复制功能 |
| **HTTP Records** | 与 Vigolium 同步的、可过滤和排序的请求/响应记录 |
| **Scanning Records** | 原生和 Agentic 扫描历史、分页、自动刷新和扫描日志 |
| **Bridge** | Target Site Map 快照、实时环回监听器、Proxy 转发和过滤规则 |
| **Settings** | 扩展版本、服务器连接、扫描选项、请求统计和可配置的热键 |
| **Logs** | 带有时间戳的活动日志 (INFO/WARN/ERROR) |
## 技术栈
| 组件 | 选择 |
|-----------|--------|
| Burp API | Montoya API |
| 构建 | Gradle (Kotlin DSL) + Shadow plugin |
| Java | 21 |
| HTTP Client | OkHttp |
| JSON | Gson |
## 安装说明
从 [burp-vigolium.jar](https://github.com/vigolium/burp-vigolium/blob/main/burp-vigolium.jar) 下载预构建的 jar 包,并通过 Burp 的 **Extensions > Add** 加载它。
加载扩展后:
1. 打开 **Vigolium → Settings**。
2. 在 Server Connection 行中输入 Vigolium 的 **Server URL** 和 **API Key**。
3. 选择 **Test Connection** 并确认服务器可达。
4. 使用 Burp 上下文菜单操作或配置的快捷键之一来发送流量。
已安装的扩展版本显示在 Settings 视图的右上角。正式发布版本从 JAR 清单中读取此值;在本地 IDE 中运行则显示为 `development`。
## 构建 (从源码)
```
./gradlew spotlessCheck test shadowJar
```
输出 jar 包将通过 Shadow plugin 构建在 `build/libs/burp-vigolium.jar` 路径下。
## 配置说明
首先,启动 Vigolium 服务器,以便扩展有 API 可以连接:
```
vigolium server -A
```
然后获取需要在扩展中输入的 API key:
```
vigolium config ls server.auth_api_key --force
```
### 服务器连接和扫描选项
默认的服务器 URL 为 `http://127.0.0.1:9002`。服务器 URL 和 API Key 存储在 Burp 的扩展首选项中,用于发起经过认证的 API 请求。**Test Connection** 按钮会调用服务器健康状态接口,并且不会阻塞 Burp UI。
在 **Scan Options** 下,可选择提供以逗号分隔的模块列表和超时时间(例如 `30s` 或 `2m`)。将其中任何一个值留空则会使用服务器默认值。**Scan All HTTP Records** 会使用这些选项提交所有已存储的 HTTP 记录。
### 记录视图
Findings Records 和 HTTP Records 表格支持点击每一数据列表头进行排序。点击一次按升序排列,再次点击按降序排列,第三次点击则恢复默认排序。`#` 列仅作为行位置指示器,而不是可排序的数据字段。
选择一个 finding 后,会在 Burp 的消息编辑器中打开其主要的请求和响应。额外的证据会显示为相邻的标签页,因此无需使用下拉菜单即可比较证据。**Show Description** 会展开 finding 摘要,而橙色的 **Copy Finding as Markdown** 操作会复制元数据、描述、匹配的 URL、请求、响应以及额外的证据。
### 键盘快捷键
操作的快捷键可以在 **Settings → Keyboard Shortcuts** 下进行修改。默认快捷键如下:
| 操作 | 默认快捷键 |
|--------|------------------|
| 发送至摄取 | `Ctrl+Alt+V` |
| 发送至原生扫描 | `Ctrl+Alt+N` |
| 发送至 Agentic 扫描 | `Ctrl+Alt+A` |
| 对 Target Site map 进行快照 | `Ctrl+Alt+S` |
| 刷新活动的记录视图 | `Ctrl+Alt+R` |
刷新快捷键是上下文相关的:当焦点位于 Findings Records、HTTP Records、Native Scans 或 Agentic Scans 内部时,它会激活相应视图的“刷新”按钮。
### Target Site Map 快照
打开 **Vigolium → Bridge → Target Site Map Snapshot** 可立即运行快照或启用定期快照。定期快照默认处于禁用状态;启用后,默认时间间隔为五分钟。如果希望快照排除范围外 (out-of-scope) 的流量,请使用 **In-scope only**。默认快捷键为 `Ctrl+Alt+S`,可以在 **Settings → Keyboard Shortcuts** 下进行修改。
在当前的 Burp 会话期间,快照是增量进行的,且在服务器上是幂等的。请求和可用的响应会以有界的数据块上传;未更改的记录不会被重复上传。
### 实时桥接
实时桥接默认处于禁用状态。要启用它,请打开 **Vigolium → Bridge**,选择 **Enable live bridge**,并输入监听器 URL(默认为 `http://127.0.0.1:9009`)。扩展程序会在该环回地址上启动一个内嵌的 HTTP 服务器;它会拒绝非环回的绑定地址。选择 **In-scope items only** 可防止桥接搜索返回超出 Burp Target 范围的流量。此过滤器默认处于禁用状态。**Test Connection** 按钮用于检查监听器的健康状态接口。
该监听器不需要凭据。它仅绑定到经过验证的环回地址,拒绝意外的 Host 和 Origin 标头,并且保持可选且默认禁用。
在 Vigolium 的常规流量视图中,将该监听器作为额外数据源使用:
```
export VIGOLIUM_BURP_BRIDGE_URL="http://127.0.0.1:9009"
# CLI:将本地数据库与实时 Burp Proxy 历史记录合并
vigolium traffic
# Server:将实时 Burp 行合并到 GET /api/http-records
vigolium server
# 将所有 bridge 可见的 Proxy 历史记录持久化到 Vigolium 的数据库中
vigolium import
# 持久化所选流量页面(添加 --all 包含所有匹配记录)
vigolium traffic --save-to-vigolium-db
# 将所选 Vigolium 数据库流量复制到 Burp 的 Target Site map 中
vigolium traffic --save-to-burp
# 将修改后的重放请求及其新响应保存到 Burp 的 Target Site map 中
vigolium replay --record-uuid --save-to-burp
```
实时数据行会被标记为 `source: burp`。原有的流量过滤器、排序、
分页、JSON 输出和记录详情工作流依然适用。
另外,也可以使用 `VIGOLIUM_BURP_BRIDGE_URL` 来设置监听器 URL。
Bridge 导入是幂等的:新观察到的请求会被插入,已更改的
响应会刷新现有的数据库行,而未更改的流量将被跳过。
搜索和检查操作保持只读。内部的 Site map 写入路由接受
与 Vigolium 的 `/api/ingest-http` 相同的 `burp_base64` 请求/响应字段,
并调用 Montoya 的 `SiteMap.add`;用户无需直接调用它。
禁用该设置或卸载扩展会停止监听器,并使其临时结果引用失效。
#### 使用 `curl` 将流量导入 Burp
启用实时桥接后,以下请求会通过环回监听器将一次 HTTP 交互导入到 Burp 的 **Target → Site map** 中:
```
curl --silent --show-error \
--request POST 'http://127.0.0.1:9009/api/burp-bridge/sitemap' \
--header 'Content-Type: application/json' \
--data '{
"input_mode": "burp_base64",
"url": "https://example.com/imported",
"source": "curl",
"http_request_base64": "R0VUIC9pbXBvcnRlZCBIVFRQLzEuMQ0KSG9zdDogZXhhbXBsZS5jb20NCkFjY2VwdDogKi8qDQoNCg==",
"http_response_base64": "SFRUUC8xLjEgMjAwIE9LDQpDb250ZW50LUxlbmd0aDogMg0KDQpPSw=="
}'
```
请求体包含一个经过 Base64 编码的 `GET /imported` 请求和一个简短的 `200 OK` 响应。`http_request_base64` 是必填项;当只有请求可用时,`http_response_base64` 是可选的。成功的响应会包含 `"added":1`。此监听器不使用 Vigolium API key 或任何单独的 bridge 凭据。
## 扩展使用的 API 端点
| 方法 | 端点 | 描述 |
|--------|----------|-------------|
| `GET` | `/health` | 测试与 Vigolium 服务器的连接 |
| `POST` | `/api/ingest-http` | 存储选定或自动转发的 Burp 流量 |
| `POST` | `/api/scan-request` | 为选定的流量启动原生扫描 |
| `POST` | `/api/agent/run/swarm` | 为选定的流量启动 Agentic 扫描 |
| `POST` | `/api/scan-all-records` | 使用配置的选项扫描所有已存储的 HTTP 记录 |
| `POST` | `/api/burp/sitemap/snapshot` | 上传幂等的 Target Site map 快照数据块 |
| `GET` | `/api/findings` | 列出和过滤 findings |
| `GET` | `/api/http-records` | 列出和过滤已存储的 HTTP 记录 |
| `GET` | `/api/scans` | 列出原生扫描运行记录并获取其日志 |
| `GET` | `/api/agent/sessions` | 列出 Agentic 扫描会话并获取其日志 |
所有 Vigolium API 请求均使用 `Authorization: Bearer {API_KEY}`。
环回桥接监听器独立于 Vigolium API:
| 方法 | Bridge 端点 | 用途 |
|--------|-----------------|---------|
| `GET` | `/health` | 报告监听器的健康状态、功能和范围内 (in-scope) 模式 |
| `POST` | `/api/burp-bridge/search` | 搜索 Burp Proxy 历史记录或 Target Site map |
| `POST` | `/api/burp-bridge/inspect` | 检索用于临时搜索引用的请求/响应数据 |
| `POST` | `/api/burp-bridge/sitemap` | 将 Base64 编码的请求/响应项添加到 Burp 的 Target Site map 中 |
其双向传输无需身份验证,且仅限于本地计算机使用。监听器会拒绝意外的 Host 和 Origin 标头。搜索结果使用临时引用,当监听器重启或扩展卸载时,这些引用将会失效。
## 许可证
Vigolium 由 [@j3ssie](https://twitter.com/j3ssie) 用 ♥ 制作,[@theblackturtle](https://github.com/theblackturtle) 为核心贡献者。
标签:API集成, Burp Suite 插件, CISA项目, JS文件枚举, Web安全, 可观测性, 后台面板检测, 域名枚举, 安全扫描, 时序注入, 流量转发, 蓝队分析