BlackWire es un proxy interceptor HTTP/HTTPS de código abierto diseñado para pruebas de seguridad, análisis de tráfico web y debugging de aplicaciones. Ofrece una alternativa ligera, portable y extensible a herramientas como Burp Suite o OWASP ZAP, con un frontend web moderno y un potente backend basado en mitmproxy.
- Para Pentesters: Interceptor completo, HTTPQL, Collections, Sensitive Discovery
- Portable: Sin instalación compleja - solo
make instally listo - Extensible: Sistema de plugins en Python con UI auto-generada
- Moderno: Frontend React, 15 temas, Import/Export compatible con Burp Suite
# 1. Clonar e instalar (crea venv, instala deps y genera el certificado mitmproxy)
git clone https://github.com/Glitchboi-sudo/Blackwire.git
cd Blackwire
make install
# 2. Lanzar aplicación (compila el frontend, arranca el backend y abre el navegador)
make runEso es todo. Abre en http://localhost:5000
Todos los comandos de desarrollo viven en el
Makefile. Ejecutamake helppara verlos (make serveen primer plano,make start/make stopen segundo plano,make compile,make restart,make clean).
Aplicación standalone con aislamiento Docker completo. El empaquetado vive en
Releases
Características:
- Ventana nativa con Tauri (Rust + WebView)
- Backend aislado en Docker (seguridad)
- System tray integration
- Instaladores para Linux, macOS y Windows
El sistema de extensiones hace que crear plugins sea increíblemente simple. Solo necesitas un archivo Python:
# backend/extensions/custom_header.py
"""Custom Header Injector - Inyecta headers personalizados"""
EXTENSION_META = {
"name": "custom_header",
"title": "Custom Header",
"description": "Inyecta un header personalizado en todas las requests",
# UI auto-generada desde schema
"ui_schema": {
"type": "schema-driven",
"fields": [
{
"name": "header_name",
"label": "Header Name",
"type": "text",
"default": "X-Custom-Header",
"help": "Nombre del header a inyectar"
},
{
"name": "header_value",
"label": "Header Value",
"type": "text",
"placeholder": "valor..."
}
]
},
"default_config": {
"enabled": False,
"header_name": "X-Custom-Header",
"header_value": ""
}
}
from mitmproxy import http
class CustomHeaderExtension:
name = "custom_header"
def on_request(self, flow: http.HTTPFlow, cfg: dict, full_config: dict):
if cfg.get("enabled") and cfg.get("header_value"):
flow.request.headers[cfg["header_name"]] = cfg["header_value"]
def register():
return CustomHeaderExtension()¡Y listo! Reinicia el servidor (make restart) y tu extensión aparece automáticamente en la pestaña Extensions con su formulario configurado.
3 tipos de extensiones:
- Schema-Driven → Formularios simples auto-generados (ejemplos: rate_limiter.py)
- Dynamic JSX → UIs complejas sin recompilar frontend (ejemplos: webhook_site.ui.jsx, headers_injector.ui.jsx)
- Custom React → Componentes hardcoded para casos especiales (legacy)
Documentación completa: Sistema de Extensiones Wiki
- Proxy Interceptor - Captura y modifica HTTP/HTTPS en tiempo real
- Repeater - Reenvía y modifica requests con historial de navegación
- HTTPQL - Filtrado avanzado con lenguaje de consulta tipo SQL
- Scope & Filters - Reglas include/exclude con regex
- Site Map - Vista en árbol de hosts y endpoints
- Compare - Diff visual lado a lado con algoritmo LCS
- Sensitive Discovery - Escaneo de secrets con 50+ patrones + Shannon Entropy
- JWT Analyzer - Decodifica JWTs con doc de ataques comunes
- Cipher - 100+ operaciones encadenables (Base64, hashing, crypto, etc.)
- Collections - Workflows automatizados con variables JSONPath
- Session Rules - Extracción de tokens con regex
- WebSocket Viewer - Captura y reenvío de frames WS
- Sistema de Plugins - Crea extensiones en Python sin tocar el frontend
- UI Schema-Driven - Formularios auto-generados desde metadata
- Dynamic JSX - UIs complejas con archivos
.ui.jsxsin recompilar - Auto-Discovery - Las extensiones se descubren y configuran automáticamente
- Burp Suite - Import/Export compatible con formato XML
- Git Integration - Control de versiones integrado
- 15 Temas - Midnight, Gruvbox, Solarized, Noir, Synth, etc.
- 100% Portable - Sin rutas hardcoded, funciona desde cualquier directorio
Este proyecto es espacio abierto para aprender y construir juntos. Contribuciones bienvenidas:
- Bugs: Reporta issues con pasos para reproducir
- Features: Propón nuevas funcionalidades
- Extensions: Crea plugins para automatización/testing
- Temas: Agrega esquemas de color
- Docs: Mejora documentación y ejemplos
Proceso:
- Fork el repositorio
- Crea branch:
git checkout -b feature/mi-feature - Commit cambios:
git commit -m "feat: descripción" - Push:
git push origin feature/mi-feature - Abre Pull Request
Puerto en uso:
make stop
# o
lsof -i :5000 && kill <PID>Certificado SSL no funciona:
rm -rf ~/.mitmproxy
make certFrontend no carga:
make compileProyecto inspirado en Burp Suite, OWASP ZAP, mitmproxy y Caido.
Creado por Erik Alcantara. Gracias por el apoyo de Lychi3
Tecnologías:
- mitmproxy — Motor de proxy
- FastAPI — Backend API
- React — Frontend
- Sucrase — Transpilación JSX
- SQLite — Base de datos
Made with ❤️ in México
