← Todas las guías
ExplotaciónLaboratorio + análisisIntermedio42 min

Gobuster desde cero: directorios, archivos y virtual hosts

Aprende a usar Gobuster en un laboratorio autorizado, elegir diccionarios y extensiones, interpretar códigos y redirecciones, y reducir falsos positivos por respuestas genéricas o tamaños repetidos.

1. Gobuster compara candidatos; no demuestra vulnerabilidades

Al terminar producirás dos inventarios revisados: rutas candidatas y nombres virtuales candidatos. Gobuster toma cada línea de un diccionario, construye una solicitud y conserva las respuestas que pasan sus filtros. El trabajo analítico empieza después: comparar código, ubicación de redirección, longitud y contenido con una respuesta inexistente conocida.

dir

Combina palabras con una URL para buscar directorios y archivos. Las extensiones aumentan las variantes por palabra.

vhost

Cambia el nombre solicitado en Host para descubrir sitios que comparten dirección y puerto. No es enumeración DNS.

Filtro

Decide qué mostrar, no qué existe. Un 200 genérico, un 403 común o una longitud repetida todavía necesitan validación.

La línea base negativa es una solicitud a un nombre aleatorio que sabes que no existe. Si esa petición devuelve 200, redirige al login o comparte tamaño con cientos de resultados, el servidor utiliza una respuesta wildcard o un soft 404. Sin esa referencia, una lista larga puede ser solo ruido bien formateado.

2. Instala, verifica la versión y prepara listas pequeñas

La guía está contrastada con Gobuster 3.8.2. Kali lo distribuye como paquete; macOS y Windows pueden instalar la misma versión con Go. La instalación oficial mediante Go requiere Go 1.24 o superior. Verifica siempre gobuster dir --help y gobuster vhost --help, porque las opciones pertenecen al modo y han cambiado entre versiones.

Kali Linux · instalación mantenida por la distribución
sudo apt updatesudo apt install -y gobuster seclistsgobuster --versiongobuster dir --helptest -r /usr/share/seclists/Discovery/Web-Content/common.txt && echo 'Diccionario disponible'
macOS · instalación reproducible con Go 1.24+
go versiongo install github.com/OJ/gobuster/v3@v3.8.2"$(go env GOPATH)/bin/gobuster" --versionexport PATH="$(go env GOPATH)/bin:$PATH"gobuster dir --help
Windows PowerShell · instalación reproducible con Go 1.24+
go versiongo install github.com/OJ/gobuster/v3@v3.8.2$Gobuster = Join-Path (go env GOPATH) 'bin\gobuster.exe'& $Gobuster --version$env:Path = "$(go env GOPATH)\bin;$env:Path"gobuster dir --help

Las dos modificaciones de PATH anteriores afectan solo a la terminal actual; al cerrarla, el entorno vuelve a su estado anterior. Si deseas una instalación permanente, sigue el procedimiento de Go para tu sistema en lugar de editar perfiles a ciegas.

Empieza con términos derivados de la aplicación del laboratorio: navegación, documentación, tecnología y convenciones del equipo. Una lista corta permite reconocer el comportamiento antes de generar miles de peticiones. SecLists sirve para ampliar cobertura después; elige una lista de contenido web, no una de DNS, contraseñas o payloads.

Linux y macOS · diccionarios mínimos del ejercicio
printf '%s\n' admin api assets health login status > "$HOME/cubix-gobuster-dir.txt"printf '%s\n' admin api dev static > "$HOME/cubix-gobuster-vhost.txt"wc -l "$HOME/cubix-gobuster-dir.txt" "$HOME/cubix-gobuster-vhost.txt"
Windows PowerShell · diccionarios mínimos del ejercicio
@('admin','api','assets','health','login','status') | Set-Content -Encoding ascii "$HOME\cubix-gobuster-dir.txt"@('admin','api','dev','static') | Set-Content -Encoding ascii "$HOME\cubix-gobuster-vhost.txt"Get-Content "$HOME\cubix-gobuster-dir.txt","$HOME\cubix-gobuster-vhost.txt"

3. Directorios primero; extensiones después

Confirma antes que 192.0.2.10 corresponde al host de documentación del laboratorio y mide una ruta inexistente. Conserva cabeceras y no sigas la redirección: necesitas observar el código original y Location. En Windows usa curl.exe para invocar el binario y NUL como destino descartable.

Linux y macOS · línea base HTTP
curl -sS -D - -o /dev/null http://192.0.2.10/cubix-no-existe-7f31curl -sS -D - -o /dev/null http://192.0.2.10/
Windows PowerShell · línea base HTTP
curl.exe -sS -D - -o NUL http://192.0.2.10/cubix-no-existe-7f31curl.exe -sS -D - -o NUL http://192.0.2.10/

