Une extension Burp Suite qui expose l'intégralité de l'API Montoya sous forme d'API REST locale, avec Swagger UI
reburp transforme Burp Suite en un outil scriptable. Il se charge comme une extension Java et expose
l'API Montoya
via une API HTTP REST sur http://127.0.0.1:9090, avec une spécification OpenAPI et une interface Swagger UI. Tout
ce que vous cliqueriez dans Burp - lire l'historique du proxy, envoyer une requête, modifier le scope, lancer un
scan, décoder un token - devient un appel JSON qu'un agent ou une ligne curl peut effectuer.
Il s'associe à la compétence d'agent burp-interaction pour qu'un assistant IA
puisse piloter Burp directement.
Fonctionnalités de Burp que votre agent peut désormais piloter via REST :
Récupérez le dernier reburp-*.jar depuis les Releases, ou
compilez-le depuis les sources (nécessite Java 17+).
Chaque version de reburp est compilée contre une version minimale de Burp Suite (Montoya). Sur un Burp plus ancien, récupérez le jar correspondant depuis les 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)
Chargez reburp.jar plutôt que la copie versionnée. Burp recharge une extension depuis le chemin
à partir duquel elle a été chargée, et le nom versionné change à chaque release, donc la version non versionnée
continue de se recharger après une mise à jour au lieu de vous laisser silencieusement sur la build précédente.
Si votre JAVA_HOME n'est pas défini, pointez-le vers votre JDK :
JAVA_HOME=/path/to/jdk17 ./gradlew shadowJar
build/libs/reburp.jar (ou le reburp-*.jar téléchargé depuis les Releases)Un onglet reburp apparaît dans Burp, affichant chaque appel REST au fur et à mesure.
Chaque ligne correspond à un appel REST. La sélectionner affiche la requête et la réponse de l'API, ainsi que la requête et la réponse que reburp a envoyées à la cible en votre nom.
Une fois chargé, ouvrez dans votre navigateur :
La spécification fait foi pour les formats de requête et de réponse.
| Groupe | Préfixe | Points forts |
|---|---|---|
| Status | /api/status | Informations sur l'extension, version de Burp |
| Proxy | /api/proxy/ | Historique, recherche, annotation, bascule d'interception, historique WebSocket |
| Site Map | /api/sitemap/ | Liste, recherche |
| Scope | /api/scope/ | Vérifier si une URL est dans le scope, ajouter/supprimer des règles de scope |
| HTTP | /api/http/ | Envoyer HTTP/1.1 & HTTP/2, injection de token d'authentification, parse, diff, params, reflection, points d'insertion, cookies |
| Messages | /api/http/message/ | Inspecter et réécrire requêtes et réponses : en-têtes, paramètres, marqueurs, types MIME, timing |
| Scanner | /api/scanner/ | Problèmes, lancer audit/crawl, statut des tâches (Pro uniquement) |
| Collaborator | /api/collaborator/ | Générer des payloads, interroger les interactions (Pro uniquement) |
| Repeater / Intruder | /api/repeater/, /api/intruder/ | Envoyer des requêtes vers Repeater et Intruder |
| Request Engine | /api/http/engine/ | Moteur de requêtes asynchrone à haut débit : pools de ressources, limite de concurrence, throttling, retries, statistiques en direct, pause/reprise/annulation, résultats (Burp 2026.x) |
| Config | /api/config/ | Lire/définir les options de projet & utilisateur, état du moteur de tâches |
| Match & Replace | /api/proxy/match-replace/ | Lister, ajouter, supprimer des règles match-and-replace du proxy |
| Sessions | /api/sessions/ | Lister et supprimer les règles de gestion de session (Burp n'a pas d'action d'ajout d'en-tête) |
| Engagement | /api/engagement/ | Générateur de PoC CSRF, découverte de contenu, recherche de références, envoi au décodeur |
| Bambda | /api/bambda/ |
# 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"}'
Le serveur REST se lie uniquement à 127.0.0.1, mais le port est non authentifié et répond à
n'importe quelle origine. Tout ce qui peut atteindre localhost:9090 peut piloter Burp, y compris une page web
ouverte dans votre navigateur. Considérez ce port comme strictement local de confiance et ne l'exposez jamais au-delà du loopback.
Pour cette raison, l'exécution de commandes OS est désactivée par défaut. /api/utils/shell/execute et
/api/utils/shell/execute-raw renvoient 403 sauf si l'extension voit ceci dans l'environnement de son propre processus Burp :
REBURP_ENABLE_SHELL=1
Une fois défini, toute origine pouvant atteindre le port obtient une exécution de code à distance sur l'hôte. Activez-le
uniquement si vous l'acceptez. Chaque invocation est écrite dans l'onglet de sortie de l'extension.
GET /api/utils/shell/status indique s'il est activé et ne nécessite jamais qu'il le soit.
L'affirmation de « l'API Montoya complète » est vérifiée mécaniquement par tools/api_coverage.py,
que le workflow de build de la CI exécute à chaque push et qui échoue si une méthode mappable
reste non exposée. Le comportement est testé séparément par tools/smoke_test.py contre une extension chargée.
9090. Modifiez port dans BurpRestApiExtension.kt et recompilez si nécessaire.compileOnly - elle n'est pas embarquée ; Burp la fournit à l'exécution.{ "error": "..." }.OpenApiSpec.kt plus des fragments dans docs/. Pour ajouter un groupe de routes,
écrivez un fragment *Paths() et *Schemas() et listez-le dans docs/OpenApiSpecExtra.kt.Les issues et pull requests sont les bienvenues. Veuillez exécuter python3 tools/api_coverage.py et
./gradlew shadowJar avant d'ouvrir une PR. Les nouveaux groupes de routes doivent être livrés avec leur fragment OpenAPI
pour que la documentation reste complète.
| Importer des scripts Bambda, générer des chaînes de filtres |
| Organizer | /api/organizer/ | Lister les éléments, envoyer des requêtes vers l'Organizer |
| Issues | /api/issues/ | Créer des problèmes d'audit personnalisés |
| Events | /api/events/ | Activer et désactiver les observateurs de trafic passif, puis lire les événements capturés |
| Extension Data | /api/extension-data/ | Stockage clé/valeur typé conservé dans le fichier de projet Burp |
| Preferences | /api/preferences/ | Préférences d'extension persistées par type |
| Logging | /api/logging/ | Écrire dans les onglets de sortie et d'erreur de l'extension et dans le journal d'événements de Burp |
| Activity Log | /api/log/ | Interroger le propre journal d'appels persisté de reburp |
| AI | /api/ai/ | Statut et chat de Burp AI (là où disponible) |
| Meta | /api/meta/ | Composants de version de Burp, informations de chargement de l'extension, vocabulaires d'énumérations |
| Utilities | /api/utils/ | Encodage/décodage URL, base64, hash, décodage JWT, chaîne aléatoire, décompression |
| Numbers | /api/utils/number/ | Conversion entre binaire, octal, décimal, hexadécimal et bases arbitraires |
| JSON | /api/utils/json/ | Valider, lire et modifier par pointeur, inspecter la structure, normaliser |
| Bytes | /api/utils/bytes/ | Rechercher, découper, ajouter, allouer et inspecter des buffers d'octets |
| Ranking | /api/utils/rank | Classer l'historique du proxy selon le caractère anormal de chaque échange |
| Shell | /api/utils/shell/ | Exécution de commandes OS. Désactivé par défaut, voir Sécurité |