katana: crawling y descubrimiento de endpoints para pentests web
katana · MIT
katana hace crawl de una aplicación web y devuelve las URLs, endpoints y parámetros que encuentra. A diferencia de las fuentes pasivas de URL (gau, waybackurls), ve la aplicación tal como existe ahora, incluyendo rutas que nunca se archivaron — y, en modo headless, rutas que solo existen después de que se ejecuta el JavaScript.
Instalación
go install -v github.com/projectdiscovery/katana/cmd/katana@latest El modo headless necesita un Chromium disponible; katana descargará uno en el primer uso.
Comandos principales
# crawl estándar
katana -u https://example.com -silent
# headless — obligatorio para SPAs
katana -u https://example.com -headless -silent
# profundidad, alcance y parsing de JS
katana -u https://example.com -d 3 -jc -kf all -silent
# mantenlo dentro del engagement
katana -u https://example.com -crawl-scope example.com -silent
# JSONL con el detalle de la solicitud
katana -u https://example.com -jsonl -o crawl.jsonl -field url,method -jc parsea archivos JavaScript en busca de endpoints. -kf all sigue archivos conocidos como robots.txt y sitemap.xml. -d es la profundidad del crawl — 3 suele bastar; 5 en una app grande se ejecutará durante mucho tiempo.
Salida
{"timestamp":"2026-08-29T10:07:00Z","request":{"method":"GET",
"endpoint":"https://example.com/api/v2/users?id=1"},
"response":{"status_code":200}} Dónde encaja en Tandera
katana aparece en tres flujos y dos fases — la única herramienta del catálogo agendada tan ampliamente. Se ejecuta en fingerprint para establecer la superficie de URLs, y de nuevo en enrich para profundizarla una vez que otras fuentes han contribuido.
Su salida es la entrada de varias etapas de analyze: linkfinder y jxscout minan el JavaScript que recupera, arjun hace fuzzing de los parámetros que encontró, y unfurl descompone el corpus de URLs en hostnames, paths y nombres de parámetro.
Uso en un pentest
Usa headless para cualquier cosa moderna. Un front-end React o Vue devuelve casi nada a un crawler no headless — las rutas solo existen después de que el bundle se ejecuta. Si katana devuelve 12 URLs para una aplicación que ves que es grande, esa es la razón.
Delimita el crawl explícitamente. -crawl-scope evita que se vaya a una CDN, un proveedor de pagos o un host de widget de terceros. Hacer crawl de esos está fuera de alcance y, según el objetivo, es ilegal.
Haz crawl antes de hacer fuzzing. Los nombres de parámetro que katana recupera valen más que cualquier wordlist genérica, porque son el vocabulario de la propia aplicación.
katana -u https://example.com -headless -jc -d 3 -silent
| unfurl -u paths | sort -u > paths.txt