Definir um User-Agent Personalizado para Scans no Gobuster

Beginner
Pratique Agora

Introdução

Na segurança web, a reconhecimento é um primeiro passo crucial. Ferramentas como o Gobuster são amplamente utilizadas para enumeração de diretórios e arquivos. No entanto, muitos servidores web e Web Application Firewalls (WAFs) empregam mecanismos de detecção simples, como o bloqueio de requisições com strings de User-Agent suspeitas. Por padrão, o Gobuster utiliza uma string de User-Agent que pode ser facilmente identificada.

Neste laboratório, você aprenderá como definir uma string de User-Agent personalizada para seus scans com o Gobuster. Esta técnica pode ajudá-lo a evadir mecanismos de detecção simples e tornar seus esforços de reconhecimento mais furtivos, permitindo que você descubra potencialmente mais diretórios e arquivos ocultos.

Compreender o Propósito de uma String de User-Agent

Nesta etapa, você aprenderá o que é uma string de User-Agent e por que ela é importante em requisições web.

A string de User-Agent é um cabeçalho enviado por um cliente (como um navegador web ou uma ferramenta como o Gobuster) para um servidor web. Ela geralmente contém informações sobre o tipo de aplicação do cliente, sistema operacional, fornecedor do software e versão do software. Servidores web usam essas informações para entregar conteúdo otimizado para o cliente ou para registrar estatísticas do cliente.

Para ferramentas de segurança como o Gobuster, a string de User-Agent padrão frequentemente revela a identidade da ferramenta, o que pode acionar WAFs ou sistemas de detecção de intrusão (IDS). Por exemplo, o User-Agent padrão do Gobuster pode parecer algo como gobuster/3.1.0.

Vamos realizar um scan básico com o Gobuster sem nenhum User-Agent personalizado para ver seu comportamento padrão. Faremos o scan de um servidor web local que foi configurado em segundo plano.

Primeiro, certifique-se de que o servidor web está em execução verificando seu processo:

ps aux | grep "python3 -m http.server 8080" | 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.1  12345  6789 ?        Sl   HH:MM   0:00 python3 -m http.server 8080 --directory /tmp/web_root

Agora, execute um scan simples com o Gobuster contra o servidor local na porta 8080. Usaremos uma pequena wordlist para demonstração.

gobuster dir -u http://127.0.0.1:8080 -w /usr/share/wordlists/dirb/common.txt -q -x html,txt -t 10
  • -u http://127.0.0.1:8080: Especifica a URL alvo.
  • -w /usr/share/wordlists/dirb/common.txt: Especifica a wordlist a ser usada.
  • -q: Modo silencioso, apenas imprime os resultados.
  • -x html,txt: Especifica as extensões a serem procuradas.
  • -t 10: Define o número de threads concorrentes para 10.

Você verá uma saída semelhante a esta, mostrando os diretórios e arquivos descobertos:

/admin                (Status: 200)
/secret               (Status: 200)
/backup               (Status: 200)

Embora este scan funcione, o User-Agent usado pelo Gobuster é o padrão, que poderia ser facilmente bloqueado por um WAF.

Nesta etapa, você aprenderá como encontrar uma string de User-Agent comum de navegador que você pode usar para disfarçar seus scans com o Gobuster.

Para fazer com que seus scans com o Gobuster pareçam vir de um navegador web legítimo, você precisa usar uma string de User-Agent que um navegador típico enviaria. Você pode encontrar essas strings:

  1. Inspecionando requisições de rede nas ferramentas de desenvolvedor do seu navegador: Ao navegar em um site, abra as ferramentas de desenvolvedor do seu navegador (geralmente F12), vá para a aba "Network" (Rede) e inspecione os cabeçalhos de qualquer requisição.
  2. Pesquisando online: Muitos sites compilam listas de strings de User-Agent comuns.

Para este laboratório, vamos usar uma string de User-Agent comum para uma versão recente do Chrome no Windows. Uma string de User-Agent típica para o Chrome pode parecer com isto:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

Esta string indica:

  • Mozilla/5.0: Um token geral que muitos navegadores incluem por razões históricas.
  • (Windows NT 10.0; Win64; x64): Informações do sistema operacional (Windows 10, 64 bits).
  • AppleWebKit/537.36 (KHTML, like Gecko): Informações do motor de renderização (WebKit, com compatibilidade KHTML).
  • Chrome/120.0.0.0: Nome e versão do navegador.
  • Safari/537.36: Outro token histórico, frequentemente incluído por navegadores baseados em WebKit.

Você pode copiar esta string diretamente para a próxima etapa. É importante colocar a string de User-Agent entre aspas ao usá-la na linha de comando, especialmente se ela contiver espaços ou caracteres especiais.

Use a Flag -a para Definir um User-Agent Personalizado

Nesta etapa, você aprenderá como usar a flag -a no Gobuster para definir uma string de User-Agent personalizada para seus scans.

