Global Match & Replace (GMR) (Burp Suite Extension)
Global Match & Replace (GMR) étend Burp Suite avec des règles de correspondance/remplacement à appliquer globalement ou sur plusieurs outils de votre choix (Repeater, Intruder, Proxy, etc.). Il fournit des diffs par requête et par réponse afin que vous puissiez voir exactement ce qui a changé.
Cette extension utilise l'API Burp Montoya.
Fonctionnalités
Remplacement/correspondance global dans les outils Burp (pas seulement Proxy)
Moteur basé sur des règles avec ciblage par règle (requête/réponse + sélection d'outils)
Deux types de règles : Simple (avec caractères génériques) et RegEx
Prise en charge du multiligne par règle pour la correspondance sur plusieurs sauts de ligne
Panneau de test des règles avec correspondances et remplacements en surbrillance
Vue GMR Diff dans les éditeurs de requêtes/réponses montrant le contenu original et modifié
Persistance de session pour les règles et les diffs GMR (avec taille de cache configurable)
Installation
À partir d'une release GitHub
Téléchargez le dernier burp-global-match-replace-*.jar depuis la page Releases.
Dans Burp Suite : Extensions → Installed → Add
Sélectionnez Java comme type d'extension et choisissez le JAR.
Compiler à partir des sources
root@kitploit:~
./gradlew clean jar
Le JAR sera dans build/libs/.
Remarque : ce projet cible le bytecode Java 21 pour la compatibilité avec Burp. Utilisez Java 21+ pour exécuter la compilation (définissez JAVA_HOME en conséquence).
Aperçu des règles
Chaque règle possède les propriétés suivantes :
Enabled : indique si la règle est active.
Target : indique si la règle s'applique aux requêtes ou aux réponses.
Match Type :
Simple : correspondance de texte littéral avec prise en charge des caractères génériques.
RegEx : prise en charge complète des expressions régulières.
Multiline :
Désactivé : . ne correspond pas aux sauts de ligne.
Activé : . correspond aux sauts de ligne (DOTALL).
^ et $ fonctionnent toujours par ligne (MULTILINE activé).
Tools : outils Burp auxquels la règle s'applique.
Match / Replace : le motif de correspondance et le texte de remplacement.
Comment : note libre sur la règle.
Remarque : si aucun outil n'est sélectionné, la règle ne s'exécutera pas.
Les règles Simple correspondent à un texte littéral avec des caractères génériques facultatifs :
* → un nombre quelconque de caractères
? → exactement un caractère
Par défaut (multiline est désactivé), les caractères génériques ne traversent pas les sauts de ligne. Si multiline est activé, * et ? peuvent s'étendre sur plusieurs lignes.
Pour correspondre à un * ou ? littéral, échappez-le avec une barre oblique inverse :
Les règles RegEx sont des expressions régulières Java standard. Le moteur utilise toujours MULTILINE, et n'utilise DOTALL que si Multiline est activé. Cela signifie :
^ et $ correspondent aux limites de ligne par défaut
. ne correspond pas aux sauts de ligne sauf si multiline est activé
Exemple (mono-ligne) :
Supprimer un en-tête.
root@kitploit:~
Match: ^X-Test:.*$\r?\n
Replace:
Remarque : le $\r?\n à la fin supprime la ligne de l'en-tête ainsi que son saut de ligne. Utiliser uniquement $ laisserait le saut de ligne en place.
Exemple (multiligne) :
Supprimer les commentaires HTML.
root@kitploit:~
Match: <!--.*?-->
Replace:
Multiline: ON
Panneau des règles (onglet Suite)
L'onglet Suite fournit une gestion complète des règles et des tests :
Liste des règles
Colonnes :
Enabled : activer/désactiver la règle
Target : Request / Response
Match Type : Simple / RegEx
Multiline : « Activé » lorsque la fonction est activée
Tools : liste des outils sélectionnés
Match / Replace / Comment
Boutons
Add : créer une nouvelle règle
Edit : modifier la règle sélectionnée
Duplicate : cloner la règle sélectionnée (créée désactivée pour pouvoir l'ajuster en toute sécurité)
Remove : supprimer la règle sélectionnée
Panneau de test des règles
Collez un exemple de requête/réponse dans Sample Input
Sélectionnez une règle
Cliquez sur Test Selected Rule
La sortie du test met en surbrillance :
Le texte correspondant dans l'entrée
Le texte de remplacement dans la sortie
Les groupes de capture RegEx (couleurs différentes)
Vue GMR Diff
Lorsqu'une règle modifie une requête ou une réponse, un onglet « GMR Diff » apparaît dans l'éditeur de requête/réponse (dans des outils comme Proxy, Repeater, Intruder, etc.).
Les requêtes/réponses modifiées seront surlignées en jaune et la note sera définie sur « Global Match & Replace ».
Ce qu'elle affiche
Un récapitulatif de toutes les règles appliquées
Panneaux Original vs Modifié
Différences surlignées
Boutons Suivant/Précédent pour naviguer entre les modifications
Quand l'onglet apparaît
L'onglet GMR Diff n'est affiché que si une règle a réellement modifié le message. Si aucune modification n'a été appliquée, l'onglet n'apparaîtra pas. Cela peut parfois prêter à confusion si, par exemple, il existe un GMR Diff sur la seule requête ou la seule réponse.
Surlignage
Les deux panneaux affichent les surlignages de diff pour les régions modifiées
Les boutons de navigation (< et >) parcourent les modifications
Le compteur indique le nombre de modifications détectées et la position actuelle
Persistance et paramètres
Ce qui est conservé dans la session
Règles (y compris le réglage multiligne, les commentaires, etc.)
Diffs GMR (contenu original/modifié + résumés des règles appliquées)
Panneau des paramètres
La page des paramètres de l'extension comprend :
Un plafond de cache des diffs GMR (Mo)
Contrôle la quantité d'historique de diff stockée dans la session
Le cache stocke le contenu original/modifié ainsi que les résumés des règles appliquées
Utilise une politique d'éviction LRU : les diffs les plus anciens sont supprimés en premier lorsque le plafond est dépassé
Des valeurs plus élevées conservent les diffs pour davantage de requêtes historiques
Remarques / Détails de comportement
Les règles Simple n'interprètent pas $1 ni les références arrière dans les remplacements.
Les règles RegEx prennent en charge $1, $2, etc. dans les remplacements.
L'interrupteur Multiline n'affecte que la façon dont les motifs correspondent, pas le comportement des remplacements.
L'historique des diffs GMR est mis en cache et conservé dans la session (soumis au plafond de taille).