Skip to content

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

c
❯ 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, 8180 Tomcat, 8888, 10000 Webmin) además de los estándar 80/443.

EyeWitness

Genera capturas de pantalla de cada servicio web descubierto y las organiza en un reporte HTML navegable:

c
❯ 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:

c
❯ 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):

c
❯ wget https://github.com/michenriksen/aquatone/releases/download/v1.7.0/aquatone_linux_amd64_1.7.0.zip
c
❯ unzip aquatone_linux_amd64_1.7.0.zip 

Archive:  aquatone_linux_amd64_1.7.0.zip
  inflating: aquatone                
  inflating: README.md               
  inflating: LICENSE.txt

Confirmar que el binario está en el PATH, o moverlo a una ruta ya incluida:

c
❯ 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:/sbin

Ejecutar Aquatone directamente sobre la salida de Nmap:

c
❯ 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:

c
❯ 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).
c
❯ 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 Forbidden en 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.