gau: extrayendo URLs archivadas de datasets públicos
gau (getallurls) · MIT
gau obtiene URLs conocidas de un dominio desde archivos públicos — Wayback Machine, Common Crawl, URLScan, Open Threat Exchange. No envía nada al objetivo. Lo que devuelve es un registro histórico de URLs que esos servicios observaron, que rutinariamente incluye endpoints que la aplicación actual ya no referencia.
Instalación
go install -v github.com/lc/gau/v2/cmd/gau@latest Comandos principales
# todo lo que los archivos conocen
gau example.com
# incluye subdominios
gau --subs example.com
# filtra a extensiones interesantes
gau --subs example.com --blacklist png,jpg,gif,css,woff,svg,ico
# restringe por fecha y proveedor
gau --from 202401 --to 202608 --providers wayback,commoncrawl example.com
# JSON
gau --json --subs example.com > gau.jsonl Sin una blacklist te ahogarás en assets estáticos. Filtra siempre.
Salida
Una URL por línea por defecto:
https://example.com/api/v1/user?id=1
https://example.com/admin/backup.sql
https://example.com/old/login.php Dónde encaja en Tandera
gau se ejecuta en la fase de enrich de recon_web_lite y recon_web_full, junto a waybackurls. Ejecutar ambos es intencional — consultan proveedores que se solapan pero no son idénticos, y la unión es mayor que cualquiera de ellos.
Su salida se une al crawl en vivo de katana para formar el corpus de URLs que unfurl, arjun y las etapas de análisis de parámetros consumen.
Uso en un pentest
Las URLs históricas son el punto. /old/login.php devolviendo 404 hoy es irrelevante. /old/login.php devolviendo 200 es un endpoint olvidado fuera del release actual, que es exactamente el tipo de cosa que no se ha parcheado. Re-sondea siempre el corpus:
gau --subs example.com --blacklist png,jpg,css,woff
| httpx -silent -status-code -title -mc 200,401,403,500 Haz grep del corpus antes de sondearlo. Las URLs archivadas a menudo contienen parámetros con valores reales — tokens, correos, IDs internos — capturados cuando se hizo crawl de la página. Busca key=, token=, password=, api_key= en la lista en bruto.
Cuida el límite de alcance. --subs extrae todo subdominio que los archivos conocen, incluidos los de fuera del engagement. Filtra contra tu lista de alcance antes de sondear nada.