O Gobuster fornece a flag -a (ou --agent) especificamente para este propósito. Você simplesmente passa a string de User-Agent desejada como um argumento para esta flag.

Vamos preparar o comando do Gobuster com a string de User-Agent personalizada que identificamos na etapa anterior. Usaremos o mesmo alvo e wordlist.

CUSTOM_USER_AGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
echo "Using custom User-Agent: $CUSTOM_USER_AGENT"

Agora, construa o comando do Gobuster. Observe como a flag -a é usada:

gobuster dir -u http://127.0.0.1:8080 -w /usr/share/wordlists/dirb/common.txt -a "$CUSTOM_USER_AGENT" -q -x html,txt -t 10
  • -a "$CUSTOM_USER_AGENT": Esta é a nova parte, onde passamos nossa string de User-Agent personalizada. As aspas em torno de $CUSTOM_USER_AGENT são cruciais porque a string contém espaços.

Antes de executar, considere a diferença que isso faz. Sem a flag -a, o servidor web veria uma requisição do "gobuster". Com a flag -a, ele verá uma requisição de "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", que se parece com um navegador legítimo.

Executar o Scan com o Novo User-Agent

Nesta etapa, você executará o scan do Gobuster usando a string de User-Agent personalizada e observará os resultados.

Agora, execute o comando do Gobuster com o User-Agent personalizado. A saída do scan em si parecerá semelhante à anterior, pois o User-Agent afeta apenas como a requisição é percebida pelo servidor, e não os resultados do scan em si (a menos que o servidor bloqueie o User-Agent padrão).

Execute o comando:

CUSTOM_USER_AGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
gobuster dir -u http://127.0.0.1:8080 -w /usr/share/wordlists/dirb/common.txt -a "$CUSTOM_USER_AGENT" -q -x html,txt -t 10

Você deverá ver os mesmos diretórios e arquivos descobertos:

/admin                (Status: 200)
/secret               (Status: 200)
/backup               (Status: 200)

Embora a saída seja a mesma, a diferença crucial é que, se este fosse um cenário do mundo real com um WAF (Web Application Firewall) ou IDS (Intrusion Detection System), este scan teria menos probabilidade de ser sinalizado como suspeito em comparação com um scan usando o User-Agent padrão do Gobuster. Esta é uma técnica fundamental em hacking ético e testes de penetração para evitar detecção.

Discutir Por Que Isso Pode Ajudar a Evadir Filtros Simples

Nesta etapa, discutiremos por que definir um User-Agent personalizado pode ser uma técnica eficaz para evadir filtros simples e mecanismos de detecção.

Muitos Web Application Firewalls (WAFs), sistemas de detecção de intrusos (IDS) e até mesmo configurações básicas de servidor empregam regras para identificar e bloquear tráfego suspeito. Uma das regras mais simples e comuns é analisar a string do User-Agent.

Veja por que definir um User-Agent personalizado ajuda:

  • Contornando Bloqueios Baseados em User-Agent: Se um WAF tiver uma regra para bloquear requisições com User-Agents como "gobuster", "nmap", "sqlmap" ou outras ferramentas de segurança conhecidas, usar um User-Agent de navegador comum permitirá que suas requisições passem despercebidas por essa regra específica.
  • Reduzindo a Suspeita: Um administrador de servidor revisando logs pode notar um alto volume de requisições de um User-Agent incomum (como gobuster/3.1.0). Ao imitar um navegador comum, suas requisições se misturam ao tráfego de usuários legítimos, tornando menos provável que sejam investigadas manualmente ou sinalizadas automaticamente.
  • Evadindo Limitação de Taxa (em alguns casos): Embora não esteja diretamente relacionado ao User-Agent, alguns sistemas podem aplicar limites de taxa mais rigorosos a User-Agents que não são de navegadores. Ao aparecer como um navegador, você pode evitar esses limites mais rigorosos, permitindo que seu scan prossiga mais rapidamente ou de forma mais completa.

É importante notar que esta técnica é eficaz contra filtros simples. WAFs e IDSs mais sofisticados usam uma combinação de fatores (por exemplo, padrões de requisição, reputação de IP, análise comportamental) para detectar atividades maliciosas, portanto, um User-Agent personalizado por si só pode não ser suficiente para contornar defesas avançadas. No entanto, é um primeiro passo fundamental e muitas vezes necessário em reconhecimento furtivo.

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

pkill -f "python3 -m http.server 8080"

Este comando encontra e encerra o processo que está executando o servidor web Python.

Resumo

Neste laboratório, você aprendeu a importância da string User-Agent em requisições web e como ela pode ser utilizada por ferramentas de segurança como o Gobuster. Você identificou com sucesso uma string User-Agent de navegador comum e, o mais importante, usou o flag -a no Gobuster para definir um User-Agent personalizado para seus scans. Esta habilidade prática é crucial para tornar seus esforços de reconhecimento mais furtivos e eficazes, ajudando você a contornar mecanismos de detecção simples e a se misturar ao tráfego web legítimo.