⚠️ 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?
- 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\\.-]*'
- 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'
- Indicadores de endpoints REST
httpx -l js_url.txt -mc 200 -er '/(login|logout|signup|profile|cart|search|orders|payment)(/|$)'
- 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. - 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'
- 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 monitorea429
. - 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"