Application Discovery & Enumeration
Cuando el alcance de una evaluación incluye un rango amplio de IPs/hosts, conviene automatizar el descubrimiento de servicios web y generar capturas de pantalla de cada uno, para priorizar visualmente dónde investigar más a fondo (paneles de login, CMS reconocibles, aplicaciones internas, etc.) sin tener que visitar cada URL manualmente.
Escaneo inicial de puertos web comunes
❯ nmap -p 80,443,8000,8080,8180,8888,10000 --open -oA web_discovery -iL scope_list-iL scope_list: lee la lista de hosts/IPs objetivo desde un archivo, ideal para rangos grandes.-oA web_discovery: guarda la salida en los tres formatos (normal, XML, greppable), ya que el XML se reutiliza directamente como entrada de las herramientas de captura de pantalla.- El listado de puertos cubre los más comunes para paneles administrativos y aplicaciones de desarrollo (
8080,8180Tomcat,8888,10000Webmin) además de los estándar80/443.
EyeWitness
Genera capturas de pantalla de cada servicio web descubierto y las organiza en un reporte HTML navegable:
❯ eyewitness --web -x web_discovery.xml -d empresacorp_eyewitness
################################################################################
# EyeWitness #
################################################################################
# FortyNorth Security - https://www.fortynorthsecurity.com #
################################################################################
Starting Web Requests (26 Hosts)
Attempting to screenshot http://app.empresacorp.local
Attempting to screenshot http://app-dev.empresacorp.local
Attempting to screenshot http://app-dev.empresacorp.local:8000
Attempting to screenshot http://app-dev.empresacorp.local:8080
Attempting to screenshot http://gitlab-dev.empresacorp.local
Attempting to screenshot http://172.16.70.10
Attempting to screenshot http://172.16.70.10:8000
Attempting to screenshot http://172.16.70.10:8080
Attempting to screenshot http://dev.empresacorp.local
Attempting to screenshot http://jenkins-dev.empresacorp.local
Attempting to screenshot http://jenkins-dev.empresacorp.local:8000
Attempting to screenshot http://jenkins-dev.empresacorp.local:8080
Attempting to screenshot http://support-dev.empresacorp.local
Attempting to screenshot http://drupal-dev.empresacorp.local
[*] Hit timeout limit when connecting to http://172.16.70.10:8000, retrying
Attempting to screenshot http://jenkins.empresacorp.local
Attempting to screenshot http://jenkins.empresacorp.local:8000
Attempting to screenshot http://jenkins.empresacorp.local:8080
Attempting to screenshot http://support.empresacorp.local
[*] Completed 15 out of 26 services
Attempting to screenshot http://drupal-qa.empresacorp.local
Attempting to screenshot http://web01.empresacorp.local
Attempting to screenshot http://web01.empresacorp.local:8000
Attempting to screenshot http://web01.empresacorp.local:8080
Attempting to screenshot http://empresacorp.local
Attempting to screenshot http://drupal-acc.empresacorp.local
Attempting to screenshot http://drupal.empresacorp.local
Attempting to screenshot http://blog-dev.empresacorp.local
Finished in 57.859838008880615 seconds
[*] Done! Report written in the /home/user/Projects/empresacorp/empresacorp_eyewitness folder!
Would you like to open the report now? [Y/n]-x: indica el archivo XML de Nmap generado en el paso anterior como fuente de objetivos, evitando tener que volver a definirlos manualmente.-d: nombre del directorio de salida del reporte.- El reporte HTML resultante agrupa las capturas y suele incluir detección automática de tecnologías (versión de CMS, formularios de login) para acelerar la priorización visual.
Otras opciones útiles de EyeWitness:
❯ eyewitness --web -f urls.txt -d reporte --timeout 10 --threads 10-f: alternativa a-x, lee objetivos desde una lista de URLs en texto plano en vez de un XML de Nmap.--timeout/--threads: ajustar cuando se trabaja contra un rango muy grande de hosts, para no esperar demasiado en servicios caídos/lentos.
Aquatone
Alternativa a EyeWitness, con generación de clustering visual de páginas similares (útil para identificar rápidamente instancias duplicadas o plantillas repetidas en un rango grande):
❯ wget https://github.com/michenriksen/aquatone/releases/download/v1.7.0/aquatone_linux_amd64_1.7.0.zip❯ unzip aquatone_linux_amd64_1.7.0.zip
Archive: aquatone_linux_amd64_1.7.0.zip
inflating: aquatone
inflating: README.md
inflating: LICENSE.txtConfirmar que el binario está en el PATH, o moverlo a una ruta ya incluida:
❯ echo $PATH
/home/user/.local/bin:/snap/bin:/usr/sandbox/:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/share/games:/usr/local/sbin:/usr/sbin:/sbinEjecutar Aquatone directamente sobre la salida de Nmap:
❯ cat web_discovery.xml | ./aquatone -nmap
aquatone v1.7.0 started at 2021-09-07T22:31:03-04:00
Targets : 65
Threads : 6
Ports : 80, 443, 8000, 8080, 8443
Output dir : .
http://web01.empresacorp.local:8000/: 403 Forbidden
http://app.empresacorp.local/: 200 OK
http://jenkins.empresacorp.local/: 403 Forbidden
http://app-dev.empresacorp.local/: 200
http://app-dev.empresacorp.local/: 200
http://app-dev.empresacorp.local:8000/: 403 Forbidden
http://jenkins.empresacorp.local:8000/: 403 Forbidden
http://web01.empresacorp.local:8080/: 200
http://app-dev.empresacorp.local:8000/: 403 Forbidden
http://172.16.70.10:8000/: 200 OK
<SNIP>
http://web01.empresacorp.local:8000/: screenshot successful
http://app.empresacorp.local/: screenshot successful
http://app-dev.empresacorp.local/: screenshot successful
http://jenkins.empresacorp.local/: screenshot successful
http://app-dev.empresacorp.local/: screenshot successful
http://app-dev.empresacorp.local:8000/: screenshot successful
http://jenkins.empresacorp.local:8000/: screenshot successful
http://app-dev.empresacorp.local:8000/: screenshot successful
http://app-dev.empresacorp.local:8080/: screenshot successful
http://app.empresacorp.local/: screenshot successful
<SNIP>
Calculating page structures... done
Clustering similar pages... done
Generating HTML report... done
Writing session file...Time:
- Started at : 2021-09-07T22:31:03-04:00
- Finished at : 2021-09-07T22:31:36-04:00
- Duration : 33s
Requests:
- Successful : 65
- Failed : 0
- 2xx : 47
- 3xx : 0
- 4xx : 18
- 5xx : 0
Screenshots:
- Successful : 65
- Failed : 0
Wrote HTML report to: aquatone_report.html- El "clustering de páginas similares" agrupa automáticamente hosts que devuelven contenido casi idéntico (por ejemplo, 10 subdominios apuntando a la misma instancia por defecto de un CMS) — esto ahorra tiempo al no tener que revisar cada captura individualmente cuando muchas son duplicados.
Alternativas modernas
Herramientas más recientes que cubren un flujo similar (descubrimiento + captura), útiles como alternativa o complemento:
❯ gowitness scan nmap -f web_discovery.xml- gowitness : reescritura en Go de un flujo similar a Aquatone/EyeWitness, más rápida y con menos dependencias de instalación (un solo binario).
❯ cat urls.txt | httpx -title -tech-detect -status-code -screenshot- httpx (ProjectDiscovery) : sondeo HTTP masivo con detección de tecnologías, títulos, códigos de estado y capturas de pantalla en un solo paso — muy usado en flujos de bug bounty por su velocidad al integrarse bien con otras herramientas de la misma suite (
subfinder,httpx,nuclei).
Notas de metodología
- Priorizar la revisión manual por: paneles de login expuestos, mensajes de error con stack traces (revelan tecnología/versión), CMS reconocibles con versión visible, y cualquier host que devuelva contenido distinto al resto del clustering.
- Los códigos
403 Forbiddenen el listado no deben descartarse automáticamente — a menudo indican una ruta protegida por IP/referer que puede eludirse (ver técnicas de bypass de autenticación por cabeceras en otros documentos de esta colección). - Correlacionar los hostnames descubiertos (
jenkins-dev,drupal-qa,support-dev) con los documentos específicos de cada CMS/aplicación de esta colección (wordpress.md,joomla.md,drupal.md,tomcat.md,jenkins.md) para la fase de enumeración específica de cada tecnología identificada.