Gobuster: Fundamentos para la enumeración ofensiva

Este artículo se centra en Gobuster, una herramienta ofensiva de seguridad ampliamente utilizada en la fase de reconocimiento de información. Exploraremos cómo la herramienta puede enumerar directorios web, subdominios y hosts virtuales.

Preparación del entorno

Para los ejercicios prácticos, utilizaremos una máquina virtual Ubuntu 20.04 proporcionada por TryHackMe como servidor web objetivo. Este servidor está configurado con múltiples subdominios y hosts virtuales, e incluye dos sistemas de gestión de contenido (CMS): WordPress y Joomla.

En este laboratorio, emplearemos la AttackBox proporiconada por TryHackMe, que ya tiene Gobuster instalado, para enumerar directorios y subdominios del servidor objetivo. Si prefieres usar tu propia máquina, necesitarás conectarte a la VPN de TryHackMe e instalar Gobuster manualmente, siguiendo las instrucciones de su repositorio en GitHub.

Para asegurar que los nombres de dominio se resuelvan correctamente en el entorno de laboratorio local, es posible que debas configurar el servidor DNS en tu máquina de ataque. Esto se puede lograr editando el archivo /etc/systemd/resolved.conf.

sudo nano /etc/systemd/resolved.conf

Descomenta la línea DNS= y añade la dirección IP de la máquina objetivo (MACHINE_IP). Luego, reinicia el servicio systemd-resolved.

sudo systemctl restart systemd-resolved

El contenido final del archivo debería verse similar a esto:

[Resolve]
DNS=MACHINE_IP
#FallbackDNS=
#Domains=

Introducción a Gobuster

Gobuster es una herramienta ofensiva de código abierto escrita en Go. Utiliza listas de palabras para realizar ataques de fuerza bruta y enumerar directorios web, subdominios DNS, hosts virtuales, buckets de Amazon S3 y Google Cloud Storage. Es una herramienta popular entre los profesionales de seguridad para pruebas de penetración y evaluaciones.

Es importante distinguir entre dos conceptos clave que aplica esta herramienta:

  • Enumeración: El acto de listar todos los recursos disponibles, como directorios en un servidor web.
  • Fuerza bruta: El método de probar sistemáticamente todas las combinaciones posibles de una lista, similar a probar cada llave en un candado.

Resumen de la herramienta

La página de ayuda de Gobuster (gobuster --help) proporciona una visión general de sus capacidades. Los comandos principales para nuestro propósito son:

  • dir: Para la enumeración de directorios y archivos web.
  • dns: Para la enumeración de subdominios DNS.
  • vhost: Para la enumeración de hosts virtuales.

Varios flags son comunes a múltiples modos:

Flag Descripción
-t, --threads Número de hilos concurrentes (por defecto 10). Ajustar según los recursos del sistema.
-w, --wordlist Ruta al archivo de diccionario.
--delay Tiempo de espera entre peticiones para evadir detección.
-o, --output Archivo donde guardar los resultados.

Ejemplo de uso básico para enumerar directorios:

gobuster dir -u "http://objetivo.ejemplo/" -w /ruta/al/diccionario.txt -t 50

Caso de uso: Enumeración de directorios y archivos

El modo dir de Gobuster permite descubrir la estructura de directorios y archivos de un sitio web. Es común que las aplicaciones web tengan rutas predecibles (e.g., /admin, /backup), lo que las hace vulnerables a este tipo de escaneo.

Flags específicos del modo dir

Flag Descripción
-c, --cookies Cookies a enviar con cada petición (ej. ID de sesión).
-x, --extensions Extensiones de archivo a buscar (ej. .php, .js).
-k, --no-tls-validation Omite la validación de certificados SSL/TLS. Útil para entornos con certificados autofirmados.
-s, --status-codes Mostrar solo respuestas con códigos de estado específicos (ej. 200, 301).
-r, --follow-redirect Seguir redirecciones HTTP (códigos 301, 302).

Ejemplo práctico

Para escanear el sitio http://sitio.ejemplo buscando archivos .php y .js, ignorando errores de certificado:

gobuster dir -u "http://sitio.ejemplo" -w /usr/share/wordlists/dirb/common.txt -x .php,.js -k

Este comando generará peticiones como http://sitio.ejemplo/login.php, http://sitio.ejemplo/config.js, etc., y reportará los que devuelvan un código de estado 200 (Encontrado).

Caso de uso: Enumeración de subdominios DNS

El modo dns se utiliza para descubrir subdominios asociados a un dominio principal. Es crucial porque un subdominio puede albergar versiones vulnerables de una aplicación o servicios no seguros que no existen en el dominio principal.

Flags específicos del modo dns

Flag Descripción
-d, --domain Dominio objetivo a enumerar.
--show-ips Muestra las direcciones IP a las que resuelve cada subdominio.
--resolver Especifica un servidor DNS personalizado para la resolución.

Ejemplo práctico

Para enumerar subdominios del dominio ejemplo.thm:

gobuster dns -d ejemplo.thm -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt --show-ips

La herramienta realizará consultas DNS como www.ejemplo.thm, mail.ejemplo.thm, ftp.ejemplo.thm, etc., e informará de los que existan junto con sus direcciones IP.

Caso de uso: Enumeración de hosts virtuales (vhost)

Los hosts virtuales (vhosts) permiten alojar múltiples sitios web en un mismo servidor físico y dirección IP. La herramienta distingue entre un subdominio (resuelto vía DNS) y un vhost (resuelto internamente por el servidor web al analizar el encabezado Host de la petición).

Diferencia entre modos dns y vhost

  • El modo dns consulta servidores DNS para encontrar registros A o CNAME.
  • El modo vhost envía peticiones HTTP directamente al servidor web, variando el encabezado Host en cada una.

Flags específicos del modo vhost

Flag Descripción
-u, --url URL base del servidor objetivo (generalmente la IP).
--domain Dominio base a adjuntar a las entradas del diccionario para formar el nombre del host (ej. ejemplo.thm).
--append-domain Indica a Gobuster que adjunte el dominio configurado a cada palabra del diccionario.
--exclude-length Excluye respuestas con un tamaño de cuerpo específico. Es útil para filtrar falsos positivos que suelen tener respuestas de error de tamaño constante.

Ejemplo práctico

Para buscar vhosts en la IP 10.10.10.5 que respondan como subdominios de ejemplo.thm:

gobuster vhost -u "http://10.10.10.5" --domain ejemplo.thm -w /ruta/a/diccionario.txt --append-domain --exclude-length 300

Gobuster enviará peticiones con un encabezado Host como:

Host: web.ejemplo.thm
Host: api.ejemplo.thm
Host: portal.ejemplo.thm

Y reportará aquellos que devuelvan una respuesta HTTP 200 (OK), lo que indica que el servidor está configurado para servir ese host virtual.

Etiquetas: Gobuster fuerza bruta enumeración escaneo de directorios subdominios

Publicado el 7-4 00:58