Skip to content

Gobuster - Enumeración de Directorios y Subdominios

Gobuster es una herramienta de enumeración de alta velocidad escrita en Go, diseñada para realizar ataques de fuerza bruta contra directorios, archivos web, subdominios DNS, virtual hosts y buckets de almacenamiento en la nube. Su arquitectura multithreaded la convierte en una de las herramientas más rápidas para enumeración activa.

  • Multithreading configurable
  • Arquitectura eficiente en Go
  • Gestión optimizada de memoria
  • Procesamiento paralelo de solicitudes
  • dir: Enumeración de directorios y archivos
  • dns: Descubrimiento de subdominios
  • vhost: Detección de virtual hosts
  • s3: Enumeración de buckets S3
  • gcs: Búsqueda en Google Cloud Storage
  • tftp: Enumeración de servidores TFTP
  • fuzz: Fuzzing personalizado
  • Control de rate limiting
  • Manejo de redirects
  • Soporte para proxies
  • Headers HTTP personalizados
  • Autenticación básica
Terminal window
# Requisito: Go 1.21 o superior
go install github.com/OJ/gobuster/v3@latest
# Verificar instalación
gobuster version
Terminal window
# Descargar desde releases
wget https://github.com/OJ/gobuster/releases/latest/download/gobuster-linux-amd64.tar.gz
# Extraer y mover a PATH
tar -xzf gobuster-linux-amd64.tar.gz
sudo mv gobuster /usr/local/bin/
Terminal window
# Ejecutar con Docker
docker run --rm -it ghcr.io/oj/gobuster:latest
# Con volumen para wordlists
docker run --rm -v $(pwd):/app -it ghcr.io/oj/gobuster:latest dir -u https://example.com -w /app/wordlist.txt

Método 4: Compilación desde Código Fuente

Section titled “Método 4: Compilación desde Código Fuente”
Terminal window
git clone https://github.com/OJ/gobuster.git
cd gobuster
go mod tidy
go build -o gobuster
Terminal window
gobuster [modo] [opciones] -u [URL] -w [wordlist]
Terminal window
-h, --help Mostrar ayuda
-z, --no-progress No mostrar barra de progreso
-o, --output Archivo de salida
-q, --quiet No mostrar banner ni errores
-t, --threads Número de threads (por defecto: 10)
-v, --verbose Modo verbose
--delay Delay entre solicitudes
--timeout Timeout HTTP (por defecto: 10s)

Modo DIR - Enumeración de Directorios y Archivos

