0x4meliorate/SQLBurp
GitHub: 0x4meliorate/SQLBurp
将 sqlmap REST API 集成到 Burp Suite 中的 Java 扩展,支持从 Burp 任意位置发起并发 SQL 注入扫描并将结果持久化至项目文件。
Stars: 3 | Forks: 0
# 🗡️ SQLBurp



一个 Burp Suite 扩展,将 sqlmap REST API 集成到您的测试工作流中。您可以从 Burp 的任何位置发送请求,并发跟踪多个扫描,并查看持久化的结果。所有扫描数据都直接存储在 Burp 项目文件中,无需外部数据库。
## 🚀 设置
**1. 下载 jar 包**
从 [Releases](../../releases) 页面下载最新的 `SQLBurp.jar`。
**2. 启动 sqlmap REST API**
```
python sqlmapapi.py -s -H 127.0.0.1 -p 8775
```
不需要 `--database` 参数。
**3. 加载扩展**
`Extensions` -> `Add` -> `Extension Type: Java` -> 选择 `SQLBurp.jar`。
**SQLBurp** 选项卡将会出现。使用 **Ping** 按钮验证 API 是否可达。
## 📖 用法
### 发送请求
在 Proxy、Repeater、Target 或 Burp 中的任何其他位置右键单击任何请求,然后选择 **Send to SQLMap API**。扫描将使用当前 Options 选项卡的设置立即提交。
### ⚡ Options 选项卡
Options 选项卡分为四个部分。
#### 核心选项
| 设置 | 描述 |
| --- | --- |
| API URL | 运行中的 sqlmapapi 服务器的地址 |
| Level | 检测级别 (1-5) |
| Risk | 风险级别 (1-3) |
| Threads | 并发 HTTP 请求数 (1-10) |
| Technique | 要测试的 SQLi 技术 (例如 `BEUSTQ`) |
| DBMS | 强制指定特定后端,或保留为 `(auto)` |
| Tamper | 逗号分隔的 tamper 脚本 (例如 `space2comment,randomcase`) |
| Poll (s) | 轮询状态更新的频率 |
#### 额外的 sqlmap 参数
一个自由格式的文本字段,用于传递 UI 中未公开的额外 sqlmap 参数标志。这些标志会被解析并映射到正确的 sqlmapapi JSON 键,因此它们实际上会被应用于扫描。
支持的标志包括:
| 标志 | 描述 |
| --- | --- |
| `--delay=N` | 每个 HTTP 请求之间等待的秒数 |
| `--timeout=N` | 请求超时前的秒数 |
| `--retries=N` | 连接超时时的重试次数 |
| `--time-sec=N` | 基于时间的盲注延迟的秒数 |
| `--proxy=URL` | 通过代理路由请求 |
| `--proxy-cred=user:pass` | 代理身份验证凭据 |
| `--user-agent=UA` | 自定义 User-Agent 标头 |
| `--referer=URL` | 自定义 Referer 标头 |
| `--cookie=COOKIE` | 自定义 cookie 字符串 |
| `--headers=HEADERS` | 额外的 HTTP 标头 |
| `--auth-type=TYPE` | HTTP 身份验证类型 (Basic, Digest, NTLM) |
| `--auth-cred=user:pass` | HTTP 身份验证凭据 |
| `--tor` | 通过 Tor 路由 |
| `--tor-type=TYPE` | Tor 代理类型 |
| `--tor-port=N` | Tor 代理端口 |
| `--ignore-proxy` | 忽略系统代理设置 |
| `--ignore-redirects` | 忽略重定向 |
| `--ignore-timeouts` | 忽略连接超时 |
| `--force-ssl` | 强制使用 HTTPS |
| `--flush-session` | 清除会话数据并重新测试 |
| `--fresh-queries` | 忽略缓存的查询结果 |
| `--mobile` | 模拟移动端 User-Agent |
| `--prefix=STR` | 注入 payload 前缀 |
| `--suffix=STR` | 注入 payload 后缀 |
| `--safe-url=URL` | 测试期间定期访问的 URL |
| `--text-only` | 仅基于文本内容比较页面 |
**示例:** `--delay=2 --timeout=30 --proxy=http://127.0.0.1:8080`
未知标志将被静默忽略。
#### 标志
| 标志 | 描述 |
| --- | --- |
| Batch | 非交互模式 (sqlmap 对任何提示使用其自带的默认值) |
| Random Agent | 随机化 User-Agent 标头 |
| Forms | 发现并测试目标页面上的表单 |
| Enum DBs | 在确认注入后枚举数据库 |
| Current User | 获取当前数据库用户 |
| Banner | 获取 DBMS banner |
| Is DBA | 检查当前用户是否具有 DBA 权限 |
#### 提示响应
仅在取消选中 **Batch** 时可见。允许您预先配置 sqlmap 对已知交互式提示的响应。每个提示都可以设置为 **Yes**、**No** 或 **Default** (sqlmap 自身对该提示的内置默认值)。
| 提示 | 描述 |
| --- | --- |
| Crack found hashes | 尝试破解发现的任何密码哈希 |
| Dictionary-based hash attack | 使用字典进行哈希破解 |
| Store hashes to CSV file | 将发现的哈希保存到文件中 |
| Use common password suffixes | 在哈希破解期间附加常见后缀 |
| Quit after finding first injection | 一旦找到一个可注入参数即停止测试 |
| Merge scan results | 合并多次运行的结果 |
| Flush session and re-test | 清除缓存的会话数据并重新开始测试 |
| Retrieve full schema | 枚举完整的数据库 schema |
| Adjust level/risk for WAF detection | 如果检测到 WAF,自动提高 level/risk |
| Skip testing other parameters | 在确认第一个易受攻击的参数后停止 |
设置会在提交时生成快照,因此每次扫描行都会记住其运行时的确切选项。提交后更改面板不会影响正在运行的扫描。
### 📊 Scans 选项卡
Scans 选项卡包含扫描表格和日志输出。每个提交的请求显示为一行。列可排序。单击任意行可在下方的详细信息面板中查看其实时日志和选项快照。
| 状态 | 含义 |
| --- | --- |
| Queued | 已提交,尚未开始 |
| Running | 正在扫描 |
| Finished | 已完成,未发现注入 |
| Vulnerable | 已确认存在注入 |
| Stopped | 已手动停止 |
| Error | 扫描失败 |
### 🖱️ 右键菜单
| 操作 | 描述 |
| --- | --- |
| Stop Task | 向 sqlmapapi 发送停止信号并将扫描标记为 Stopped |
| Delete Task | 停止扫描,从 API 中删除它,并移除所有持久化的数据 |
### 🧰 工具栏
| 按钮 | 描述 |
| --- | --- |
| Stop All | 停止所有当前正在运行的扫描 |
| Remove Finished | 移除所有 Finished、Stopped 和 Error 行并清除其数据 |
## 💾 持久化
所有扫描数据通过 Montoya API 的 `persistence().extensionData()` 存储在 Burp 项目文件中。这原生具有项目范围作用域,因此打开不同的 Burp 项目只会显示该项目的扫描,项目之间不会发生交叉污染。
- **无需外部数据库** - 可以自由重启 sqlmapapi 而不会丢失任何扫描历史记录。
- **增量保存** - 扫描记录在启动时写入,并在每一行日志输出时更新,因此即使在扫描中途关闭 Burp,数据也会被保留。
- **自动恢复** - 当扩展初始化时,当前项目的所有扫描将重新加载回表格中。
通过右键菜单或 Remove Finished 删除扫描会将其从 API 和项目中永久清除。
## 📝 备注
- 该扩展会对请求进行去重,因此在单次操作中多次发送相同的请求只会创建一次扫描。
- HTTPS 目标会根据 HTTP 服务自动检测;并会相应地设置 `forceSSL`。
- 对于在上次关闭扩展时仍在运行的扫描,扩展会在加载时尝试重新连接到活跃的 API。如果在此期间 API 已被重启,这些扫描将显示其最后已知的状态。
- sqlmap 的 DEBUG 级别日志条目已从日志视图中过滤掉,以保持输出的可读性。
## 🔨 从源码构建
### 要求
- [Java JDK](https://www.oracle.com/java/technologies/downloads/) (JDK 17 或更高版本)
- 已安装并配置好 [sqlmap](https://github.com/sqlmapproject/sqlmap)
- Gradle (在 Windows 上可通过 [Scoop](https://scoop.sh) 安装)
### 构建
```
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex
scoop install gradle
```
然后在项目文件夹中执行:
```
gradle wrapper
.\gradlew.bat jar
```
输出的 jar 包位于 `build\libs\SQLBurp.jar`。
## 🚀 设置
**1. 下载 jar 包**
从 [Releases](../../releases) 页面下载最新的 `SQLBurp.jar`。
**2. 启动 sqlmap REST API**
```
python sqlmapapi.py -s -H 127.0.0.1 -p 8775
```
不需要 `--database` 参数。
**3. 加载扩展**
`Extensions` -> `Add` -> `Extension Type: Java` -> 选择 `SQLBurp.jar`。
**SQLBurp** 选项卡将会出现。使用 **Ping** 按钮验证 API 是否可达。
## 📖 用法
### 发送请求
在 Proxy、Repeater、Target 或 Burp 中的任何其他位置右键单击任何请求,然后选择 **Send to SQLMap API**。扫描将使用当前 Options 选项卡的设置立即提交。
### ⚡ Options 选项卡
Options 选项卡分为四个部分。
#### 核心选项
| 设置 | 描述 |
| --- | --- |
| API URL | 运行中的 sqlmapapi 服务器的地址 |
| Level | 检测级别 (1-5) |
| Risk | 风险级别 (1-3) |
| Threads | 并发 HTTP 请求数 (1-10) |
| Technique | 要测试的 SQLi 技术 (例如 `BEUSTQ`) |
| DBMS | 强制指定特定后端,或保留为 `(auto)` |
| Tamper | 逗号分隔的 tamper 脚本 (例如 `space2comment,randomcase`) |
| Poll (s) | 轮询状态更新的频率 |
#### 额外的 sqlmap 参数
一个自由格式的文本字段,用于传递 UI 中未公开的额外 sqlmap 参数标志。这些标志会被解析并映射到正确的 sqlmapapi JSON 键,因此它们实际上会被应用于扫描。
支持的标志包括:
| 标志 | 描述 |
| --- | --- |
| `--delay=N` | 每个 HTTP 请求之间等待的秒数 |
| `--timeout=N` | 请求超时前的秒数 |
| `--retries=N` | 连接超时时的重试次数 |
| `--time-sec=N` | 基于时间的盲注延迟的秒数 |
| `--proxy=URL` | 通过代理路由请求 |
| `--proxy-cred=user:pass` | 代理身份验证凭据 |
| `--user-agent=UA` | 自定义 User-Agent 标头 |
| `--referer=URL` | 自定义 Referer 标头 |
| `--cookie=COOKIE` | 自定义 cookie 字符串 |
| `--headers=HEADERS` | 额外的 HTTP 标头 |
| `--auth-type=TYPE` | HTTP 身份验证类型 (Basic, Digest, NTLM) |
| `--auth-cred=user:pass` | HTTP 身份验证凭据 |
| `--tor` | 通过 Tor 路由 |
| `--tor-type=TYPE` | Tor 代理类型 |
| `--tor-port=N` | Tor 代理端口 |
| `--ignore-proxy` | 忽略系统代理设置 |
| `--ignore-redirects` | 忽略重定向 |
| `--ignore-timeouts` | 忽略连接超时 |
| `--force-ssl` | 强制使用 HTTPS |
| `--flush-session` | 清除会话数据并重新测试 |
| `--fresh-queries` | 忽略缓存的查询结果 |
| `--mobile` | 模拟移动端 User-Agent |
| `--prefix=STR` | 注入 payload 前缀 |
| `--suffix=STR` | 注入 payload 后缀 |
| `--safe-url=URL` | 测试期间定期访问的 URL |
| `--text-only` | 仅基于文本内容比较页面 |
**示例:** `--delay=2 --timeout=30 --proxy=http://127.0.0.1:8080`
未知标志将被静默忽略。
#### 标志
| 标志 | 描述 |
| --- | --- |
| Batch | 非交互模式 (sqlmap 对任何提示使用其自带的默认值) |
| Random Agent | 随机化 User-Agent 标头 |
| Forms | 发现并测试目标页面上的表单 |
| Enum DBs | 在确认注入后枚举数据库 |
| Current User | 获取当前数据库用户 |
| Banner | 获取 DBMS banner |
| Is DBA | 检查当前用户是否具有 DBA 权限 |
#### 提示响应
仅在取消选中 **Batch** 时可见。允许您预先配置 sqlmap 对已知交互式提示的响应。每个提示都可以设置为 **Yes**、**No** 或 **Default** (sqlmap 自身对该提示的内置默认值)。
| 提示 | 描述 |
| --- | --- |
| Crack found hashes | 尝试破解发现的任何密码哈希 |
| Dictionary-based hash attack | 使用字典进行哈希破解 |
| Store hashes to CSV file | 将发现的哈希保存到文件中 |
| Use common password suffixes | 在哈希破解期间附加常见后缀 |
| Quit after finding first injection | 一旦找到一个可注入参数即停止测试 |
| Merge scan results | 合并多次运行的结果 |
| Flush session and re-test | 清除缓存的会话数据并重新开始测试 |
| Retrieve full schema | 枚举完整的数据库 schema |
| Adjust level/risk for WAF detection | 如果检测到 WAF,自动提高 level/risk |
| Skip testing other parameters | 在确认第一个易受攻击的参数后停止 |
设置会在提交时生成快照,因此每次扫描行都会记住其运行时的确切选项。提交后更改面板不会影响正在运行的扫描。
### 📊 Scans 选项卡
Scans 选项卡包含扫描表格和日志输出。每个提交的请求显示为一行。列可排序。单击任意行可在下方的详细信息面板中查看其实时日志和选项快照。
| 状态 | 含义 |
| --- | --- |
| Queued | 已提交,尚未开始 |
| Running | 正在扫描 |
| Finished | 已完成,未发现注入 |
| Vulnerable | 已确认存在注入 |
| Stopped | 已手动停止 |
| Error | 扫描失败 |
### 🖱️ 右键菜单
| 操作 | 描述 |
| --- | --- |
| Stop Task | 向 sqlmapapi 发送停止信号并将扫描标记为 Stopped |
| Delete Task | 停止扫描,从 API 中删除它,并移除所有持久化的数据 |
### 🧰 工具栏
| 按钮 | 描述 |
| --- | --- |
| Stop All | 停止所有当前正在运行的扫描 |
| Remove Finished | 移除所有 Finished、Stopped 和 Error 行并清除其数据 |
## 💾 持久化
所有扫描数据通过 Montoya API 的 `persistence().extensionData()` 存储在 Burp 项目文件中。这原生具有项目范围作用域,因此打开不同的 Burp 项目只会显示该项目的扫描,项目之间不会发生交叉污染。
- **无需外部数据库** - 可以自由重启 sqlmapapi 而不会丢失任何扫描历史记录。
- **增量保存** - 扫描记录在启动时写入,并在每一行日志输出时更新,因此即使在扫描中途关闭 Burp,数据也会被保留。
- **自动恢复** - 当扩展初始化时,当前项目的所有扫描将重新加载回表格中。
通过右键菜单或 Remove Finished 删除扫描会将其从 API 和项目中永久清除。
## 📝 备注
- 该扩展会对请求进行去重,因此在单次操作中多次发送相同的请求只会创建一次扫描。
- HTTPS 目标会根据 HTTP 服务自动检测;并会相应地设置 `forceSSL`。
- 对于在上次关闭扩展时仍在运行的扫描,扩展会在加载时尝试重新连接到活跃的 API。如果在此期间 API 已被重启,这些扫描将显示其最后已知的状态。
- sqlmap 的 DEBUG 级别日志条目已从日志视图中过滤掉,以保持输出的可读性。
## 🔨 从源码构建
### 要求
- [Java JDK](https://www.oracle.com/java/technologies/downloads/) (JDK 17 或更高版本)
- 已安装并配置好 [sqlmap](https://github.com/sqlmapproject/sqlmap)
- Gradle (在 Windows 上可通过 [Scoop](https://scoop.sh) 安装)
### 构建
```
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex
scoop install gradle
```
然后在项目文件夹中执行:
```
gradle wrapper
.\gradlew.bat jar
```
输出的 jar 包位于 `build\libs\SQLBurp.jar`。标签:Burp Suite, CISA项目, DOE合作, REST API, SQLi检测, SQLMap, Web安全, 后台面板检测, 域名枚举, 安全测试, 并发扫描, 插件, 攻击性安全, 数据展示, 日志流, 红队, 网络安全, 蓝队分析, 隐私保护, 项目持久化