Neste artigo, vamos mergulhar nas capacidades do Burp Repeater, capacitando você a utilizá-lo em sua totalidade. Você aprenderá a enviar requisições em paralelo, configurar conexões e aproveitar as Custom Actions para aprimorar suas análises de segurança. É importante ressaltar que este material tem caráter instrutivo e é destinado a profissionais de segurança que realizam testes dentro de contratos estabelecidos. O autor e a redação não se responsabilizam por quaisquer danos causados pela aplicação das informações aqui apresentadas. A distribuição de software malicioso, a interrupção de sistemas e a violação da confidencialidade de comunicações são crimes previstos em lei.
Abra o Repeater e vamos começar! A requisição no Repeater pode ser editada de diversas formas, mas preste atenção à engrenagem ao lado do botão de envio. Nas configurações, você define o comportamento do motor que estabelece a conexão e envia os dados para o servidor. Essas opções podem comprometer um ataque, mesmo que pareçam completamente inofensivas. Se você está tentando realizar um ataque de HTTP request smuggling do tipo TE.CL, o objetivo é ocultar uma requisição dentro do corpo de outra. Um exemplo de requisição maliciosa seria:
httpPOST / HTTP/1.1 Host: YOUR-LAB-ID.web-security-academy.net Content-Type: application/x-www-form-urlencoded Content-length: 4 Transfer-Encoding: chunked 5e POST / 404 HTTP/1.1 Content-Type: application/x-www-form-urlencoded Content-Length: 15 x=1 0
O proxy que recebe a requisição se orienta pelo cabeçalho Transfer-Encoding (TE) e ignora completamente o Content-Length. Para ele, a requisição é dividida em chunks (chunked). O primeiro chunk tem o tamanho 5e, que corresponde a:
httpPOST / 404 HTTP/1.1 Content-Type: application/x-www-form-urlencoded Content-Length: 15 x=1
O zero indica o fim da sequência. O corpo da requisição pode parecer estranho, mas se não houver um WAF ou uma regra que descarte tal corpo, a requisição será processada. Onde encontrar o valor 5e? O servidor alvo, que está atrás do proxy e acredita que ele filtra bem as requisições, se orienta pelo CL, ignorando o TE. Para você, é crucial que a requisição chegue ao servidor final com um Content-Length igual a 4. Assim, o alvo dividirá a requisição em duas partes com base no Content-Length e processará ambas. A primeira requisição seria:
httpPOST / HTTP/1.1 Host: YOUR-LAB-ID.web-security-academy.net Content-Type: application/x-www-form-urlencoded Content-length: 4 Transfer-Encoding: chunked 5e PO
A segunda seria:
httpPOST / 404 HTTP/1.1 Content-Type: application/x-www-form-urlencoded Content-Length: 15 x=1
A segunda requisição ficará pendente. O servidor espera 15 bytes, mas recebe apenas x=1. Consequentemente, ele aguardará os bytes restantes. Qualquer requisição, independentemente da origem, encerrará este POST pendente, e o usuário verá um erro 404. Isso ainda não é um ataque, mas já confirma a existência da vulnerabilidade.
Para o teste, utilizaremos o laboratório "HTTP request smuggling, confirming a TE.CL vulnerability via differential responses". O objetivo é confirmar que a aplicação web é vulnerável a contrabando de requisições do tipo TE.CL. Inicie o laboratório e intercepte a requisição para /. Envie-a para o Repeater; para acelerar, você pode selecionar a requisição e pressionar Ctrl+R. Nas configurações, desative "Update Content-Length" e tudo relacionado a requisições HTTP/2. Para muitos ataques de contrabando de requisições, é importante que a versão HTTP seja 1.1. Se você notar que a versão da requisição é 2, altere-a no Inspector à direita. Expanda o menu "Request attributes" e clique em "HTTP/1.1". Não altere a versão manualmente, pois isso pode confundir o motor.
Quase todos os parâmetros podem ser alterados diretamente no texto, exceto a versão HTTP e o protocolo. Para alternar entre HTTPS e HTTP, e vice-versa, bem como para alterar a porta, clique no lápis acima do "Inspector" na parte direita da tela. Ajuste a requisição para o seguinte formato:
httpPOST / HTTP/1.1 Host: 0adc000d041272e5801cd500005e0046.web-security-academy.net Content-Type: application/x-www-form-urlencoded Content-Length: 4 Transfer-Encoding: chunked 5e POST / 404 HTTP/1.1 Content-Type: application/x-www-form-urlencoded Content-Length: 15 x=1 0
No final, não se esqueça de pressionar Enter duas vezes para finalizar corretamente a requisição. Pressione "Send" ou use o atalho Ctrl+Space. Envie a requisição duas vezes. Se a vulnerabilidade existir, a segunda tentativa encerrará o POST pendente para /404, e a resposta retornará:
httpHTTP/1.1 404 Not Found Content-Type: application/json; charset=utf-8 Set-Cookie: session=AhEwk0c4m2yNN8drBPhSCRzNQzpmcBi8; Secure; HttpOnly; SameSite=None X-Frame-Options: SAMEORIGIN Connection: close Content-Length: 11 "Not Found"
Se não funcionar, ative a exibição de caracteres especiais (o ícone acima do texto da requisição). No final, deve haver:
0
Exibição de caracteres especiais na requisição.
Agrupamento de requisições no Repeater não é apenas uma organização conveniente e clara, mas também a capacidade de enviar um grande volume de requisições em paralelo. O envio em massa é necessário para muitos ataques, como HTTP request smuggling e race condition. Esses ataques permitem quebrar a lógica da aplicação e obter acesso a seções restritas ou entregar código malicioso.