Section titled “Modo DIR - Enumeración de Directorios y Archivos”
Terminal window
gobuster dir -u <URL> -w <wordlist> [opciones]
Terminal window
-c, --cookies Cookies HTTP
-e, --expanded Mostrar URLs completas
-f, --add-slash Agregar slash al final
-k, --no-tls-validation Ignorar certificados SSL
-l, --include-length Incluir longitud de respuesta
-n, --no-status No mostrar códigos de estado
-P, --password Contraseña para autenticación básica
-p, --proxy Proxy HTTP (ej: http://127.0.0.1:8080)
-r, --follow-redirect Seguir redirects
-s, --status-codes Códigos de estado a mostrar (por defecto: 200,204,301,302,307,401,403)
-U, --username Usuario para autenticación básica
-x, --extensions Extensiones de archivo a buscar
-b, --status-codes-blacklist Códigos de estado a ignorar
Terminal window
# Enumeración básica de directorios
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt
# Con progreso verboso
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -v
Terminal window
# Buscar archivos PHP, HTML y TXT
gobuster dir -u https://example.com -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,html,txt
# Múltiples extensiones comunes
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -x php,asp,aspx,jsp,html,js,txt,pdf
Terminal window
# 50 threads para mayor velocidad
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -t 50
# Con timeout personalizado
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -t 20 --timeout 15s
Terminal window
# Autenticación básica
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -U admin -P password
# Con cookies de sesión
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -c "sessionid=abc123; csrftoken=xyz789"
Terminal window
# Usar Burp Suite como proxy
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -p http://127.0.0.1:8080
# Con proxy SOCKS
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -p socks5://127.0.0.1:9050
Terminal window
# Solo mostrar códigos específicos
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -s "200,204,301,302,307"
# Ignorar códigos específicos
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -b "404,403"
# Mostrar longitud de respuesta
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -l
Terminal window
gobuster dns -d <dominio> -w <wordlist> [opciones]
Terminal window
-d, --domain Dominio objetivo
-r, --resolver Servidor DNS personalizado
-c, --show-cname Mostrar registros CNAME
-i, --show-ips Mostrar direcciones IP
--wildcard Continuar aunque existan wildcards
--timeout Timeout DNS (por defecto: 1s)
Terminal window
# Búsqueda básica de subdominios
gobuster dns -d example.com -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
# Mostrar IPs y CNAMEs
gobuster dns -d example.com -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -i -c
Terminal window
# Usar Google DNS
gobuster dns -d example.com -w /usr/share/wordlists/subdomains.txt -r 8.8.8.8:53
# Múltiples resolvers
gobuster dns -d example.com -w /usr/share/wordlists/subdomains.txt -r 8.8.8.8:53,1.1.1.1:53
Terminal window
# Continuar aunque existan wildcards
gobuster dns -d example.com -w /usr/share/wordlists/subdomains.txt --wildcard
# Con timeout personalizado
gobuster dns -d example.com -w /usr/share/wordlists/subdomains.txt --timeout 2s
Terminal window
gobuster vhost -u <URL> -w <wordlist> [opciones]
Terminal window
--append-domain Agregar dominio base al final
--domain Dominio para prueba de virtual hosts
-r, --follow-redirect Seguir redirects
Terminal window
# Búsqueda básica de virtual hosts
gobuster vhost -u https://example.com -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
# Agregar dominio base
gobuster vhost -u https://example.com -w /usr/share/wordlists/subdomains.txt --append-domain
# Con dominio específico
gobuster vhost -u https://example.com -w /usr/share/wordlists/subdomains.txt --domain example.com
Terminal window
gobuster s3 -w <wordlist> [opciones]
Terminal window
# Búsqueda de buckets S3
gobuster s3 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
# Con múltiples threads
gobuster s3 -w /usr/share/wordlists/bucket-names.txt -t 50
# Buscar buckets de empresa específica
gobuster s3 -w /usr/share/wordlists/company-names.txt
Terminal window
gobuster fuzz -u <URL con FUZZ> -w <wordlist> [opciones]
Terminal window
# Fuzzing de parámetros GET
gobuster fuzz -u "https://example.com/api/v1/users?id=FUZZ" -w /usr/share/seclists/Fuzzing/numbers.txt
# Fuzzing en path
gobuster fuzz -u "https://example.com/api/FUZZ/data" -w /usr/share/wordlists/api-endpoints.txt
# Fuzzing de headers
gobuster fuzz -u "https://example.com/" -w /usr/share/wordlists/headers.txt -H "X-FUZZ: test"
Terminal window
# SecLists (Recomendado)
/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
/usr/share/seclists/Discovery/Web-Content/common.txt
/usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt
# DirBuster wordlists
/usr/share/wordlists/dirb/common.txt
/usr/share/wordlists/dirb/big.txt
/usr/share/wordlists/dirb/directory-list-2.3-medium.txt
# Especializadas
/usr/share/seclists/Discovery/Web-Content/apache.txt
/usr/share/seclists/Discovery/Web-Content/nginx.txt
/usr/share/seclists/Discovery/Web-Content/iis.txt
Terminal window
# SecLists DNS
/usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
/usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt
/usr/share/seclists/Discovery/DNS/fierce-hostlist.txt
# Especializadas
/usr/share/seclists/Discovery/DNS/dns-Jhaddix.txt
/usr/share/seclists/Discovery/DNS/namelist.txt
#!/bin/bash
TARGET="$1"
WORDLIST_DIR="/usr/share/seclists"
if [ -z "$TARGET" ]; then
echo "Uso: $0 <URL_objetivo>"
exit 1
fi
echo "[+] Iniciando enumeración completa de $TARGET"
mkdir -p "gobuster_$TARGET"
cd "gobuster_$TARGET"
# Enumeración de directorios básica
echo "[+] Enumeración de directorios básica..."
gobuster dir -u "$TARGET" -w "$WORDLIST_DIR/Discovery/Web-Content/common.txt" -o dirs_common.txt -t 20
# Enumeración de directorios extensa
echo "[+] Enumeración de directorios extensa..."
gobuster dir -u "$TARGET" -w "$WORDLIST_DIR/Discovery/Web-Content/directory-list-2.3-medium.txt" -o dirs_medium.txt -t 20
# Búsqueda de archivos con extensiones
echo "[+] Búsqueda de archivos con extensiones..."
gobuster dir -u "$TARGET" -w "$WORDLIST_DIR/Discovery/Web-Content/common.txt" -x php,html,txt,js,asp,aspx,jsp -o files_common.txt -t 20
# Enumeración de subdominios (si es dominio)
DOMAIN=$(echo "$TARGET" | sed 's|https\?://||' | cut -d'/' -f1)
echo "[+] Enumeración de subdominios para $DOMAIN..."
gobuster dns -d "$DOMAIN" -w "$WORDLIST_DIR/Discovery/DNS/subdomains-top1million-5000.txt" -o subdomains.txt -t 20
# Virtual hosts
echo "[+] Búsqueda de virtual hosts..."
gobuster vhost -u "$TARGET" -w "$WORDLIST_DIR/Discovery/DNS/subdomains-top1million-5000.txt" -o vhosts.txt -t 20
echo "[+] Enumeración completada. Resultados en directorio gobuster_$TARGET"
#!/bin/bash
TARGETS_FILE="$1"
THREADS=20
if [ ! -f "$TARGETS_FILE" ]; then
echo "Uso: $0 <archivo_de_objetivos>"
exit 1
fi
while read -r target; do
echo "[+] Procesando $target"
# Crear directorio para resultados
safe_name=$(echo "$target" | tr '/:' '_')
mkdir -p "results_$safe_name"
# Enumeración básica
gobuster dir -u "$target" \
-w /usr/share/wordlists/dirb/common.txt \
-o "results_$safe_name/directories.txt" \
-t "$THREADS" \
-q
echo "[+] Completado: $target"
done < "$TARGETS_FILE"
Terminal window
# Etapa 1: Reconocimiento básico
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -s "200,204,301,302"
# Etapa 2: Análisis de resultados y enumeración específica
gobuster dir -u https://example.com/admin -w /usr/share/seclists/Discovery/Web-Content/admin-panels.txt
# Etapa 3: Búsqueda de archivos sensibles
gobuster dir -u https://example.com -w /usr/share/seclists/Discovery/Web-Content/web-extensions.txt -x config,backup,old,tmp
Terminal window
# Usar resultados de Nmap para objetivos específicos
nmap -p 80,443 --open 192.168.1.0/24 | grep "Nmap scan report" | awk '{print $5}' > targets.txt
while read target; do
gobuster dir -u "http://$target" -w /usr/share/wordlists/dirb/common.txt -o "results_$target.txt"
done < targets.txt
Terminal window
# Configuración optimizada para redes rápidas
gobuster dir -u https://example.com \
-w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt \
-t 100 \
--timeout 10s \
--delay 100ms \
-o results.txt
# Para objetivos lentos o con rate limiting
gobuster dir -u https://example.com \
-w /usr/share/wordlists/dirb/common.txt \
-t 5 \
--timeout 30s \
--delay 1s \
-o results.txt
Terminal window
# Obtener tamaños únicos
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -l | awk '{print $2}' | sort -u
# Filtrar respuestas pequeñas (posibles falsos positivos)
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -l | awk '$2 > 1000'
#!/bin/bash
RESULTS_FILE="$1"
echo "[+] Análisis de resultados de Gobuster"
echo "======================================="
# Contar total de hallazgos
echo "Total de URLs encontradas: $(wc -l < "$RESULTS_FILE")"
# Agrupar por código de estado
echo -e "\nCódigos de estado encontrados:"
grep -oE 'Status: [0-9]{3}' "$RESULTS_FILE" | sort | uniq -c
# Encontrar archivos interesantes
echo -e "\nArchivos potencialmente interesantes:"
grep -E '\.(config|backup|old|tmp|bak|sql|log)' "$RESULTS_FILE" || echo "Ninguno encontrado"
# Directorios administrativos
echo -e "\nDirectorios administrativos:"
grep -iE '/(admin|administrator|panel|control|manage)' "$RESULTS_FILE" || echo "Ninguno encontrado"
Terminal window
# Delay entre solicitudes
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt --delay 2s -t 5
# Timeout largo para evitar detección
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt --timeout 30s -t 3
Terminal window
# User-Agent personalizado
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
# Headers adicionales para evasión
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt \
-H "User-Agent: GoogleBot/2.1" \
-H "X-Forwarded-For: 127.0.0.1" \
-H "X-Real-IP: 127.0.0.1"
Terminal window
# Proxy HTTP
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -p http://proxy.example.com:8080
# Cadena de proxies con herramientas externas
proxychains gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt

Troubleshooting y Resolución de Problemas

Section titled “Troubleshooting y Resolución de Problemas”
Terminal window
# Ignorar errores de certificado
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -k
# Error específico de certificado
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt --no-tls-validation
Terminal window
# Reducir threads y agregar delay
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -t 1 --delay 5s
# Cambiar User-Agent
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -H "User-Agent: curl/7.68.0"
Terminal window
# Investigar respuesta típica 404
curl -I https://example.com/nonexistentfile123456789
# Filtrar por tamaño si es necesario
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -l | grep -v "Size: 1234"
Terminal window
# Configurar Gobuster para usar Burp como proxy
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -p http://127.0.0.1:8080
# En Burp Suite, configurar intercepción para analizar solicitudes
Terminal window
# Usar resultados de Nmap para objetivos
nmap -p 80,443 --open target_network/24 | grep "Nmap scan report" | awk '{print $5}' | while read host; do
echo "[+] Enumerando $host"
gobuster dir -u "http://$host" -w /usr/share/wordlists/dirb/common.txt -o "enum_$host.txt"
done
Terminal window
# Primero enumerar con Gobuster, luego escanear con Nuclei
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -o found_dirs.txt
# Extraer URLs y escanear con Nuclei
grep "Status: 200" found_dirs.txt | awk '{print $1}' | nuclei -t /path/to/templates/
  • ✅ Verificar conectividad al objetivo
  • ✅ Preparar wordlists específicas al contexto
  • ✅ Configurar herramientas de monitoreo (Wireshark, tcpdump)
  • ✅ Establecer baseline del comportamiento normal
  • ✅ Comenzar con wordlists pequeñas y específicas
  • ✅ Incrementar threads gradualmente
  • ✅ Monitorear logs del objetivo si es posible
  • ✅ Documentar hallazgos interesantes inmediatamente
  • ✅ Validar manualmente hallazgos importantes
  • ✅ Correlacionar resultados con otras herramientas
  • ✅ Priorizar objetivos por impacto potencial
  • ✅ Preparar lista de pruebas manuales
  • ✅ Obtener autorización explícita antes de enumerar
  • ✅ Respetar rate limits para evitar DoS accidental
  • ✅ Documentar todas las actividades realizadas
  • ✅ Reportar hallazgos críticos inmediatamente
Terminal window
# Fase 1: Enumeración básica
gobuster dir -u https://app.example.com -w /usr/share/wordlists/dirb/common.txt -s "200,204,301,302,403"
# Fase 2: Búsqueda de archivos administrativos
gobuster dir -u https://app.example.com -w /usr/share/seclists/Discovery/Web-Content/admin-panels.txt
# Fase 3: Archivos de configuración
gobuster dir -u https://app.example.com -w /usr/share/seclists/Discovery/Web-Content/web-all.txt -x config,conf,cfg,xml,properties
Terminal window
# Subdominios principales
gobuster dns -d example.com -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -i
# Virtual hosts en servidor web
gobuster vhost -u https://example.com -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
# Buckets S3 relacionados con la organización
gobuster s3 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt
Terminal window
# Enumeración de endpoints de API
gobuster dir -u https://api.example.com/v1 -w /usr/share/seclists/Discovery/Web-Content/api/api-endpoints.txt
# Versiones de API
gobuster fuzz -u "https://api.example.com/vFUZZ/users" -w /usr/share/seclists/Fuzzing/versions.txt
# Recursos específicos
gobuster dir -u https://api.example.com/v1 -w /usr/share/seclists/Discovery/Web-Content/api/objects.txt -x json,xml

Gobuster es una herramienta esencial en el arsenal de cualquier pentester o investigador de seguridad. Su velocidad, flexibilidad y múltiples modos de operación la convierten en la opción ideal para enumeración activa en diversas fases de una auditoría de seguridad.