El primer barrido usa diez hilos, una pausa de 100 ms entre trabajos y guarda el resultado. Gobuster 3.8.2 muestra la longitud por defecto; --hide-length la ocultaría. También excluye 404 por defecto en modo dir. No añadas extensiones hasta comprobar que los seis candidatos producen un conjunto entendible.

Gobuster dir · barrido inicial controlado
gobuster dir -u http://192.0.2.10/ -w "$HOME/cubix-gobuster-dir.txt" -t 10 --delay 100ms -o "$HOME/gobuster-dir-base.txt"
Salida didáctica recortada
/admin (Status: 301) [Size: 169] [--> /admin/]/health (Status: 200) [Size: 27]/login (Status: 302) [Size: 0] [--> /session/new]

Añade solo extensiones coherentes con la tecnología observada. Con tres extensiones, cada palabra puede generar la variante desnuda y tres nombres adicionales; seis palabras pasan de unas seis solicitudes a unas veinticuatro. -x html,txt,json no descubre «todos los archivos»: prueba exactamente esas formas.

Gobuster dir · segunda pasada con extensiones justificadas
gobuster dir -u http://192.0.2.10/ -w "$HOME/cubix-gobuster-dir.txt" -x html,txt,json -t 10 --delay 100ms -o "$HOME/gobuster-dir-ext.txt"

4. Lee código, Location y tamaño como señales combinadas

Un código resume el resultado HTTP, no la relevancia del recurso. RFC 9110 permite incluso responder404 para ocultar un recurso prohibido. Valida cada candidato con una solicitud individual y compara cabeceras, título o firma visible sin acceder a datos fuera del ejercicio.

200 o 204

La solicitud terminó con éxito, pero puede ser una página genérica. Compara longitud y contenido con la línea base negativa.

301, 302, 307 o 308

Existe una instrucción de redirección. Registra Location y confirma si todas las rutas terminan en el mismo login o canonical.

401 o 403

Hay autenticación requerida o una negativa. No prueba exposición ni autoriza repetir credenciales; puede ser una política global.

404 o 410

El servidor no ofrece una representación actual o indica retirada. La aplicación aún puede uniformar u ocultar respuestas.

429

Has alcanzado un límite de ritmo. Detén el barrido y coordina una ventana o un ritmo aprobado; no rotes fuentes.

5xx

El servidor o un intermediario falló. Si se repite, para: la enumeración puede estar afectando la disponibilidad.

Para usar una allowlist con -s, desactiva explícitamente la blacklist 404predeterminada pasando -b ''. Gobuster rechaza configurar ambas a la vez. No filtres primero y razones después: conserva un barrido base y aplica la lista positiva solo cuando la política de respuesta sea conocida.

Gobuster dir · allowlist explícita tras medir la línea base
gobuster dir -u http://192.0.2.10/ -w "$HOME/cubix-gobuster-dir.txt" -s 200,204,301,302,307,308,401,403 -b '' -t 10 --delay 100ms -o "$HOME/gobuster-dir-filtrado.txt"

No sigas redirecciones durante la primera lectura: hacerlo puede convertir muchas rutas distintas en la misma respuesta final y esconder la señal. Inspecciona primero cada Location con curl; si después habilitas --follow-redirect, guarda el resultado por separado y documenta el cambio.

5. Virtual hosts: cambia el nombre, no la dirección

HTTP usa Host —o :authority en versiones recientes— para que un servidor distinga recursos asociados a varios nombres. Por eso vhost no busca registros DNS: envía nombres candidatos al mismo servidor. El laboratorio apunta a 192.0.2.10, añade el dominio lab.example a cada palabra y mantiene el ritmo moderado.

Gobuster vhost · nombres sobre una IP autorizada
gobuster vhost -u http://192.0.2.10/ --domain lab.example --append-domain -w "$HOME/cubix-gobuster-vhost.txt" -t 10 --delay 100ms -o "$HOME/gobuster-vhost-base.txt"
Validación manual de dos nombres
curl -sS -D - -o /dev/null -H 'Host: nombre-inexistente.lab.example' http://192.0.2.10/curl -sS -D - -o /dev/null -H 'Host: admin.lab.example' http://192.0.2.10/

Compara código, longitud y cabeceras. Si el servidor refleja el hostname dentro de una plantilla genérica, el tamaño cambia con cada palabra. Gobuster 3.8 añadió --exclude-hostname-length para ajustar ese caso, pero exige también --exclude-length. Úsalo solo con el tamaño medido de la respuesta inexistente.

