Correspondência e Substituição Global (GMR) (Extensão do Burp Suite)
O Global Match & Replace (GMR) estende o Burp Suite com regras de correspondência/substituição para aplicar globalmente ou em várias ferramentas de sua escolha (Repeater, Intruder, Proxy, etc.). Ele fornece diffs por requisição e resposta para que você veja exatamente o que mudou.
Esta extensão utiliza a API Burp Montoya.
Funcionalidades
- Correspondência/substituição global em todas as ferramentas do Burp (não apenas Proxy)
- Motor baseado em regras com direcionamento por regra (requisição/resposta + seleção de ferramenta)
- Dois tipos de regras: Simples (com curingas) e RegEx
- Suporte multiline por regra para correspondência entre quebras de linha
- Painel de teste de regras com correspondências e substituições destacadas
- Visualização de Diff GMR nos editores de requisição/resposta mostrando conteúdo original vs modificado
- Persistência de sessão para regras e diffs GMR (com tamanho de cache configurável)
Instalação
A partir de um Release do GitHub
- Baixe o
burp-global-match-replace-*.jar mais recente da página de Releases.
- No Burp Suite: Extensions → Installed → Add
- Selecione Java como o tipo de extensão e escolha o JAR.
Compilar a partir do código fonte
./gradlew clean jar
O JAR estará em build/libs/.
Nota: Este projeto tem como alvo o bytecode Java 21 para compatibilidade com Burp. Use Java 21+ para executar a compilação (defina JAVA_HOME adequadamente).
Visão Geral das Regras
Cada regra possui as seguintes propriedades:
- Ativada: Se a regra está ativa.
- Alvo: Se a regra se aplica a Requisições ou Respostas.
- Tipo de Correspondência:
- Simples: Correspondência de texto literal com suporte a curingas.
- RegEx: Suporte completo a expressões regulares.
- Multiline:
- Desligado:
. não corresponde a quebras de linha.
- Ligado:
. corresponde a quebras de linha (DOTALL).
^ e $ sempre funcionam por linha (MULTILINE habilitado).
- Ferramentas: Quais ferramentas do Burp a regra se aplica.
- Corresponder / Substituir: O padrão de correspondência e o texto de substituição.
- Comentário: Nota livre da regra.
Nota: se nenhuma ferramenta estiver selecionada, a regra não será executada.
Regras simples correspondem a texto literal com curingas opcionais:
* → qualquer número de caracteres
? → exatamente um caractere
Por padrão (multiline desligado), os curingas não cruzam quebras de linha. Se multiline estiver ligado, * e ? podem abranger novas linhas.
Para corresponder a um * ou ? literal, escape-o com uma barra invertida:
\\* → * literal
\\? → ? literal
\\\\ → barra invertida literal
Exemplo (linha única):
Alterar user agent.
Match: User-Agent: *
Replace: User-Agent: Mozilla/5.0 (...) Chrome/123
Correspondência RegEx
Regras regex são expressões regulares Java padrão. O motor sempre utiliza MULTILINE e só utiliza DOTALL se Multiline estiver habilitado. Isso significa:
^ e $ correspondem a limites de linha por padrão
. não corresponde a quebras de linha a menos que multiline esteja habilitado
Exemplo (linha única):
Remover um cabeçalho.
Match: ^X-Test:.*$\r?\n
Replace:
Nota: o $\r?\n no final remove a linha do cabeçalho e seu término de linha. Usar apenas $ deixaria a quebra de linha no lugar.
Exemplo (multiline):
Remover comentários HTML.
Match: <!--.*?-->
Replace:
Multiline: ON
Painel de Regras (Aba do Suite)
A aba do suite fornece gerenciamento e teste completos de regras:
Lista de Regras
Colunas:
- Ativada: alternar regra ligada/desligada
- Alvo: Requisição / Resposta
- Tipo de Correspondência: Simples / RegEx
- Multiline: “Ligado” quando habilitado
- Ferramentas: lista de ferramentas selecionadas
- Corresponder / Substituir / Comentário
Botões
- Adicionar: criar uma nova regra
- Editar: modificar a regra selecionada
- Duplicar: clonar a regra selecionada (criada desativada para que você possa ajustar com segurança)
- Remover: excluir a regra selecionada
Painel de Teste de Regras
- Cole uma requisição/resposta de exemplo em Entrada de Amostra
- Selecione uma regra
- Clique em Testar Regra Selecionada
A saída do teste destaca:
- Texto correspondido na entrada
- Texto de substituição na saída
- Grupos de captura regex (cores diferentes)
Visualização de Diff GMR
Quando uma regra modifica uma requisição ou resposta, uma aba “GMR Diff” aparece dentro do editor de requisição/resposta (em ferramentas como Proxy, Repeater, Intruder, etc.).
Requisições/respostas modificadas serão destacadas em amarelo, e a nota será definida como “Global Match & Replace”.
O que mostra
- Um resumo de todas as regras que foram aplicadas
- Painéis Original vs Modificado
- Diferenças destacadas
- Botões Próximo/Anterior para navegar entre as alterações
Quando a aba aparece
A aba GMR Diff é mostrada apenas se uma regra realmente modificou a mensagem. Se nenhuma alteração foi aplicada, a aba não aparecerá. Isso pode ser confuso se, por exemplo, houver um GMR Diff apenas na requisição ou apenas na resposta.
Destaque
- Ambos os painéis mostram destaques de diff para as regiões alteradas
- Botões de navegação (
< e >) percorrem as alterações
- A contagem mostra quantas alterações foram detectadas e a posição atual
Persistência e Configurações
O que é persistido na sessão
- Regras (incluindo configuração multiline, comentários, etc.)
- Diffs GMR (conteúdo original/modificado + resumos de regras aplicadas)
Painel de configurações
A página de configurações da extensão inclui:
- Um limite de cache de diff GMR (MB)
- Controla quanto histórico de diff é armazenado na sessão
- O cache armazena conteúdo original/modificado mais resumos de regras aplicadas
- Usa uma política de expulsão LRU: os diffs mais antigos são descartados primeiro quando o limite é excedido
- Valores maiores mantêm diffs para mais requisições históricas
Notas / Detalhes de Comportamento
- Regras simples não interpretam
$1 ou backreferences nas substituições.
- Regras regex suportam
$1, $2, etc. nas substituições.
- Alternância Multiline afeta apenas como os padrões correspondem, não como as substituições se comportam.
- Histórico de Diff GMR é armazenado em cache e persistido na sessão (sujeito ao limite de tamanho).
Licença
GPL v3