Cheatsheet de reconocimiento web
Esta referencia empieza con un dominio, hostname, IP o URL ya atribuido. Los comandos abren preguntas concretas. Continúa en la página enlazada, conserva el output y utiliza la checklist de reconocimiento web antes de cerrar.
Registro, DNS y certificados
Sección titulada «Registro, DNS y certificados»curl --silent --show-error \ 'https://rdap.org/domain/DOMAIN' | jq .whois DOMAINdig DOMAIN Adig DOMAIN AAAAdig DOMAIN NSdig DOMAIN MXdig DOMAIN TXTdig FQDN CNAMEcurl --silent --show-error \ 'https://crt.sh/?q=%25.DOMAIN&output=json' | jq -r '.[].name_value' | tr '\r' '\n' | sed 's/^\\*\\.//' | sort -uLa información de dominios desarrolla procedencia, delegación, RDAP, WHOIS, DNS y Certificate Transparency.
Puertos y servicios web
Sección titulada «Puertos y servicios web»nmap -sV -p 80,443,8000,8080,8443 \ --script http-title,http-headers,sdoc-cert \ TARGET_IPLos puertos conocidos son una primera selección, no un inventario completo. Nmap explica descubrimiento, detección de versiones, NSE, output y cobertura TCP.
TCP, TLS y HTTP manual
Sección titulada «TCP, TLS y HTTP manual»printf 'GET / HTTP/1.1\nHost: FQDN\nConnection: close\n\n' | ncat -nvC TARGET_IP PORTopenssl s_client \ -connect TARGET_IP:PORT \ -servername FQDN \ -showcerts \ -verify_return_errorcurl --verbose \ --dump-header response.headers \ --output response.body \ BASE_URL/ \ 2>connection.tracecurl --verbose \ --resolve FQDN:443:TARGET_IP \ https://FQDN/Consulta interacción manual con HTTP y TLS para destinos de petición, redirecciones, sesiones y diagnóstico por capa.
Redirecciones, cabeceras y cookies
Sección titulada «Redirecciones, cabeceras y cookies»curl --include \ --output response.body \ BASE_URL/curl --location \ --max-redirs 5 \ --dump-header redirect-chain.headers \ --output final.body \ BASE_URL/curl --cookie-jar session.cookies BASE_URL/logincurl --cookie session.cookies BASE_URL/accountLos ficheros de cookies pueden contener sesiones. Sanea su contenido antes de incorporarlo a notas o evidencias compartidas.
Hosts virtuales
Sección titulada «Hosts virtuales»curl --silent \ --dump-header default.headers \ --output default.body \ http://TARGET_IP/curl --verbose \ --resolve FQDN:443:TARGET_IP \ https://FQDN/ffuf -w VHOST_LIST \ -u 'https://TARGET_IP/' \ -H 'Host: FUZZ.DOMAIN' \ -mc all \ -rate 20 \ -of json \ -o evidence/ffuf-vhosts.jsonLa página de hosts virtuales separa DNS, SNI y autoridad HTTP y explica cómo filtrar la respuesta por defecto.
Fingerprinting
Sección titulada «Fingerprinting»curl --include \ --output response.body \ BASE_URL/whatweb --verbose BASE_URL/nmap -sV -p PORT \ --script http-title,http-headers,http-server-header,sdoc-cert \ TARGET_IPwafw00f BASE_URL/El fingerprinting web exige correlacionar varias capas. Una firma no demuestra versión, pertenencia ni vulnerabilidad.
Robots, sitemaps y well-known
Sección titulada «Robots, sitemaps y well-known»curl --silent --show-error BASE_URL/robots.txtcurl --silent --show-error BASE_URL/sitemap.xmlcurl --silent --show-error BASE_URL/.well-known/security.txtcurl --silent --show-error BASE_URL/.well-known/openid-configurationContinúa en robots, sitemaps y rutas conocidas para interpretar cada formato según su estándar.
Crawling
Sección titulada «Crawling»katana -u BASE_URL/ \ -d 3 \ -jc \ -kf all \ -j \ -o evidence/katana.jsonljq -r 'select(.request.endpoint != null) | .request.endpoint' \ evidence/katana.jsonl | sort -uLa estructura exacta del JSONL depende de la versión. Comprueba una línea antes de automatizar la extracción. Crawling desarrolla scope, sesiones, normalización, JavaScript y modo headless.
Descubrimiento de contenido
Sección titulada «Descubrimiento de contenido»ffuf -w WORDLIST \ -u 'BASE_URL/FUZZ' \ -mc all \ -rate 20 \ -t 10 \ -timeout 10 \ -of json \ -o evidence/ffuf-content.jsongobuster dir \ -u BASE_URL/ \ -w WORDLIST \ -x php,txt,bak \ -l \ -o evidence/gobuster-content.txtferoxbuster \ --url BASE_URL/ \ --wordlist WORDLIST \ --depth 2 \ --rate-limit 15 \ --time-limit 15m \ --json \ --output evidence/feroxbuster.jsonLa página de descubrimiento de contenido explica respuestas de referencia, criterios de selección, filtros, extensiones, recursión y falsos negativos.
Perfiles controlados
Sección titulada «Perfiles controlados»Estos perfiles amplían los ejemplos mínimos. BASELINE_SIZE procede de varias respuestas negativas. COOKIE_VALUE representa una sesión obtenida por el procedimiento previsto para la evaluación.
gobuster dir \ --url BASE_URL/ \ --wordlist WORDLIST \ --threads 12 \ --delay 150ms \ --timeout 10s \ --retry \ --retry-attempts 1 \ --cookies 'SESSION=COOKIE_VALUE' \ --exclude-length BASELINE_SIZE \ --output evidence/gobuster-authenticated.txtSeñal: candidatos que difieren de la longitud negativa dentro de la sesión. Límite: la espera se aplica por hilo y no constituye un límite global de peticiones. Gobuster en el flujo de trabajo.
ffuf -w WORDLIST \ -u 'BASE_URL/FUZZ' \ -mc all \ -t 10 \ -rate 20 \ -p 0.1-0.4 \ -timeout 10 \ -maxtime 900 \ -sa \ -audit-log evidence/ffuf.audit \ -json > evidence/ffuf.jsonlSeñal: resultados parciales en JSONL y decisiones de auditoría. Límite: -sa puede detener la ejecución ante una proporción alta de 403. ffuf en el workflow.
feroxbuster \ --url BASE_URL/ \ --wordlist WORDLIST \ --depth 2 \ --threads 8 \ --scan-limit 2 \ --rate-limit 15 \ --timeout 10 \ --time-limit 15m \ --json \ --output evidence/feroxbuster.jsonSeñal: recursos y estadísticas en el mismo artefacto. Límite: autofiltrado, extracción de enlaces y recursión añaden peticiones que no aparecen en la wordlist. Feroxbuster en el workflow.
Buscadores y archivos históricos
Sección titulada «Buscadores y archivos históricos»site:DOMAINsite:DOMAIN filetype:pdfsite:DOMAIN inurl:adminsite:DOMAIN ext:env OR ext:bak OR ext:oldcurl --silent --show-error \ 'https://web.archive.org/cdx/search/cdx?url=DOMAIN/*&output=json&fl=timestamp,original,statuscode,mimetype,digest&filter=statuscode:200&collapse=digest' \ > evidence/wayback-cdx.jsonConsulta buscadores y archivos históricos para procedencia, captura, validación actual y deduplicación.
Pipeline mínimo
Sección titulada «Pipeline mínimo»subfinder -d DOMAIN -silent -o 01-candidates.txthttpx -l 01-candidates.txt \ -threads 20 \ -rate-limit 25 \ -timeout 10 \ -retries 1 \ -sc \ -title \ -server \ -td \ -ip \ -cname \ -location \ -include-chain \ -json \ -o 02-http.jsonljq -r 'select(.url != null) | .url' 02-http.jsonl | sort -u > 03-base-urls.txt
katana -list 03-base-urls.txt \ -crawl-scope '^https?://([A-Za-z0-9-]+\.)*DOMAIN(?::[0-9]+)?(?:/|$)' \ -d 3 \ -concurrency 5 \ -parallelism 2 \ -rate-limit 20 \ -host-rate-limit 5 \ -timeout 10 \ -retry 1 \ -jc \ -kf all \ -jsonl \ -o 04-crawl.jsonlAutomatización del reconocimiento web explica los controles de HTTPX y el acceso externo que puede producir el clasificador de páginas al generar JSON. La etapa de crawling desarrolla el scope, los límites por host y la reanudación. Una ausencia en HTTP no debe borrar el candidato original.
Evidencia mínima
Sección titulada «Evidencia mínima»evidence/├── commands.log├── tool-versions.txt├── 01-candidates.txt├── 02-http.jsonl├── 03-base-urls.txt├── 04-crawl.jsonl├── content-discovery/├── manual-validation/└── review.mdConserva timestamp, origen, resolución, versiones, inputs, filtros, rate, errores y decisiones. No publiques cookies, tokens, credenciales ni datos de terceros que no sean necesarios para explicar la señal.