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.
sudo apt updatesudo apt install -y gobuster seclistsgobuster --versiongobuster dir --helptest -r /usr/share/seclists/Discovery/Web-Content/common.txt && echo 'Diccionario disponible'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 --helpgo 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 --helpLas 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.
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"@('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.
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/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 -u http://192.0.2.10/ -w "$HOME/cubix-gobuster-dir.txt" -t 10 --delay 100ms -o "$HOME/gobuster-dir-base.txt"/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 -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 -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 -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"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 -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 -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.