Mapea endpoints ocultos de tu web como un Pro: Katana, httpx y xnLinkFinder (guía turbo)

¿Quieres descubrir endpoints, APIs y rutas JS que tus navegadores no muestran a simple vista? En esta guía exprés te enseño un workflow de crawling y verificación con tres herramientas potentes: Katana, httpx y xnLinkFinder. Úsalo en tus propios proyectos o donde tengas permiso. ¡A darle!

⚠️ Aviso ético/legal: usa estas técnicas solo en sistemas tuyos o con autorización explícita. Respeta la ley, términos de uso y buenas prácticas. El objetivo es mejorar la seguridad, no abusar de ella.

🧰 Herramientas

  • Katana: crawler ultrarrápido que encuentra URLs (incluye referencias desde JS dinámico).
  • httpx: verificador HTTP masivo: estados, coincidencias de texto/regex, encabezados, etc.
  • xnLinkFinder: extrae endpoints a partir de URLs JS/HTML con recursividad controlada.

Mantén las herramientas actualizadas desde sus repos oficiales (Go/Python) y ejecuta las pruebas con límites responsables.

🗺️ Flujo completo (seguro y replicable)

Sustituye https://example.com por tu dominio autorizado.

1) Crawl inicial con Katana

katana -u "https://example.com" -headless -no-sandbox \
  -headless-options "--disable-setuid-sandbox" \
  -timeout 30 -delay 2 -o js_url_01.txt
  • -headless: ejecuta un motor sin UI (ideal para apps SPA).
  • -delay: ayuda a no saturar el target.
  • Salida: js_url_01.txt con rutas y assets (incluye JS).

2) Forzar descubrimiento en JavaScript

katana -u "https://example.com" -js-crawl -headless \
  -timeout 30 -delay 2 -o js_url_02.txt

-js-crawl evalúa JS para hallar rutas que aparecen de forma dinámica.

cat js_url_01.txt js_url_02.txt | sort -u > js_url.txt

3) Verificación rápida con httpx

a) APIs que responden 200 y contienen “/api”

httpx -l js_url.txt -mc 200 -ms '/api'

b) Extraer patrones tipo /api/... con regex

httpx -l js_url.txt -mc 200 -er '/api/[a-zA-Z0-9/_-]+'

c) Pistas de llamadas AJAX clásicas

httpx -l js_url.txt -mc 200 -ms '$.ajax('

Tip: añade -silent para salida limpia, ajusta -threads y -retries según estabilidad.

4) Enumerar endpoints con xnLinkFinder

xnLinkFinder -i js_url.txt -o endpoints_cread.txt -d 2 -sf example.com
  • -d 2: recursividad controlada (ajústala con cuidado).
  • -sf: scope filter para permanecer dentro de tu dominio.

