Una extensión de Burp Suite que expone la API completa de Montoya como una API REST local, con Swagger UI
reburp convierte Burp Suite en algo que puedes programar. Se carga como una extensión de Java y sirve
la API de Montoya
a través de una API REST HTTP en http://127.0.0.1:9090, con una especificación OpenAPI y Swagger UI. Cualquier cosa
en la que harías clic en Burp - leer el historial del proxy, enviar una petición, editar el scope, ejecutar un
escaneo, decodificar un token - se convierte en una llamada JSON que un agente o una línea de curl pueden hacer.
Se combina con la skill de agente burp-interaction para que un asistente
de IA pueda controlar Burp directamente.
Funciones de Burp que tu agente ahora puede controlar vía REST:
Obtén el último reburp-*.jar desde Releases, o
compílalo desde el código fuente (requiere Java 17+).
Cada release de reburp se compila contra una versión mínima de Burp Suite (Montoya). En una versión de Burp más antigua, obtén el jar correspondiente desde Releases.
git clone https://github.com/forefy/reburp.git
cd reburp
./gradlew shadowJar
# Output: build/libs/reburp.jar (plus a versioned copy, reburp-<version>.jar)
Carga reburp.jar en lugar de la copia versionada. Burp recarga una extensión desde la ruta
desde la que se cargó, y el nombre versionado cambia en cada release, por lo que el no versionado
sigue recargándose tras una actualización en lugar de dejarte silenciosamente en la compilación anterior.
Si tu JAVA_HOME no está configurado, apúntalo a tu JDK:
JAVA_HOME=/path/to/jdk17 ./gradlew shadowJar
build/libs/reburp.jar (o el reburp-*.jar que descargaste desde Releases)Aparece una pestaña reburp en Burp que muestra cada llamada REST a medida que ocurre.
Cada fila es una llamada REST. Al seleccionarla se muestra la petición y la respuesta de la API, además de la petición y la respuesta que reburp envió al objetivo en tu nombre.
Una vez cargado, abre en tu navegador:
La especificación es la fuente de verdad para las formas de petición y respuesta.
| Grupo | Prefijo | Destacados |
|---|---|---|
| Status | /api/status | Información de la extensión, versión de Burp |
| Proxy | /api/proxy/ | Historial, búsqueda, anotación, alternar intercept, historial de WebSocket |
| Site Map | /api/sitemap/ | Listar, buscar |
| Scope | /api/scope/ | Comprobar URL en scope, añadir/eliminar reglas de scope |
| HTTP | /api/http/ | Enviar HTTP/1.1 y HTTP/2, inyección de token de autenticación, parsear, diff, params, reflexión, puntos de inserción, cookies |
| Messages | /api/http/message/ | Inspeccionar y reescribir peticiones y respuestas: cabeceras, parámetros, marcadores, tipos MIME, timing |
| Scanner | /api/scanner/ | Issues, iniciar auditoría/crawl, estado de la tarea (solo Pro) |
| Collaborator | /api/collaborator/ | Generar payloads, consultar interacciones (solo Pro) |
| Repeater / Intruder | /api/repeater/, /api/intruder/ | Enviar peticiones a Repeater e Intruder |
| Request Engine | /api/http/engine/ | Motor de peticiones asíncrono de alto rendimiento: pools de recursos, límite de concurrencia, throttle, reintentos, estadísticas en vivo, pausar/reanudar/cancelar, resultados (Burp 2026.x) |
| Config | /api/config/ | Obtener/establecer opciones de proyecto y usuario, estado del motor de tareas |
| Match & Replace | /api/proxy/match-replace/ | Listar, añadir, eliminar reglas de match-and-replace del proxy |
| Sessions | /api/sessions/ | Listar y eliminar reglas de manejo de sesiones (Burp no tiene acción de añadir cabecera) |
| Engagement | /api/engagement/ | Generador de PoC de CSRF, descubrimiento de contenido, encontrar referencias, enviar al decoder |
| Bambda | /api/bambda/ | Importar scripts Bambda, generar cadenas de filtros |
# Is the extension up?
curl -s http://127.0.0.1:9090/api/status
# Last 10 proxy entries
curl -s "http://127.0.0.1:9090/api/proxy/history?limit=10"
# Send a request through Burp
curl -s http://127.0.0.1:9090/api/http/send \
-H 'Content-Type: application/json' \
-d '{"host":"example.com","port":443,"use_https":true,"method":"GET","path":"/"}'
# Add a host to scope
curl -s http://127.0.0.1:9090/api/scope/include \
-H 'Content-Type: application/json' \
-d '{"url":"https://example.com"}'
El servidor REST se enlaza solo a 127.0.0.1, pero el puerto no está autenticado y responde a
cualquier origen. Cualquier cosa que pueda alcanzar localhost:9090 puede controlar Burp, incluida una página web
abierta en tu navegador. Trata el puerto como de confianza solo local y nunca lo expongas más allá del loopback.
Por eso, la ejecución de comandos del SO está deshabilitada por defecto. /api/utils/shell/execute y
/api/utils/shell/execute-raw devuelven 403 a menos que la extensión vea esto en el entorno del propio proceso
de Burp:
REBURP_ENABLE_SHELL=1
Con eso configurado, cualquier origen que pueda alcanzar el puerto obtiene ejecución remota de código en el host. Habilítalo
solo cuando aceptes eso. Cada invocación se escribe en la pestaña de salida de la extensión.
GET /api/utils/shell/status informa si está activado y nunca requiere que lo esté.
La afirmación de "API completa de Montoya" se verifica mecánicamente mediante tools/api_coverage.py,
que el workflow de compilación de CI ejecuta en cada push y falla si algún método mapeable
queda sin exponer. El comportamiento se ejercita por separado mediante tools/smoke_test.py contra una extensión cargada.
9090. Cambia port en BurpRestApiExtension.kt y recompila si es necesario.compileOnly - no se incluye; Burp la proporciona en tiempo de ejecución.{ "error": "..." }.OpenApiSpec.kt más fragmentos en docs/. Para añadir un grupo
de rutas, escribe un fragmento *Paths() y *Schemas() y lístalo en docs/OpenApiSpecExtra.kt.Los issues y pull requests son bienvenidos. Por favor ejecuta python3 tools/api_coverage.py y
./gradlew shadowJar antes de abrir un PR. Los nuevos grupos de rutas deben incluir su fragmento OpenAPI
para que la documentación se mantenga completa.
| Organizer | /api/organizer/ | Listar elementos, enviar peticiones al Organizer |
| Issues | /api/issues/ | Crear issues de auditoría personalizados |
| Events | /api/events/ | Activar y desactivar observadores pasivos de tráfico, luego leer los eventos capturados |
| Extension Data | /api/extension-data/ | Almacenamiento tipado clave/valor guardado en el archivo de proyecto de Burp |
| Preferences | /api/preferences/ | Preferencias de extensión persistidas por tipo |
| Logging | /api/logging/ | Escribir en las pestañas de salida y errores de la extensión y en el registro de eventos de Burp |
| Activity Log | /api/log/ | Consultar el propio registro de llamadas persistido de reburp |
| AI | /api/ai/ | Estado y chat de Burp AI (donde esté disponible) |
| Meta | /api/meta/ | Componentes de la versión de Burp, información de carga de la extensión, vocabularios de enum |
| Utilities | /api/utils/ | Codificar/decodificar URL, base64, hash, decodificar JWT, cadena aleatoria, descomprimir |
| Numbers | /api/utils/number/ | Convertir entre binario, octal, decimal, hex y bases arbitrarias |
| JSON | /api/utils/json/ | Validar, leer y editar por puntero, inspeccionar estructura, normalizar |
| Bytes | /api/utils/bytes/ | Buscar, cortar, añadir, asignar e inspeccionar buffers de bytes |
| Ranking | /api/utils/rank | Clasificar el historial del proxy según cuán anómalo parece cada intercambio |
| Shell | /api/utils/shell/ | Ejecución de comandos del SO. Deshabilitado por defecto, ver Seguridad |