Saltearse al contenido

Descubrimiento de contenido

Una web muestra solo lo que quiere que veas; el descubrimiento de contenido encuentra lo que no enlaza: directorios ocultos, paneles de administración, ficheros de backup, endpoints de API, versiones antiguas, .git/, archivos de configuración. Es enumeración activa sobre HTTP: pruebas rutas de un diccionario contra el servidor y observas qué responde. Lo que no está enlazado suele ser lo más interesante.

Pides rutas candidatas (/admin, /backup.zip, /api/v1) y clasificas por el código de respuesta: 200 (existe), 301/302 (redirige), 403 (existe pero prohibido — ¡interesante!), 404 (no existe). El 403 es oro: confirma que el recurso está ahí.

# ffuf (rápido, flexible)
ffuf -w wordlist.txt -u https://target/FUZZ -mc 200,301,302,403 -o out.json
# feroxbuster (recursivo por defecto)
feroxbuster -u https://target -w wordlist.txt -x php,bak,zip,old,txt
# gobuster
gobuster dir -u https://target -w wordlist.txt -x php,html,bak

Filtra ruido por tamaño/palabras cuando el 404 devuelve 200 (soft-404): -fs <tamaño> / -fw <palabras>.

# backups y fuentes
.bak .old .zip .tar.gz .sql .swp index.php~ config.php.bak
# control de versiones y configs expuestos
/.git/ /.svn/ /.env /.htaccess /web.config /wp-config.php.bak
# descubrir .git/ y reconstruir código (ver fund-git)
curl -s https://target/.git/HEAD
SecLists: Discovery/Web-Content/ (raft-*, directory-list-*, common.txt)
# específicas por tecnología (si hiciste fingerprint)
Discovery/Web-Content/CMS/ (wordpress, joomla...)
# generadas del propio sitio
cewl https://target -w custom.txt # palabras de la web como diccionario

No todo es fuerza bruta; el sitio ya revela rutas:

# extraer endpoints del JavaScript (SPA, APIs)
katana -u https://target -jc # crawling + JS
# linkfinder / gau / waymore: URLs históricas y de JS
gau target.com ; waymore -i target.com # (ver recon-wayback)
# robots.txt y sitemap.xml revelan rutas que "no querían" indexar
curl -s https://target/robots.txt https://target/sitemap.xml
# documentación expuesta
/swagger.json /openapi.json /api-docs /graphql
# versiones y rutas de API por fuzzing con wordlist de API
ffuf -w api-wordlist.txt -u https://target/api/FUZZ

Reducir hallazgos: no dejar backups/configs en el webroot, bloquear acceso a .git//.env/.svn, eliminar paneles y versiones antiguas, devolver 404 consistentes (no filtrar existencia por 403/tiempos), y vigilar logs por fuzzing (ráfagas de 404/403). WAF con rate-limit frena el bruteforce masivo.

  • Fuzzing de directorios con buena wordlist (SecLists)
  • Fuzzing de ficheros por extensión (bak, zip, sql, env, old)
  • Filtrar soft-404 por tamaño/palabras
  • .git/, .env, .svn, configs expuestos
  • robots.txt y sitemap.xml revisados
  • Endpoints extraídos del JS (katana/linkfinder)
  • URLs históricas (gau/waymore)
  • Documentación y rutas de API (swagger/graphql)