Excluir Resultados por Comprimento de Resposta no Modo Fuzz do Gobuster

Beginner
Pratique Agora

Introdução

Gobuster é uma ferramenta poderosa usada para brute-forcing de diretórios e arquivos, brute-forcing de subdomínios DNS e enumeração de S3 buckets. Ao realizar operações de fuzzing, especialmente contra servidores web, é comum encontrar um grande número de resultados "ruidosos". Estes frequentemente incluem respostas para caminhos inexistentes que retornam um código de status HTTP consistente (por exemplo, 404 Not Found) e, crucialmente, um comprimento de corpo de resposta consistente. Isso pode poluir a saída e dificultar a identificação de descobertas legítimas.

Neste laboratório, você aprenderá a alavancar o flag --exclude-length do Gobuster no modo fuzz. Este recurso permite especificar um ou mais comprimentos de corpo de resposta para ignorar, filtrando efetivamente esses resultados ruidosos. Ao final deste laboratório, você será capaz de realizar varreduras de fuzzing mais direcionadas e eficientes, focando apenas nas respostas relevantes.

Executar uma varredura de fuzz e identificar um tamanho de resposta comum para requisições inválidas

Nesta etapa, você realizará uma varredura inicial de fuzz com o Gobuster contra um servidor web local. Isso o ajudará a observar a saída típica, especialmente os comprimentos de resposta para caminhos inexistentes, que frequentemente representam resultados "ruidosos".

Primeiro, certifique-se de que o servidor web esteja em execução. Você pode verificar se o processo está ativo:

ps aux | grep "python3 -m http.server 8000" | grep -v grep

Você deverá ver uma saída semelhante a esta, indicando que o servidor está em execução:

labex       1234  0.0  0.0  12345  6789 ?        Sl   HH:MM   0:00 python3 -m http.server 8000 --directory /tmp/web_root

Agora, execute uma varredura de fuzz com o Gobuster usando a wordlist criada na configuração. Vamos ter como alvo http://127.0.0.1:8000.

gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt

Observe a saída. Você notará várias entradas com o mesmo código de status (por exemplo, 404) e, mais importante, o mesmo comprimento. Este comprimento consistente para requisições inválidas é o que visaremos para exclusão. Por exemplo, nonexistentpath123 e anothernonexistentpath devem mostrar o mesmo comprimento.

/index.html           (Status: 200) [Size: 19]
/admin                (Status: 404) [Size: 19]
/login                (Status: 404) [Size: 19]
/config               (Status: 404) [Size: 19]
/robots.txt           (Status: 404) [Size: 19]
/nonexistentpath123   (Status: 404) [Size: 19]
/anothernonexistentpath (Status: 404) [Size: 19]

A partir da saída, identifique o tamanho de resposta comum para os erros 404 (Not Found). Neste exemplo, é 19. Este é o comprimento que usaremos para filtrar o ruído na próxima etapa.

Reexecutar a varredura usando o flag --exclude-length com o tamanho identificado

Nesta etapa, você reexecutará a varredura do Gobuster, mas desta vez usará o flag --exclude-length para filtrar os resultados ruidosos com base no comprimento da resposta que você identificou na etapa anterior.

Lembre-se do comprimento de resposta comum para os erros 404 da etapa anterior. Em nosso exemplo, foi 19. Agora, adicione --exclude-length 19 ao seu comando Gobuster:

gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt --exclude-length 19

Execute o comando e observe a saída.

Observe como os resultados ruidosos são filtrados

Após executar o comando na etapa anterior, você deverá notar imediatamente uma diferença significativa na saída. As entradas correspondentes ao comprimento excluído (por exemplo, respostas 404 com comprimento 19) não deverão mais aparecer.

Compare a saída desta varredura com a saída da Etapa 1.

Saída esperada:

/index.html           (Status: 200) [Size: 19]

Você deverá ver apenas a entrada /index.html, pois é a única que retornou um status 200 OK com um comprimento de conteúdo diferente (embora nesta configuração específica, a página 404 também tenha um comprimento de 19, o que é uma limitação do nosso servidor simples. Em um cenário do mundo real, páginas 404 geralmente têm um comprimento distinto de páginas válidas). O principal aprendizado é que qualquer resposta com o comprimento especificado agora é filtrada.

