Combinar Gobuster con Nmap para el Descubrimiento de Objetivos

Beginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá una técnica potente para el descubrimiento de objetivos combinando las capacidades de Nmap y Gobuster. Nmap es un escáner de red versátil utilizado para descubrir hosts y servicios en una red informática, mientras que Gobuster es una herramienta utilizada para realizar ataques de fuerza bruta a URIs (directorios y archivos) y subdominios DNS. Al integrar estas dos herramientas, puede automatizar el proceso de identificación de servidores web potenciales dentro de un rango de red dado y luego descubrir sistemáticamente directorios y archivos ocultos en esos servidores. Este enfoque mejora significativamente sus esfuerzos de reconocimiento, haciendo que el proceso de descubrimiento sea más eficiente y completo.

Usar Nmap para escanear un rango de red en busca de puertos web abiertos (80, 443)

En este paso, utilizará Nmap para escanear un rango de red local en busca de hosts que tengan abiertos los puertos web comunes (80 para HTTP y 443 para HTTPS). Esta es la fase inicial para identificar servidores web potenciales. Escanearemos el rango de red 172.17.0.0/24, que es utilizado típicamente por Docker para sus redes internas.

Primero, aseguremos que Nmap esté instalado. Debería estar preinstalado en la VM de LabEx.

nmap --version

Debería ver una salida similar a esta, indicando que 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

Ahora, ejecute el escaneo de Nmap. Usaremos la bandera -p para especificar los puertos 80 y 443, y -oG para volcar los resultados en formato Grepable, que es más fácil de procesar.

nmap -p 80,443 -oG nmap_web_scan.txt 172.17.0.0/24

Este comando escaneará el rango de red especificado en busca de hosts con los puertos 80 o 443 abiertos y guardará la salida en nmap_web_scan.txt. El escaneo podría tardar unos momentos en completarse.

Una vez que el escaneo finalice, puede ver el contenido del archivo de salida:

cat nmap_web_scan.txt

Verá líneas que indican los hosts descubiertos y sus puertos abiertos. Por ejemplo:

## 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

Procesar la salida de Nmap para crear una lista de URLs de servidores web

En este paso, procesará el archivo nmap_web_scan.txt para extraer las direcciones IP de los hosts con puertos web abiertos y formatearlas en una lista de URLs. Esta lista se utilizará posteriormente como entrada para Gobuster.