🧪 ¿Qué es $.ajax( y por qué “se puede cambiar”?

$.ajax( es el método de jQuery para peticiones HTTP asíncronas. Muchas apps modernas ya no usan jQuery y migran a alternativas: Fetch API, Axios o XMLHttpRequest (XHR). Por eso, si no encuentras $.ajax(, amplía el radar:

Buscar equivalentes modernos con httpx

Fetch API

httpx -l js_url.txt -mc 200 -ms 'fetch('

Axios

httpx -l js_url.txt -mc 200 -ms 'axios.'
httpx -l js_url.txt -mc 200 -er 'axios\.(get|post|put|delete|request)\('

XHR clásico

httpx -l js_url.txt -mc 200 -ms 'XMLHttpRequest'

🧭 ¿Qué más conviene buscar?

  1. Rutas de API / versionado
    httpx -l js_url.txt -mc 200 -ms '/api/'
    httpx -l js_url.txt -mc 200 -ms '/v1/'
    httpx -l js_url.txt -mc 200 -er '/(api|v[0-9]+)[/\\w\\.-]*'
  2. Palabras clave sensibles (solo en tus sistemas)
    httpx -l js_url.txt -mc 200 -ms 'token'
    httpx -l js_url.txt -mc 200 -ms 'auth'
    httpx -l js_url.txt -mc 200 -ms 'bearer'
    httpx -l js_url.txt -mc 200 -ms 'apikey'
  3. Indicadores de endpoints REST
    httpx -l js_url.txt -mc 200 -er '/(login|logout|signup|profile|cart|search|orders|payment)(/|$)'
  4. Pistas en archivos JS/Map
    httpx -l js_url.txt -mc 200 -ms 'sourceMappingURL='
    httpx -l js_url.txt -mc 200 -er '\\.map$'

    Los *.map ayudan a depurar, pero pueden filtrar nombres de funciones o rutas internas. Revísalos para endurecer tu app.

  5. Snippets JSON y GraphQL
    httpx -l js_url.txt -mc 200 -ms '{'
    httpx -l js_url.txt -mc 200 -ms 'GraphQL'
    httpx -l js_url.txt -mc 200 -ms '/graphql'
  6. Cabeceras y CORS
    httpx -l js_url.txt -mc 200 -fc 'Access-Control-Allow-Origin'

🏎️ Consejos pro

  • Respeta límites: usa -delay, controla -threads y monitorea 429.
  • Scope claro: filtros de dominio (-sf) y listas allow/deny.
  • Guarda evidencias: exporta TXT/CSV y versiona hallazgos.
  • Automatiza: empaqueta comandos en scripts con logs y timestamps.
  • Valida: prioriza por código HTTP, tipo de contenido y semántica (no todo match es útil).

✅ Checklist final

  • Permiso por escrito / pruebas en tu dominio.
  • Crawl con Katana (normal + -js-crawl).
  • Depurar y unir listas (sort -u).
  • httpx para validar y buscar patrones (texto y regex).
  • xnLinkFinder para enriquecer endpoints.
  • Revisar CORS, tokens, .map, GraphQL, versionado.
  • Documentar y corregir hallazgos en tu app.

🎯 Conclusión

Con Katana, httpx y xnLinkFinder puedes mapear el universo de endpoints de tu aplicación y detectar superficies de ataque antes que nadie. Ajusta las búsquedas (de $.ajax( a fetch, Axios y XHR), mantén el scope ético y convierte tus hallazgos en mejoras reales de seguridad.

💡 BONUS: Script Bash para automatizar el flujo

Guárdalo como creadpag.sh y ejecútalo con bash creadpag.sh https://example.com (usa tu dominio autorizado).

#!/usr/bin/env bash
set -euo pipefail

TARGET="${1:-https://example.com}"
TS="$(date +%Y%m%d_%H%M%S)"
OUTDIR="scan_${TS}"
mkdir -p "$OUTDIR"

echo "[*] Objetivo: $TARGET"
echo "[*] Resultados en: $OUTDIR"

katana -u "$TARGET" -headless -no-sandbox \
  -headless-options "--disable-setuid-sandbox" \
  -timeout 30 -delay 2 -o "$OUTDIR/js_url_01.txt"

katana -u "$TARGET" -js-crawl -headless \
  -timeout 30 -delay 2 -o "$OUTDIR/js_url_02.txt"

cat "$OUTDIR/js_url_01.txt" "$OUTDIR/js_url_02.txt" | sort -u > "$OUTDIR/js_url.txt"

# Validaciones y patrones comunes
httpx -l "$OUTDIR/js_url.txt" -mc 200 -ms '/api' | tee "$OUTDIR/api_hits.txt"
httpx -l "$OUTDIR/js_url.txt" -mc 200 -er '/api/[a-zA-Z0-9/_-]+' | tee "$OUTDIR/api_regex.txt"
httpx -l "$OUTDIR/js_url.txt" -mc 200 -ms '$.ajax(' | tee "$OUTDIR/jquery_ajax.txt"
httpx -l "$OUTDIR/js_url.txt" -mc 200 -ms 'fetch(' | tee "$OUTDIR/fetch_hits.txt"
httpx -l "$OUTDIR/js_url.txt" -mc 200 -ms 'axios.' | tee "$OUTDIR/axios_hits.txt"
httpx -l "$OUTDIR/js_url.txt" -mc 200 -er 'axios\.(get|post|put|delete|request)\(' | tee "$OUTDIR/axios_regex.txt"
httpx -l "$OUTDIR/js_url.txt" -mc 200 -ms 'XMLHttpRequest' | tee "$OUTDIR/xhr_hits.txt"
httpx -l "$OUTDIR/js_url.txt" -mc 200 -ms 'sourceMappingURL=' | tee "$OUTDIR/sourcemaps.txt"
httpx -l "$OUTDIR/js_url.txt" -mc 200 -er '\.map$' | tee "$OUTDIR/map_files.txt"
httpx -l "$OUTDIR/js_url.txt" -mc 200 -ms '/graphql' | tee "$OUTDIR/graphql_hits.txt"
httpx -l "$OUTDIR/js_url.txt" -mc 200 -fc 'Access-Control-Allow-Origin' | tee "$OUTDIR/cors_headers.txt"

# Enriquecer endpoints
xnLinkFinder -i "$OUTDIR/js_url.txt" -o "$OUTDIR/endpoints_cread.txt" -d 2 -sf "$(echo "$TARGET" | awk -F/ '{print $3}')"

echo "[✓] Listo. Revisa el directorio $OUTDIR"
¿Te gustó esta guía? Guarda este post, compártelo con tu equipo y cuéntame en comentarios qué otras búsquedas o patrones te funcionan mejor. ¡A fortalecer la seguridad con cabeza y energía! ⚡
Artículo Anterior Artículo Siguiente