Fuzzing de Parâmetros GET no Gobuster

Beginner
Pratique Agora

Introdução

Na segurança de aplicações web, a descoberta de parâmetros GET ocultos ou não documentados é crucial para identificar potenciais vulnerabilidades. Estes parâmetros podem, por vezes, levar à divulgação de informações, injeção de SQL ou outras falhas de segurança se não forem devidamente tratados pela aplicação. O Gobuster, uma ferramenta popular de brute-forcing de diretórios e ficheiros, também oferece um modo "fuzz" que pode ser aproveitado para descobrir parâmetros GET.

Este laboratório irá guiá-lo através do processo de utilização do modo fuzz do Gobuster para identificar parâmetros GET. Aprenderá a construir um URL com a palavra-chave FUZZ, a utilizar uma wordlist de nomes de parâmetros comuns, a executar o scan e a analisar os resultados para encontrar parâmetros interessantes. No final deste laboratório, terá uma compreensão prática de como realizar fuzzing de parâmetros GET com o Gobuster, uma habilidade valiosa para qualquer entusiasta ou profissional de cibersegurança.

Identificar um Endpoint de URL para Testar

Nesta etapa, você identificará um endpoint de URL de destino que deseja testar para parâmetros GET ocultos. Para este laboratório, usaremos um servidor web simples que simula uma aplicação vulnerável. Iniciaremos um servidor HTTP Python para servir um arquivo HTML básico.

Primeiro, navegue até o diretório do seu projeto:

cd ~/project

Em seguida, crie um arquivo HTML simples chamado index.html que usaremos como nosso alvo. Este arquivo simulará uma página web que pode aceitar parâmetros GET.

nano index.html

Adicione o seguinte conteúdo ao index.html:

<!DOCTYPE html>
<html>
  <head>
    <title>Página de Teste</title>
  </head>
  <body>
    <h1>Bem-vindo à Página de Teste!</h1>
    <p>Esta página é para testar parâmetros GET.</p>
  </body>
</html>

Salve o arquivo pressionando Ctrl+X, depois Y e Enter.

Agora, inicie um servidor HTTP Python simples para servir este arquivo. Este servidor será executado na porta 8000.

python3 -m http.server 8000 &

O & no final executa o servidor em segundo plano, permitindo que você continue usando o terminal. Você deverá ver uma saída semelhante a esta:

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

O endpoint de URL de destino para o nosso fuzzing será http://127.0.0.1:8000/index.html.

Construir um URL com uma Palavra-chave FUZZ como Nome de Parâmetro

Nesta etapa, você aprenderá como construir o URL que o Gobuster usará para fuzzing. O modo fuzz do Gobuster requer uma palavra-chave FUZZ no URL para indicar onde as entradas da wordlist devem ser inseridas. Ao fazer fuzzing para parâmetros GET, a palavra-chave FUZZ substitui o nome do parâmetro.

O formato básico para uma requisição GET com um parâmetro é http://example.com/path?parameter=value. Para fazer fuzzing no nome do parâmetro, substituiremos parameter por FUZZ. O valor pode ser qualquer coisa, pois estamos apenas interessados em descobrir o próprio nome do parâmetro. Uma prática comum é usar um valor simples como 1 ou test.

Para o nosso laboratório, o URL de destino é http://127.0.0.1:8000/index.html. Para fazer fuzzing nos nomes de parâmetros GET, o URL será construído da seguinte forma:

http://127.0.0.1:8000/index.html?FUZZ=test

Aqui:

  • http://127.0.0.1:8000/index.html é o nosso URL base.
  • ? indica o início da string de consulta (query string).
  • FUZZ é o placeholder onde o Gobuster inserirá palavras da nossa wordlist.
  • =test é um valor estático para o parâmetro. O valor específico não importa para descobrir o nome do parâmetro, mas é necessário para um formato de parâmetro válido.

Você não precisa executar nenhum comando nesta etapa, mas entender essa construção de URL é crucial para as próximas etapas.

Usar uma Wordlist de Nomes de Parâmetros Comuns

Nesta etapa, você preparará uma wordlist contendo nomes comuns de parâmetros GET. O Gobuster iterará por esta wordlist, substituindo a palavra-chave FUZZ no URL por cada palavra da lista.

Embora o Gobuster frequentemente venha com wordlists padrão, é uma boa prática saber como criar ou especificar a sua própria. Para este laboratório, criaremos uma pequena wordlist personalizada com alguns nomes de parâmetros comuns.

Primeiro, certifique-se de que você está no diretório ~/project:

cd ~/project

Agora, crie um novo arquivo chamado params.txt que servirá como nossa wordlist:

nano params.txt

Adicione os seguintes nomes de parâmetros comuns ao params.txt, cada um em uma nova linha:

id
name
user
page
search
query
file
data
token

Salve o arquivo pressionando Ctrl+X, depois Y e Enter.

Este arquivo params.txt será usado pelo Gobuster na próxima etapa para fazer fuzzing nos parâmetros GET.

Executar o Scan de Fuzz do Gobuster

Nesta etapa, você executará o scan de fuzz do Gobuster usando o URL construído e a wordlist.

O comando para o modo fuzz do Gobuster é gobuster fuzz. Precisamos especificar o URL com a palavra-chave FUZZ usando o flag -u e a wordlist usando o flag -w.

Abra seu terminal e execute o seguinte comando:

gobuster fuzz -u http://127.0.0.1:8000/index.html?FUZZ=test -w ~/project/params.txt

