El escaneo de puertos de un sitio web puede parecer simple, pero antes de lanzar el comando Nmap sobre nuestro objetivo, deberíamos investigar un poco. ¿Vamos a escanear el objetivo correcto? En este artículo, analizaremos más de cerca cómo hacer un escaneo de puertos a un sitio web de manera adecuada. Todos los ejemplos a continuación se realizaron en Kali Linux.
- Enfoque General para Escanear Puertos de un Sitio Web
- ¿Por qué es Importante Determinar si un Sitio Web está Utilizando CDN?
- ¿Cómo Determinar si un Sitio Web está Utilizando CDN?
- ¿Cómo revelar la dirección IP real del sitio web detrás del CDN?
- Sitio web en múltiples direcciones IP
- Estrategias de escaneo de puertos
- Consejos para Escaneos de Puertos de Larga Duración
- Conclusión
Enfoque General para Escanear Puertos de un Sitio Web
Cuando hablamos de escaneo de puertos, debemos pensar en términos de la capa de red en términos de direcciones IP, no en sitios web o nombres de host.
Técnicamente hablando, no podemos escanear puertos de un sitio web o un nombre de host, solo podemos escanear puertos de una dirección IP, que es a lo que se resuelve el nombre de host objetivo / FQDN (por ejemplo, www.ejemplo.com).
Entonces, habiendo aclarado esto, lo primero que debemos hacer es realizar una consulta DNS sobre el objetivo.
Regla número 1: Resolver el nombre de host objetivo en dirección(es) IP
Podemos usar cualquiera de los siguientes comandos para hacer el trabajo:
host www.ejemplo.com
dig www.ejemplo.com +short
getent ahosts www.ejemplo.com
Ahora que hemos obtenido todas las direcciones IP, debemos asegurarnos de que realmente pertenezcan a nuestro objetivo.
Regla número 2: Asegúrate de que vas a escanear la(s) dirección(es) IP correcta(s)
El asunto es que el sitio web objetivo puede estar utilizando un proveedor de CDN (Red de Distribución de Contenidos), ocultando efectivamente su dirección IP real detrás de él.
O puede estar balanceando la carga entre múltiples direcciones IP. Nunca sabremos estas cosas sin investigar un poco. Discutiremos esto en la siguiente sección.
Regla número 3: Seleccionar la estrategia adecuada de escaneo de puertos
Dependiendo de la naturaleza de la prueba (caja blanca, caja gris, caja negra, equipo rojo, etc.), es posible que tengamos que usar diferentes estrategias de escaneo de puertos.
Cubrimos esto en detalle en la sección final de este artículo.
¿Por qué es Importante Determinar si un Sitio Web está Utilizando CDN?
Si el sitio web objetivo utiliza CDN, significa que la dirección IP real del sitio web está oculta detrás del CDN. Y las direcciones IP que vemos cuando realizamos consultas DNS pertenecen al proveedor de CDN, ¡no al sitio web objetivo real!
Esta es, por supuesto, información crucial. Al escanear la dirección IP del CDN, obviamente estaríamos escaneando algo completamente diferente de lo que queremos escanear.
¿Cómo Determinar si un Sitio Web está Utilizando CDN?
Existen varias formas de identificar un CDN. Podemos dividirlas en las siguientes dos categorías:
- Herramientas en línea de terceros: Esta es la forma rápida y fácil, pero no siempre precisa.
- Forma manual: Esto requiere que escribamos uno o dos comandos, pero siempre es 100% precisa.
Vamos a desglosarlas.
Método 1: Herramientas en línea para identificar CDN
Hay varias herramientas en línea que pueden ayudarnos a determinar si un sitio web en particular está utilizando CDN o no. Aquí hay algunas gratuitas:
- https://www.cdnplanet.com/tools/cdnfinder/
- https://seositecheckup.com/tools/cdn-usage-test
- https://builtwith.com/
Pero como indicamos anteriormente, a veces estas herramientas de terceros pueden dar información inexacta. Por lo tanto, siempre es bueno verificar todo manualmente para estar 100% seguros. Es fácil de hacer también, así que, ¿por qué no acostumbrarse a hacerlo siempre manualmente?
Método 2: Forma manual para identificar CDN
Primero tenemos que resolver el nombre de host del sitio web a la(s) dirección(es) IP.
host -t A www.ejemplo.com
Luego, tenemos que investigar quién es el propietario de esas direcciones IP en la base de datos WHOIS. Esto nos dará certeza al 100%
whois <DIRECCIÓN-IP>
Si estamos viendo evidencias de CDN (nombres como Amazon, Cloudflare, Azure, etc.) por todas partes, no hay dudas: el sitio web está utilizando CDN. Aquí hay un ejemplo:
El sitio web objetivo está utilizando CDN, ¿y ahora qué?
Bueno, depende.
En un enfoque de prueba de caja blanca (white-box) o en un escenario típico de VAPT, el cliente proporcionaría nombres de host y direcciones IP de todos los activos en el alcance como parte de la información de alcance, porque el objetivo es típicamente probar los activos reales en el alcance.
En un enfoque más de caja negra (black-box) o en un ejercicio de equipo rojo (red team), tendríamos que descubrir esto por nuestra cuenta. El cliente no nos daría esta información. Por lo tanto, tendríamos que de alguna manera revelar la dirección IP real del sitio web.
¿Cómo revelar la dirección IP real del sitio web detrás del CDN?
La buena noticia es que casi siempre es posible. Por otro lado, puede requerir una investigación más profunda y el uso de servicios de terceros que no siempre son gratuitos. Revelar la dirección IP real detrás del CDN es un tema fuera del alcance de este artículo, pero mencionemos brevemente algunas de las técnicas y métodos que se pueden utilizar para hacerlo:
- Examinar cabeceras HTTP
- Examinar certificados SSL
- Ver registros DNS históricos
- Hacer que el sitio web nos envíe un correo electrónico
- Encontrar una vulnerabilidad en el sitio web
- Examinar rangos de red y direcciones IP conocidas del objetivo
Información detallada sobre esas técnicas se puede encontrar en los siguientes enlaces:
- https://www.secjuice.com/finding-real-ips-of-origin-servers-behind-cloudflare-or-tor/
- https://nixcp.com/find-real-ip-address-website-powered-by-cloudflare/
- https://geekflare.com/find-real-ip-origin-address-of-website/
- https://securitytrails.com/blog/ip-address-behind-cloudflare
- https://www.google.com/search?q=encontrar+la+direcci%C3%B3n+ip+de+un+sitio+web+detr%C3%A1s+de+cloudflare
Sitio web en múltiples direcciones IP
A veces, el sitio web objetivo utiliza múltiples direcciones IP y alguna forma de balanceo de carga. Por ejemplo, la siguiente captura de pantalla muestra un sitio web que utiliza balanceo de carga utilizando DNS round robin. Observe cómo cambia el orden de las direcciones IP cada vez que hacemos la consulta DNS:
En casos como este, es importante escanear todas las direcciones IP para lograr una cobertura completa. Algunos de esos sistemas pueden estar configurados de manera diferente a los otros, y al escanear todos ellos, podríamos descubrir algo significativo.
Entonces, en este punto, deberíamos haber recopilado todas las direcciones IP que pertenecen al sitio web objetivo. Ahora procedamos a realizar el escaneo de puertos real.
Estrategias de escaneo de puertos
Cuando se trata de escaneo de puertos, podemos considerar diferentes estrategias dependiendo de la naturaleza de la prueba.
Escenario de caja blanca (White-box) / VAPT
Durante una prueba de caja blanca o en un escenario típico de VAPT, el objetivo generalmente es encontrar tantas vulnerabilidades como sea posible.
Por lo tanto, siempre escaneamos todos los puertos en los hosts remotos, lo que garantiza que la cobertura sea completa y que no se pierdan servicios que se estén ejecutando en los hosts objetivo.
El siguiente comando es la forma típica de cómo escaneamos puertos de un sitio web durante un ejercicio de VAPT:
nmap -n -Pn -sS -p0-65535 -oA output <DIRECCIÓN-IP>
-n
(sin resolución de DNS)-Pn
(sin descubrimiento de hosts, tratar al host como en línea)-sS
(realizar escaneo TCP SYN)-p0-65535
(escanear todos los puertos)-oA
(salida en los 3 formatos: nmap, gnmap, xml)
Desde la perspectiva de la temporización, lo dejamos en el valor predeterminado, lo que significa que usamos la plantilla de temporización “normal” (-T3
). Esto definitivamente no es encubierto, por lo que es muy probable que sea detectado.
Lo hacemos de esta manera solo cuando sabemos que no vamos a ser bloqueados. Típicamente, pedimos al cliente de antemano que coloque en la lista blanca nuestra dirección IP de origen, para que no seamos bloqueados.
Esto también es beneficioso para el cliente y su equipo de SOC (Centro de Operaciones de Seguridad) para distinguir entre nuestras actividades de prueba y una actividad de ataque real potencial.
Escenario de caja negra (Black-box) / equipo rojo
Ahora, en un enfoque más de caja negra o en un ejercicio de equipo rojo, procederíamos de manera diferente. El objetivo aquí ya no es encontrar tantas vulnerabilidades como sea posible, pero, por supuesto, nos gustaría eso. Aun así, queremos lograr una cobertura completa.
En estos escenarios también debemos ser encubiertos para no ser bloqueados. Si somos detectados y bloqueados, entonces nuestros resultados serán imprecisos e incompletos. También “quemaremos” nuestra dirección IP de origen y es posible que tengamos que obtener una nueva (por ejemplo, alquilando un VPS diferente).
Entonces, para que nuestro escaneo de puertos sea encubierto, el aspecto más importante es la velocidad. Simplemente debemos hacerlo lo suficientemente lento para no ser detectados. Estas son nuestras opciones con Nmap:
Opción de Nmap | Nombre de la plantilla de temporización | Velocidad |
-T2 | polite/cordial | 1 paquete cada 0.4 segundos |
-T1 | sneaky/sigiloso | 1 paquete cada 15 segundos |
-T0 | paranoid/paranoico | 1 paquete cada 5 minutos |
Para obtener información más detallada sobre las plantillas de temporización, consulta la documentación oficial de Nmap (enlace).
Entonces, si queremos un escaneo de puertos completo dentro de un marco de tiempo razonable, debemos usar al menos la plantilla “polite” (-T2). Esto podría terminar el trabajo en 7.2 horas. El comando sería:
nmap -T2 -n -Pn -sS -p0-65535 -oA output <DIRECCIÓN-IP>
¡Pero esto probablemente todavía sería detectado! La alternativa es usar la plantilla “sneaky” (-T1), que tomaría 11 días para completar el trabajo. ¿Tienes 11 días para realizar un escaneo completo de puertos? Aún es posible, pero si no tenemos ese tiempo, debemos compensar. Tenemos que encontrar un equilibrio entre cobertura y tiempo requerido.
Encontrar el equilibrio correcto..
Los siguientes 5 ejemplos son los que usamos típicamente en ejercicios de caja negra o equipo rojo. Generalmente usamos estos comandos cuando no estamos siendo incluidos en la lista blanca por el cliente. Dependiendo del proyecto y del tiempo asignado, necesitamos elegir la estrategia de escaneo más adecuada.
Los siguientes comandos usan la plantilla de temporización “sigilosa” (-T1) para evitar la detección pero aún así proporcionar resultados en un marco de tiempo razonable. Ten en cuenta que solo estamos escaneando puertos TCP. Por cierto, también puedes leer: Escáner de Puertos en PowerShell (TCP/UDP).
Siéntete libre de usar cualquiera de estos comandos según tu situación y necesidades actuales:
Escaneo de puertos de servidor web (56 puertos)
nmap -T1 -n -Pn -sS -p80-90,443,4443,8000-8009,8080-8099,8181,8443,9000,9090-9099 -oA output <DIRECCIÓN-IP>
Tiempo requerido: 14 minutos.
Escaneo de puertos de servidor web y otros puertos interesantes (93 puertos)
nmap -T1 -n -Pn -sS -p21-23,25,53,80-90,111,139,389,443,445,873,1099,1433,1521,1723,2049,2100,2121,3299,3306,3389,3632,4369,4443,5038,5060,5432,5555,5900-5902,5985,6000-6002,6379,6667,8000-8009,8080-8099,8181,8443,9000,9090-9099,9200,27017 -oA output <DIRECCIÓN-IP>
Tiempo requerido: 24 minutos.
Escaneo de los 200 puertos más populares
nmap -T1 -n -Pn -sS --top-ports 200 -oA output <DIRECCIÓN-IP>
Tiempo requerido: 50 minutos.
Escaneo de 1000 puertos más populares
nmap -T1 -n -Pn -sS --top-ports 1000 -oA output <DIRECCIÓN-IP>
Tiempo requerido: 4 horas y 10 minutos.
Escaneo de 4790 puertos más populares (similar al escáner Nessus)
nmap -T1 -n -Pn -sS --top-ports 4790 -oA output <DIRECCIÓN-IP>
Tiempo requerido: 20 horas.
Consejos para Escaneos de Puertos de Larga Duración
Realízalos de manera segura
Si estás usando un VPS dedicado para tus actividades, asegúrate de realizar los escaneos de puertos en un multiplexor de terminal como GNU Screen o tmux.
Esto evitará que interrumpas accidentalmente tus escaneos en caso de que haya una interrupción de la conexión entre tú y tu VPS.
Detecta bloqueos
Durante el escaneo de puertos, es buena práctica verificar de vez en cuando si tus escaneos no están siendo detectados y si no estás siendo bloqueado.
Para hacer esto, podemos simplemente verificar si aún podemos conectarnos al puerto del servidor web que sabemos que está abierto (por ejemplo, puerto tcp/80).
Podemos hacerlo fácilmente usando la utilidad Netcat de esta manera:
nc -nvz <DIRECCIÓN-IP> 80
-n
(sin resolución de DNS)-v
(salida detallada)-z
(modo cero-I/O, reportar solo el estado de la conexión)
Si quieres hacer esta verificación de puertos automáticamente cada hora, podrías simplemente abrir otra ventana de pantalla/tmux en tu VPS y ejecutar esta línea:
while true; do date; nc -nvz <DIRECCIÓN-IP> 80; sleep $((60*60)); done
Ahora tendrás un buen informe de conciencia situacional cada hora:
Por cierto…
¿Sabías cómo Nmap usa la opción ‘–top-ports
’ y cuáles son esos puertos (más populares)? ¡Fácil! Simplemente ejecuta la siguiente línea para averiguar los 100 puertos TCP más importantes:
sort -k3 -nr /usr/share/nmap/nmap-services | grep '/tcp' | head -100
Puede ser realmente útil conocer algo de scripting en shell, ¿no crees?
Conclusión
Esperamos sinceramente que este artículo haya proporcionado todos los detalles necesarios sobre cómo escanear puertos correctamente en un sitio web. Siguiendo las 3 reglas mencionadas anteriormente, escanear puertos en un sitio web puede ser realmente fácil y directo.
Si falta algo o algo no está claro, por favor háznoslo saber en la sección de comentarios. También cuéntanos cómo escaneas puertos en un sitio web durante tus pruebas de penetración.
Si te gustó esta guía y quieres más, suscríbete a nuestra lista de correo y síguenos en Twitter y Facebook para recibir notificaciones sobre nuevas adiciones.