Utilizaremos grep y awk para procesar el archivo nmap_web_scan.txt. El objetivo es extraer las líneas que contienen los puertos "open" 80 o 443, luego extraer la dirección IP y, finalmente, construir la URL (por ejemplo, http://172.17.0.2 o https://172.17.0.2).

Ejecute el siguiente comando para procesar la salida de Nmap y crear 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

Analicemos este comando:

  • grep "open" nmap_web_scan.txt: Filtra las líneas del archivo nmap_web_scan.txt que contienen la palabra "open", indicando un puerto abierto.
  • awk '/80\/open/ {print "http://" $2} /443\/open/ {print "https://" $2}': Procesa las líneas filtradas.
    • /80\/open/ {print "http://" $2}: Si una línea contiene "80/open", imprime "http://" seguido del segundo campo ($2), que es la dirección IP.
    • /443\/open/ {print "https://" $2}: Si una línea contiene "443/open", imprime "https://" seguido del segundo campo ($2), que es la dirección IP.
    • Nota: Un host podría tener tanto el puerto 80 como el 443 abiertos, lo que resultaría en dos URLs para la misma IP.
  • sort -u: Ordena las URLs y elimina cualquier entrada duplicada.
  • > web_servers.txt: Redirige la salida final a un nuevo archivo llamado web_servers.txt.

Ahora, vea el contenido del archivo web_servers.txt:

cat web_servers.txt

Debería ver una lista de URLs, una por línea, similar a esta:

http://172.17.0.2
https://172.17.0.2
http://172.17.0.3

Este archivo ahora contiene los objetivos para nuestro escaneo con Gobuster.

Escribir un script simple de Bash para iterar sobre la lista de URLs

En este paso, creará un script de Bash que leerá cada URL de web_servers.txt y se preparará para el escaneo de Gobuster. Este script servirá como la columna vertebral de automatización para nuestro flujo de trabajo combinado de Nmap y Gobuster.

Primero, creemos un nuevo archivo de script llamado gobust_scan.sh usando nano:

nano gobust_scan.sh

Pegue el siguiente contenido en el archivo gobust_scan.sh:

#!/bin/bash

## Define la lista de palabras (wordlist) para Gobuster
WORDLIST="/usr/share/wordlists/dirb/common.txt" ## Una lista de palabras común para fuerza bruta de directorios

## Verifica si la lista de palabras existe
if [ ! -f "$WORDLIST" ]; then
  echo "Error: Lista de palabras no encontrada en $WORDLIST. Por favor, asegúrese de que exista."
  echo "Es posible que necesite instalar el paquete 'dirb' o 'wordlists', por ejemplo: sudo apt install dirb"
  exit 1
fi

## Verifica si web_servers.txt existe
if [ ! -f "web_servers.txt" ]; then
  echo "Error: web_servers.txt no encontrado. Por favor, ejecute primero el Paso 2."
  exit 1
fi

echo "Iniciando escaneos de Gobuster..."
echo "-------------------------"

## Itera sobre cada URL en web_servers.txt
while IFS= read -r url; do
  echo "Escaneando $url..."
  ## Marcador de posición para el comando Gobuster - se agregará en el próximo paso
  ## gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"
  echo "Escaneo de $url finalizado."
  echo "-------------------------"
done < web_servers.txt

echo "Todos los escaneos completados."

Guarde el archivo presionando Ctrl+X, luego Y para confirmar, y Enter para guardar con el nombre de archivo actual.

A continuación, haga que el script sea ejecutable:

chmod +x gobust_scan.sh

Ahora, probemos el script para asegurarnos de que itera correctamente sobre las URLs. Aún no ejecutará Gobuster, pero imprimirá mensajes para cada URL.

./gobust_scan.sh

Debería ver una salida similar a esta, indicando que el script está leyendo y procesando correctamente 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.

Esto confirma que nuestro script está listo para incorporar el comando Gobuster.

Llamar a Gobuster dentro del script para cada objetivo descubierto

En este paso, modificará el script gobust_scan.sh para integrar el comando Gobuster. Para cada URL descubierta por Nmap, Gobuster intentará encontrar directorios y archivos ocultos utilizando una lista de palabras común.

Primero, asegúrese de que Gobuster esté instalado. Debería estar preinstalado en la VM de LabEx.

gobuster --version

Debería ver una salida similar a esta:

gobuster v3.1.0

Ahora, abra el script gobust_scan.sh nuevamente para editarlo:

nano gobust_scan.sh

Localice la línea de marcador de posición: ## 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 línea y asegúrese de que se vea exactamente así:

#!/bin/bash

## Define la lista de palabras (wordlist) para Gobuster
WORDLIST="/usr/share/wordlists/dirb/common.txt" ## Una lista de palabras común para fuerza bruta de directorios

## Verifica si la lista de palabras existe
if [ ! -f "$WORDLIST" ]; then
  echo "Error: Lista de palabras no encontrada en $WORDLIST. Por favor, asegúrese de que exista."
  echo "Es posible que necesite instalar el paquete 'dirb' o 'wordlists', por ejemplo: sudo apt install dirb"
  exit 1
fi

## Verifica si web_servers.txt existe
if [ ! -f "web_servers.txt" ]; then
  echo "Error: web_servers.txt no encontrado. Por favor, ejecute primero el Paso 2."
  exit 1
fi

echo "Iniciando escaneos de Gobuster..."
echo "-------------------------"

## Itera sobre cada URL en 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 "Escaneo de $url finalizado."
  echo "-------------------------"
done < web_servers.txt

echo "Todos los escaneos completados."

Guarde el script modificado (Ctrl+X, Y, Enter).

Ahora, ejecute el script. Esto ejecutará Gobuster para cada URL y guardará los resultados en archivos separados.

./gobust_scan.sh

El script ahora ejecutará Gobuster para cada URL. Verá la salida de Gobuster directamente en su terminal mientras se ejecuta, y también guardará los resultados en archivos llamados como gobuster_172.17.0.2.txt, gobuster_172.17.0.2_443.txt, etc. (los nombres de archivo exactos dependen de las URLs).

Después de que el script se complete, puede listar los archivos de salida de Gobuster generados:

ls gobuster_*.txt

Debería ver archivos similares a:

gobuster_172.17.0.2.txt  gobuster_172.17.0.2_443.txt  gobuster_172.17.0.3.txt

Consolidar los resultados de Gobuster de todos los objetivos

En este paso final, consolidará todos los archivos de salida individuales de Gobuster en un único informe completo. Esto facilita la revisión de todos los directorios y archivos descubiertos en todos los servidores web escaneados.

Utilizaremos el comando cat para concatenar todos los archivos que coincidan con gobuster_*.txt en un único archivo llamado all_gobuster_results.txt.

cat gobuster_*.txt > all_gobuster_results.txt

Este comando tomará el contenido de todos los archivos que comiencen con gobuster_ y terminen con .txt y los combinará en all_gobuster_results.txt.

Ahora, puede ver los resultados consolidados:

cat all_gobuster_results.txt

Verá una salida combinada de todos los directorios y archivos que Gobuster encontró en los servidores web escaneados. La salida variará según el contenido de los servidores web, pero podría verse algo así:

===============================================================
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 archivo consolidado proporciona un único punto de referencia para todos los activos web descubiertos, completando su proceso automatizado de descubrimiento de objetivos.

Resumen

En este laboratorio, combinó con éxito Nmap y Gobuster para automatizar el proceso de descubrimiento de servidores web y directorios. Comenzó utilizando Nmap para escanear un rango de red en busca de puertos web abiertos, luego analizó su salida para crear una lista de URLs objetivo. A continuación, desarrolló un script de Bash para iterar a través de estas URLs, llamando a Gobuster para cada una para encontrar directorios y archivos ocultos. Finalmente, consolidó todos los resultados de Gobuster en un único informe, demostrando un flujo de trabajo de reconocimiento eficiente y completo. Este enfoque integrado es una habilidad valiosa para cualquier persona involucrada en la seguridad de redes o pruebas de aplicaciones web.