httpx: sondeo HTTP y fingerprinting web para recon
httpx · MIT
httpx toma una lista de hosts y dice cuáles sirven HTTP de verdad, y qué son. Es el paso que convierte un montón de hostnames especulativos en una superficie de ataque real — status codes, títulos, tecnologías, detalles de TLS, cadenas de redirección.
No lo confundas con httpx, el cliente HTTP de Python en PyPI. Proyecto distinto, mismo nombre.
Instalación
go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest Si también tienes instalado el httpx de Python, los binarios colisionan. Renombra uno o llama a este por su ruta absoluta.
Comandos principales
# sondea una lista de hosts, conserva solo lo que responde
httpx -l hosts.txt -silent
# la pasada de fingerprinting que conviene ejecutar por defecto
httpx -l hosts.txt -silent -title -tech-detect -status-code -content-length
# detalle completo en líneas JSON
httpx -l hosts.txt -json -o probe.jsonl -tls-grab -favicon -jarm
# puertos no estándar
httpx -l hosts.txt -ports 80,443,8080,8443,8000,9000 -silent -tech-detect usa fingerprints de Wappalyzer y es la flag que justifica su costo — así encuentras la instalación de WordPress que nadie mencionó. -favicon devuelve un hash mmh3, que es como pivotas a Shodan y encuentras todo otro host que ejecuta la misma aplicación.
Salida
{"timestamp":"2026-08-29T10:00:00Z","url":"https://api.example.com","status_code":200,
"title":"Example API","tech":["nginx","OpenResty"],"webserver":"nginx",
"content_length":1544,"favicon":"-1545961456","host":"93.184.216.34"} Dónde encaja en Tandera
httpx es el paso de fingerprint en recon_web_lite, recon_web_full y recon_api — la única herramienta agendada en los tres flujos orientados a web. Todo lo que viene después depende del conjunto de hosts vivos que produce.
Tandera también lo ejecuta una segunda vez como httpx_screenshot en la fase de enrich, capturando screenshots de página que se convierten en evidencia adjunta a los findings. Un screenshot es lo que hace legible un panel de administración expuesto para un cliente que lee el informe meses después.
Uso en un pentest
Sondea más allá de 80 y 443. El comportamiento por defecto se pierde la aplicación en 8443 que nadie documentó, que es exactamente donde están las cosas interesantes.
Presta atención a los status aburridos. Un muro de 403 en un rango de subdominios suele significar un WAF o un vhost por defecto, no una aplicación endurecida — y te dice que el hostname resuelve a infraestructura compartida. Un 401 es más interesante que un 200: hay algo ahí y quiere credenciales.
Los hashes de favicon son un pivote, no un finding. Cógelos con -favicon, luego busca el hash en Shodan para encontrar hosts hermanos que las fuentes pasivas se perdieron.
subfinder -d example.com -silent | dnsx -silent |
httpx -silent -title -tech-detect -status-code -favicon -json -o live.jsonl