Gobuster vhost · excluir una plantilla genérica de 612 bytes
gobuster vhost -u http://192.0.2.10/ --domain lab.example --append-domain -w "$HOME/cubix-gobuster-vhost.txt" --exclude-length 612 --exclude-hostname-length -t 10 --delay 100ms -o "$HOME/gobuster-vhost-filtrado.txt"

6. Reduce ruido sin borrar evidencia útil

El tamaño es una firma barata: respuestas idénticas suelen agruparse, pero compresión, tokens, marcas de tiempo o el propio nombre solicitado pueden cambiarlo. --exclude-length acepta valores, listas y rangos; excluye el cuerpo sin importar el código. Antes de usarlo, toma varias muestras inexistentes y conserva sus cabeceras para justificar el filtro.

Todo devuelve 200

Mide tres nombres aleatorios. Si cuerpo y tamaño coinciden, es un soft 404; excluye esa longitud y valida las excepciones.

Todo redirige

Compara Location. Una redirección global al login es baseline, mientras una ruta con destino distinto merece revisión.

Miles de resultados 403

Puede ser WAF o política global. Reduce a un diccionario mínimo, pausa y valida una muestra con el responsable.

Longitudes próximas

Usa un rango solo si varias respuestas negativas justifican sus extremos; un rango ancho puede ocultar contenido real.

Timeouts o errores de conexión

Baja hilos, aumenta delay y verifica una URL con curl. No incrementes el timeout para sostener un servicio degradado.

Sin resultados

Comprueba URL, resolución, lista y filtros. Después elige un diccionario más específico, no necesariamente uno más grande.

Gobuster dir · excluir tamaños negativos comprobados
gobuster dir -u http://192.0.2.10/ -w /usr/share/seclists/Discovery/Web-Content/common.txt --exclude-length 612,620-624 -t 10 --delay 150ms -o "$HOME/gobuster-dir-seclists.txt"

7. Convierte la salida en un inventario verificable

Ejecuta las pasadas base y filtrada con el diccionario mínimo. Para cada candidato conserva modo, palabra, URL o nombre, código, longitud, Location, comparación con el negativo y estado confirmado, ruido o pendiente. Un hallazgo confirmado demuestra una respuesta diferencial; todavía no demuestra acceso indebido ni vulnerabilidad.

  • La URL, los virtual hosts y el horario figuran en el alcance autorizado
  • La línea base incluye raíz y al menos tres nombres inexistentes
  • El primer barrido usa diccionario mínimo, diez hilos y delay explícito
  • Las extensiones elegidas corresponden a la tecnología observada
  • Cada 3xx conserva su código original y la cabecera Location
  • Los filtros de estado y longitud están justificados por muestras negativas
  • dir y vhost se documentan como modos distintos; vhost no se confunde con DNS
  • 429, 5xx sostenidos o degradación provocan parada, no evasión
  • Los candidatos se validan individualmente sin descargar datos ni probar credenciales
  • El informe separa observación, inferencia, falso positivo y riesgo contextual

La defensa no consiste en devolver el mismo código para todo. Retira copias y archivos innecesarios, aplica autorización server-side a cada recurso, limita el ritmo, registra patrones de rutas inexistentes y revisa virtual hosts antes de publicar. Las rutas no enlazadas siguen siendo accesibles si el servidor las entrega.

Glosario

Enumeración de contenido

Prueba sistemática de nombres candidatos para localizar rutas o archivos no enlazados por la interfaz.

Diccionario

Archivo con un candidato por línea que Gobuster combina con la URL o el dominio del laboratorio.

Virtual host

Sitio que comparte dirección y puerto con otros, pero que el servidor selecciona mediante el nombre solicitado.

Cabecera Host

Campo HTTP que identifica el nombre y puerto de destino y permite distinguir sitios alojados en un mismo servidor.

Soft 404

Respuesta que parece exitosa o redirige aunque el recurso solicitado no exista.

Respuesta wildcard

Respuesta genérica que el servidor devuelve para muchos nombres distintos y que genera falsos positivos.

Código de estado

Número HTTP de tres cifras que resume el resultado de una solicitud, sin demostrar por sí solo que exista un hallazgo.

Redirección

Respuesta 3xx que indica otra ubicación o una acción adicional mediante la cabecera Location.

Longitud de respuesta

Cantidad de bytes del cuerpo, útil para agrupar respuestas parecidas pero insuficiente como prueba aislada.

Allowlist

Conjunto explícito de valores que se conservan; en esta guía, códigos de estado que Gobuster debe mostrar.

Falso positivo

Resultado que parece distinto o relevante durante el barrido, pero no se confirma al revisar la respuesta.

Ver más guías
Gobuster desde cero: directorios, archivos y virtual hosts | Cubix Academia