Isso demonstra a eficácia com que o flag --exclude-length pode reduzir o ruído, permitindo que você se concentre em descobertas potencialmente interessantes.

Refinar a exclusão com uma lista de comprimentos separada por vírgula

Às vezes, um servidor web pode retornar comprimentos de resposta diferentes para vários tipos de requisições "não encontradas" ou "inválidas". O Gobuster permite que você exclua múltiplos comprimentos fornecendo uma lista separada por vírgula para o flag --exclude-length.

Para demonstrar isso, vamos imaginar que nosso servidor possa retornar páginas 404 com comprimentos de 19 e 50. Simularemos isso adicionando outro caminho "válido" que retorna um comprimento diferente.

Primeiro, vamos adicionar um novo arquivo à nossa raiz web com um tamanho diferente:

echo "This is a test page with a different length." > /tmp/web_root/testpage.html

Agora, vamos adicionar testpage.html à nossa wordlist:

echo "testpage.html" >> /tmp/wordlist.txt

Execute a varredura novamente, mas desta vez, vamos supor que queremos excluir tanto 19 quanto 39 (o comprimento de testpage.html é 39).

gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt --exclude-length 19,39

Observe a saída. Você deverá ver que tanto as respostas 404 originais (comprimento 19) quanto a resposta testpage.html (comprimento 39) estão agora excluídas.

Analise a saída mais limpa em busca de descobertas interessantes

Nesta etapa final, você analisará a saída mais limpa produzida pelo uso do flag --exclude-length. O objetivo é entender como essa filtragem ajuda a identificar descobertas verdadeiramente interessantes durante uma operação de fuzzing.

Após executar o comando na etapa anterior, a saída deverá ser ainda mais concisa. Se houvesse outros caminhos em sua wordlist que retornassem um código de status e comprimento não em sua lista de exclusão, eles se destacariam agora.

Por exemplo, se você tivesse um caminho como /secret_admin_panel que retornasse um 200 OK com um comprimento único, ele seria claramente visível na saída filtrada, enquanto poderia ter se perdido entre centenas de 404s em uma varredura não filtrada.

Em nossa configuração atual, com 19 e 39 excluídos, e index.html tendo um comprimento de 19, a saída deverá estar vazia, pois todas as entradas agora estão excluídas. Isso demonstra o poder da filtragem precisa.

Essa técnica é inestimável em testes de penetração e caça a bug bounties no mundo real, onde grandes wordlists podem gerar quantidades avassaladoras de dados irrelevantes. Ao excluir sistematicamente comprimentos comuns de "ruído", você pode reduzir significativamente o esforço manual necessário para revisar os resultados da varredura e aumentar suas chances de descobrir diretórios ou arquivos ocultos.

Para limpar o ambiente, você pode parar o servidor web Python:

kill $(cat /tmp/web_server_pid)

Isso conclui o laboratório. Você aprendeu com sucesso como usar o flag --exclude-length do Gobuster para refinar suas varreduras de fuzzing.

Resumo

Neste laboratório, você ganhou experiência prática no uso do flag --exclude-length do Gobuster no modo fuzz. Você começou realizando uma varredura inicial para identificar comprimentos de resposta comuns para requisições inválidas, que frequentemente representam ruído. Em seguida, aprendeu a usar o flag --exclude-length com um único comprimento para filtrar esses resultados irrelevantes, levando a uma saída mais limpa. Finalmente, explorou como refinar ainda mais a exclusão fornecendo uma lista de comprimentos separada por vírgula, demonstrando sua flexibilidade no tratamento de vários tipos de respostas ruidosas.

Ao dominar essa técnica, você pode melhorar significativamente a eficiência e a eficácia de suas operações de fuzzing de aplicações web, permitindo que você se concentre em descobertas verdadeiramente interessantes e acelere seu processo de descoberta de vulnerabilidades.