Introdução
Neste laboratório, você aprenderá uma técnica poderosa para descoberta de alvos, combinando as capacidades do Nmap e do Gobuster. O Nmap é um scanner de rede versátil usado para descobrir hosts e serviços em uma rede de computadores, enquanto o Gobuster é uma ferramenta usada para brute-force de URIs (diretórios e arquivos) e subdomínios DNS. Ao integrar essas duas ferramentas, você pode automatizar o processo de identificação de servidores web potenciais dentro de um determinado intervalo de rede e, em seguida, descobrir sistematicamente diretórios e arquivos ocultos nesses servidores. Essa abordagem aprimora significativamente seus esforços de reconhecimento, tornando o processo de descoberta mais eficiente e abrangente.
Usar Nmap para Escanear um Intervalo de Rede em Busca de Portas Web Abertas (80, 443)
Nesta etapa, você usará o Nmap para escanear um intervalo de rede local em busca de hosts que tenham portas web comuns (80 para HTTP e 443 para HTTPS) abertas. Esta é a fase inicial de identificação de servidores web potenciais. Escanearemos o intervalo de rede 172.17.0.0/24, que é tipicamente usado pelo Docker para suas redes internas.
Primeiro, vamos garantir que o Nmap esteja instalado. Ele deve vir pré-instalado na VM LabEx.
nmap --version
Você deverá ver uma saída semelhante a esta, indicando que o Nmap está instalado:
Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1f libpcre-8.39 libpcap-1.9.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select
Agora, execute o escaneamento Nmap. Usaremos o flag -p para especificar as portas 80 e 443, e -oG para gerar a saída no formato Grepable, que é mais fácil de analisar.
nmap -p 80,443 -oG nmap_web_scan.txt 172.17.0.0/24
Este comando escaneará o intervalo de rede especificado em busca de hosts com as portas 80 ou 443 abertas e salvará a saída em nmap_web_scan.txt. O escaneamento pode levar alguns momentos para ser concluído.
Após o término do escaneamento, você pode visualizar o conteúdo do arquivo de saída:
cat nmap_web_scan.txt
Você verá linhas indicando os hosts descobertos e suas portas abertas. Por exemplo:
## Nmap 7.80 scan initiated Mon Jan 1 00:00:00 2024 as: nmap -p 80,443 -oG nmap_web_scan.txt 172.17.0.0/24
Host: 172.17.0.2 () Ports: 80/open/tcp//http///, 443/open/tcp//https///
Host: 172.17.0.3 () Ports: 80/open/tcp//http///
## Nmap done at Mon Jan 1 00:00:00 2024 -- 256 IP addresses (2 hosts up) scanned in 5.00 seconds
Analisar a Saída do Nmap para Criar uma Lista de URLs de Servidores Web
Nesta etapa, você analisará o arquivo nmap_web_scan.txt para extrair os endereços IP dos hosts com portas web abertas e formatá-los em uma lista de URLs. Esta lista será então usada como entrada para o Gobuster.
Usaremos grep e awk para processar o arquivo nmap_web_scan.txt. O objetivo é extrair linhas que contenham as portas 80 ou 443 "abertas", em seguida extrair o endereço IP e, finalmente, construir a URL (por exemplo, http://172.17.0.2 ou https://172.17.0.2).
Execute o seguinte comando para analisar a saída do Nmap e criar web_servers.txt:
grep "open" nmap_web_scan.txt | awk '/80\/open/ {print "http://" $2} /443\/open/ {print "https://" $2}' | sort -u > web_servers.txt
Vamos detalhar este comando:
grep "open" nmap_web_scan.txt: Filtra linhas donmap_web_scan.txtque contêm a palavra "open", indicando uma porta aberta.awk '/80\/open/ {print "http://" $2} /443\/open/ {print "https://" $2}': Processa as linhas filtradas./80\/open/ {print "http://" $2}: Se uma linha contiver "80/open", ele imprime "http://" seguido pelo segundo campo ($2), que é o endereço IP./443\/open/ {print "https://" $2}: Se uma linha contiver "443/open", ele imprime "https://" seguido pelo segundo campo ($2), que é o endereço IP.- Nota: Um host pode ter tanto a porta 80 quanto a 443 abertas, resultando em duas URLs para o mesmo IP.
sort -u: Ordena as URLs e remove quaisquer entradas duplicadas.> web_servers.txt: Redireciona a saída final para um novo arquivo chamadoweb_servers.txt.
Agora, visualize o conteúdo do arquivo web_servers.txt:
cat web_servers.txt
Você deverá ver uma lista de URLs, uma por linha, semelhante a esta:
http://172.17.0.2
https://172.17.0.2
http://172.17.0.3
Este arquivo agora contém os alvos para o nosso escaneamento Gobuster.
Escrever um Script Bash Simples para Iterar pela Lista de URLs
Nesta etapa, você criará um script Bash que lê cada URL do arquivo web_servers.txt e se prepara para o escaneamento com Gobuster. Este script servirá como a espinha dorsal da automação para nosso fluxo de trabalho combinado de Nmap e Gobuster.
Primeiro, vamos criar um novo arquivo de script chamado gobust_scan.sh usando nano:
nano gobust_scan.sh
Cole o seguinte conteúdo no arquivo gobust_scan.sh:
#!/bin/bash
## Define a wordlist para o Gobuster
WORDLIST="/usr/share/wordlists/dirb/common.txt" ## Uma wordlist comum para brute-forcing de diretórios
## Verifica se a wordlist existe
if [ ! -f "$WORDLIST" ]; then
echo "Erro: Wordlist não encontrada em $WORDLIST. Por favor, certifique-se de que ela exista."
echo "Você pode precisar instalar o pacote 'dirb' ou 'wordlists', por exemplo, sudo apt install dirb"
exit 1
fi
## Verifica se web_servers.txt existe
if [ ! -f "web_servers.txt" ]; then
echo "Erro: web_servers.txt não encontrada. Por favor, execute a Etapa 2 primeiro."
exit 1
fi
echo "Iniciando escaneamentos Gobuster..."
echo "-------------------------"
## Itera por cada URL em web_servers.txt
while IFS= read -r url; do
echo "Escaneando $url..."
## Placeholder para o comando Gobuster - será adicionado na próxima etapa
## gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"
echo "Escaneamento de $url concluído."
echo "-------------------------"
done < web_servers.txt
echo "Todos os escaneamentos concluídos."
Salve o arquivo pressionando Ctrl+X, depois Y para confirmar e Enter para salvar com o nome de arquivo atual.
Em seguida, torne o script executável:
chmod +x gobust_scan.sh
Agora, vamos testar o script para garantir que ele itera pelas URLs corretamente. Ele ainda não executará o Gobuster, mas imprimirá mensagens para cada URL.
./gobust_scan.sh
Você deverá ver uma saída semelhante a esta, indicando que o script está lendo e processando corretamente cada URL:
Starting Gobuster scans...
-------------------------
Scanning http://172.17.0.2...
Finished scanning http://172.17.0.2.
-------------------------
Scanning https://172.17.0.2...
Finished scanning https://172.17.0.2.
-------------------------
Scanning http://172.17.0.3...
Finished scanning http://172.17.0.3.
-------------------------
All scans completed.
Isso confirma que nosso script está pronto para incorporar o comando Gobuster.
Chamar o Gobuster dentro do Script para Cada Alvo Descoberto
Nesta etapa, você modificará o script gobust_scan.sh para integrar o comando Gobuster. Para cada URL descoberta pelo Nmap, o Gobuster tentará encontrar diretórios e arquivos ocultos usando uma wordlist comum.
Primeiro, vamos garantir que o Gobuster esteja instalado. Ele deve vir pré-instalado na VM LabEx.
gobuster --version
Você deverá ver uma saída semelhante a esta:
gobuster v3.1.0
Agora, abra o script gobust_scan.sh novamente para edição:
nano gobust_scan.sh
Localize a linha de placeholder:
## gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"
Descomente esta linha e certifique-se de que ela fique exatamente assim:
#!/bin/bash
## Define a wordlist para o Gobuster
WORDLIST="/usr/share/wordlists/dirb/common.txt" ## Uma wordlist comum para brute-forcing de diretórios
## Verifica se a wordlist existe
if [ ! -f "$WORDLIST" ]; then
echo "Erro: Wordlist não encontrada em $WORDLIST. Por favor, certifique-se de que ela exista."
echo "Você pode precisar instalar o pacote 'dirb' ou 'wordlists', por exemplo, sudo apt install dirb"
exit 1
fi
## Verifica se web_servers.txt existe
if [ ! -f "web_servers.txt" ]; then
echo "Erro: web_servers.txt não encontrada. Por favor, execute a Etapa 2 primeiro."
exit 1
fi
echo "Iniciando escaneamentos Gobuster..."
echo "-------------------------"
## Itera por cada URL em web_servers.txt
while IFS= read -r url; do
echo "Escaneando $url..."
## Comando Gobuster
gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"
echo "Escaneamento de $url concluído."
echo "-------------------------"
done < web_servers.txt
echo "Todos os escaneamentos concluídos."
Salve o script modificado (Ctrl+X, Y, Enter).
Agora, execute o script. Isso executará o Gobuster para cada URL e salvará os resultados em arquivos separados.
./gobust_scan.sh
O script agora executará o Gobuster para cada URL. Você verá a saída do Gobuster diretamente no seu terminal enquanto ele é executado, e ele também salvará os resultados em arquivos nomeados como gobuster_172.17.0.2.txt, gobuster_172.17.0.2_443.txt, etc. (os nomes exatos dos arquivos dependem das URLs).
Após a conclusão do script, você pode listar os arquivos de saída do Gobuster gerados:
ls gobuster_*.txt
Você deverá ver arquivos semelhantes a:
gobuster_172.17.0.2.txt gobuster_172.17.0.2_443.txt gobuster_172.17.0.3.txt
Consolidar os Resultados do Gobuster de Todos os Alvos
Nesta etapa final, você consolidará todos os arquivos de saída individuais do Gobuster em um único relatório abrangente. Isso facilita a revisão de todos os diretórios e arquivos descobertos em todos os servidores web escaneados.
Usaremos o comando cat para concatenar todos os arquivos que correspondem a gobuster_*.txt em um único arquivo chamado all_gobuster_results.txt.
cat gobuster_*.txt > all_gobuster_results.txt
Este comando pegará o conteúdo de todos os arquivos que começam com gobuster_ e terminam com .txt e os combinará em all_gobuster_results.txt.
Agora, você pode visualizar os resultados consolidados:
cat all_gobuster_results.txt
Você verá uma saída combinada de todos os diretórios e arquivos que o Gobuster encontrou nos servidores web escaneados. A saída variará com base no conteúdo dos servidores web, mas pode parecer algo assim:
===============================================================
Gobuster v3.1.0
...
[+] Found: /index.html (Status: 200)
[+] Found: /css (Status: 301)
[+] Found: /js (Status: 301)
...
===============================================================
Gobuster v3.1.0
...
[+] Found: /admin (Status: 301)
[+] Found: /login.php (Status: 200)
...
Este arquivo consolidado fornece um único ponto de referência para todos os ativos web descobertos, completando seu processo automatizado de descoberta de alvos.
Resumo
Neste laboratório, você combinou com sucesso Nmap e Gobuster para automatizar o processo de descoberta de servidores web e diretórios. Você começou usando o Nmap para escanear um intervalo de rede em busca de portas web abertas, depois analisou sua saída para criar uma lista de URLs de destino. Em seguida, você desenvolveu um script Bash para iterar por essas URLs, chamando o Gobuster para cada uma para encontrar diretórios e arquivos ocultos. Finalmente, você consolidou todos os resultados do Gobuster em um único relatório, demonstrando um fluxo de trabalho de reconhecimento eficiente e abrangente. Essa abordagem integrada é uma habilidade valiosa para qualquer pessoa envolvida em segurança de rede ou testes de aplicativos web.