Vamos detalhar o comando:

  • gobuster fuzz: Invoca o Gobuster no modo de fuzzing.
  • -u http://127.0.0.1:8000/index.html?FUZZ=test: Especifica o URL de destino com o placeholder FUZZ.
  • -w ~/project/params.txt: Especifica o caminho para a nossa wordlist contendo nomes de parâmetros.

O Gobuster enviará agora requisições para o servidor web, substituindo FUZZ por cada palavra de params.txt. Como nosso index.html não processa realmente esses parâmetros, o Gobuster provavelmente relatará o mesmo código de status e comprimento de conteúdo para todas as requisições. No entanto, em um cenário do mundo real, uma mudança no código de status ou no comprimento do conteúdo indicaria que um parâmetro pode ser reconhecido.

A saída mostrará cada tentativa e o código de status e comprimento de conteúdo correspondentes. Parecerá semelhante a isto:

===============================================================
Gobuster vX.X.X
===============================================================
[+] Url: http://127.0.0.1:8000/index.html?FUZZ=test
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /home/labex/project/params.txt
[+] Status codes: 200,204,301,302,307,401,403,405
[+] User Agent: gobuster/X.X.X
[+] Timeout: 10s
===============================================================
200 (290)    - http://127.0.0.1:8000/index.html?id=test
200 (290)    - http://127.0.0.1:8000/index.html?name=test
200 (290)    - http://127.0.0.1:8000/index.html?user=test
200 (290)    - http://127.0.0.1:8000/index.html?page=test
200 (290)    - http://127.0.0.1:8000/index.html?search=test
200 (290)    - http://127.0.0.1:8000/index.html?query=test
200 (290)    - http://127.0.0.1:8000/index.html?file=test
200 (290)    - http://127.0.0.1:8000/index.html?data=test
200 (290)    - http://127.0.0.1:8000/index.html?token=test
===============================================================

Analisar os Resultados para Alterações no Comprimento da Resposta ou Status

Nesta etapa, você aprenderá como interpretar a saída do scan de fuzz do Gobuster. A chave para identificar parâmetros GET potencialmente válidos ou interessantes reside na observação de alterações na resposta HTTP.

Quando o Gobuster é executado, ele exibe o código de status HTTP e o comprimento do conteúdo (em bytes) para cada requisição que faz.

Por exemplo, a saída da etapa anterior mostrou:

200 (290)    - http://127.0.0.1:8000/index.html?id=test
200 (290)    - http://127.0.0.1:8000/index.html?name=test
...

Aqui, 200 é o código de status HTTP (OK), e 290 é o comprimento do conteúdo da resposta.

O que procurar:

  1. Códigos de Status Diferentes: Se uma requisição com um nome de parâmetro específico retornar um código de status HTTP diferente (por exemplo, 200 para válido, 404 para não encontrado, 500 para erro do servidor, 302 para redirecionamento), isso pode indicar que a aplicação processou ou reagiu a esse parâmetro. Por exemplo, um 200 OK para um parâmetro que normalmente retorna 404 Not Found pode ser significativo.
  2. Comprimentos de Conteúdo Diferentes: Mesmo que o código de status permaneça 200 OK, uma mudança no comprimento do conteúdo pode ser um forte indicador. Isso geralmente significa que o corpo da resposta da aplicação mudou, talvez incluindo dados específicos relacionados ao parâmetro, uma mensagem de erro ou um layout de página diferente.
  3. Mensagens de Erro: Às vezes, um parâmetro pode acionar uma mensagem de erro (por exemplo, erro de SQL, erro da aplicação) que se reflete no corpo da resposta, levando a um comprimento de conteúdo diferente ou até mesmo a um código de status 500. Este é um forte sinal de uma potencial vulnerabilidade.

Em nossa configuração de laboratório atual, como index.html é um arquivo estático e o servidor Python não processa parâmetros GET, você observará que todas as requisições retornam um código de status 200 e o mesmo comprimento de conteúdo (290 bytes). Este é o comportamento esperado para o nosso caso de teste simples.

Em um cenário do mundo real, se você estivesse fazendo fuzz em uma aplicação web ativa e visse uma entrada como:

200 (512)    - http://example.com/search?query=test

enquanto outros parâmetros retornassem 200 (290), o parâmetro query valeria a pena investigar mais a fundo devido ao comprimento de conteúdo diferente.

Esta etapa conclui o laboratório. Você aprendeu com sucesso como usar o Gobuster para fazer fuzz em parâmetros GET e como analisar os resultados.

Para parar o servidor HTTP Python, você pode encontrar seu ID de processo (PID) e encerrá-lo. Primeiro, liste os processos Python em execução:

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

Você verá uma saída semelhante a:

labex     1234  0.0  0.0  12345  6789 ?        S    HH:MM   0:00 python3 -m http.server 8000

Anote o PID (por exemplo, 1234 neste exemplo) e depois encerre o processo:

kill 1234

Substitua 1234 pelo PID real que você encontrou.

Resumo

Neste laboratório, você aprendeu com sucesso como realizar fuzzing de parâmetros GET usando o Gobuster. Você começou configurando um servidor web local e criando um arquivo HTML alvo. Em seguida, construiu um URL com a palavra-chave FUZZ, preparou uma wordlist personalizada de nomes de parâmetros comuns e executou o scan de fuzz do Gobuster. Finalmente, você aprendeu como analisar os resultados do scan, focando em alterações nos códigos de status HTTP e comprimentos de conteúdo, que são indicadores chave de parâmetros reconhecidos.

Esta técnica é uma parte fundamental do reconhecimento de aplicações web e pode ajudar a descobrir funcionalidades ocultas ou potenciais vulnerabilidades. Ao dominar essa habilidade, você estará mais bem equipado para identificar e investigar superfícies de ataque de aplicações web.