Escaneo y enumeración de vulnerabilidades
Con el reconocimiento hecho sabes qué empresa tienes delante. Ahora toca averiguar qué ofrece exactamente cada servicio y qué debilidades conocidas tiene. Este módulo trata de descubrir y enumerar, no de explotar: la explotación viene después.
- Entender los estados de puerto de nmap (open, closed, filtered) y qué significan a nivel de paquetes.
- Elegir tipo de escaneo, temporización e intensidad según el objetivo y el alcance.
- Enumerar en profundidad los servicios más rentables: web, SMB, SNMP, TLS, bases de datos.
- Distinguir el escaneo de vulnerabilidades automático de la enumeración manual, y sus límites.
- Sondear a mano un servicio que ninguna herramienta reconoce.
- Pasar de una versión a una vulnerabilidad conocida sin caer en falsos positivos.
- Priorizar los hallazgos por impacto y facilidad, no por cantidad.
1. Qué significa realmente "puerto abierto"
Antes de escanear conviene entender qué te está diciendo nmap. Un escaneo TCP interpreta la respuesta al saludo (SYN) del objetivo:
| Estado | Qué respondió el objetivo | Qué significa |
|---|---|---|
| open | SYN/ACK | Hay un servicio escuchando y aceptando conexiones |
| closed | RST (reset) | La máquina responde, pero no hay nada escuchando en ese puerto |
| filtered | Nada, o un mensaje ICMP | Un cortafuegos descarta el paquete: no sabes si hay servicio detrás |
La distinción closed vs filtered es la que más gente pasa por alto y la más informativa: si todo un rango sale filtered, hay un cortafuegos delante; si sale closed, la máquina está viva pero ese puerto no se usa. Eso ya te dice cosas de la arquitectura antes de tocar ningún servicio.
2. Escanear con criterio
No existe un único escaneo correcto: se combinan varios, de menor a mayor coste, y se ajusta la temporización (-T0 muy lento y sigiloso, hasta -T5 agresivo) y la intensidad según lo que el encargo permita.
| Objetivo | Opción de nmap | Cuándo |
|---|---|---|
| Todos los puertos TCP, rápido | -p- --min-rate 2000 | Siempre primero |
| Identificar servicio y versión | -sV | Solo sobre los puertos abiertos |
| Scripts de enumeración | -sC o --script <nombre> | Cuando ya sabes el servicio |
| Servicios UDP | -sU | UDP es lento y se olvida: elige puertos concretos |
| Guardar resultados | -oA nombre | Siempre (evidencia + no repetir) |
Flujo recomendado, en dos tiempos: primero todos los puertos (barato por puerto, pero son 65535), y después -sV y scripts solo sobre los abiertos. Así lo caro (identificar versión, correr scripts) se hace sobre un puñado de puertos, no sobre 65535.
$ nmap -p- --min-rate 2000 objetivo -oA fase1 # barrido completo
$ nmap -sV -sC -p 22,80,445 objetivo -oA fase2 # detalle en los abiertos
$ nmap -sU -sV -p 161 objetivo # UDP siempre aparte
Sobre el sigilo: nada de esto es invisible. Un -p- a --min-rate 2000 es un cañonazo que cualquier IDS registra. En un red team real se escanea despacio y de forma dirigida; en una auditoría con alcance acordado, la velocidad manda. Sé consciente de en cuál de los dos estás.
3. Servicios que no se dejan identificar
Si nmap -sV marca un servicio con signo de interrogación (por ejemplo cbt?) significa que respondió pero nmap no lo reconoce a partir de su base de firmas. No es un callejón sin salida: te conectas a mano y hablas con él.
$ nc objetivo 7777 # conectar en crudo y probar HELP, INFO, ?
Muchos servicios internos se describen solos ante un HELP o un ?. Ese diálogo manual es una habilidad que distingue al que enumera de verdad del que solo lee la salida de una herramienta.
--version-light, o directamente lo haces a mano.4. Enumerar la web
La web es casi siempre la superficie más rica. Cuatro frentes:
- Identificar la tecnología: la cabecera
Server, las cookies (PHPSESSID,JSESSIONIDdelatan la plataforma), el HTML generado. Todo falseable, todo una pista de partida. - Scripts de nmap:
--script http-enumbusca carpetas típicas y avisa de listados de directorio abiertos. - Fuerza de diccionario: encuentra rutas y ficheros no enlazados. Aquí el resultado depende por completo del diccionario y de las extensiones que pruebes: un diccionario pequeño encuentra poco, uno específico de la tecnología encuentra mucho.
- Escáneres de configuración:
niktorevisa ficheros conocidos, cabeceras de seguridad ausentes y opciones peligrosas.
$ gobuster dir -u http://objetivo -w /usr/share/dirb/wordlists/common.txt -x php,txt,bak -q$ nikto -h http://objetivoDetalle práctico: fíjate en los códigos de estado. Un 403 Forbidden no es un "no existe": confirma que la ruta existe pero está protegida, lo que a veces es más interesante que un 200.
5. Enumerar servicios de archivos y gestión
Cada protocolo tiene su forma de soltar información. Los más rentables:
- SMB (445): una sesión nula (sin usuario ni contraseña) puede listar recursos compartidos, usuarios y políticas. Es uno de los hallazgos más frecuentes en redes Windows internas.
- SNMP (161/UDP): protocolo de gestión. Con una cadena de comunidad de solo lectura conocida (
publices la de fábrica) se lee un inventario del equipo: procesos, usuarios, interfaces, software instalado. - Bases de datos expuestas: Redis, MongoDB o Memcached sin autenticación por defecto entregan su contenido a cualquiera con acceso de red.
- TLS: el certificado revela nombre común, organización, otros nombres de host (SAN) y a veces datos internos. Enumerarlo no cuesta nada y da contexto.
$ smbclient -L //objetivo -N # sesión nula: listar recursos
$ snmpwalk -v2c -c public objetivo # volcar el árbol SNMP
$ nmap --script ssl-cert -p 443 objetivo # leer el certificado
6. Escaneo de vulnerabilidades: la máquina frente a las manos
Un escáner de vulnerabilidades (Nessus, OpenVAS, Nuclei) automatiza la comparación de lo que encuentra contra una base de fallos conocidos. Es rápido y da cobertura amplia, pero tiene dos límites que hay que tener siempre presentes:
- Falsos positivos: marca como vulnerable algo que no lo está (versión parcheada por la distribución aunque el número sea antiguo, banner falseado). Todo hallazgo automático se verifica a mano antes de darlo por bueno.
- Falsos negativos: no ve la lógica de negocio rota, el IDOR, la cadena de fallos menores que juntos son críticos. Eso solo lo encuentra la enumeración manual.
La regla: el escáner es un punto de partida que ensancha, no la respuesta. El criterio humano es lo que convierte una lista de avisos en un ataque.
7. De la versión a la vulnerabilidad
Cuando conoces producto y versión, buscas si tiene fallos publicados. Las fuentes son las bases de datos de exploits (Exploit-DB, consultable offline con searchsploit) y las fichas oficiales de vulnerabilidades, identificadas con un código CVE y puntuadas por gravedad con CVSS.
$ searchsploit apache 2.4.49$ searchsploit -x multiple/webapps/50383.sh # leer el exploit y sus requisitos
Antes de dar un CVE por aplicable, comprueba: la versión exacta (muchos productos tienen exploits para rangos distintos), las condiciones previas (¿necesita autenticación? ¿una configuración concreta?), y la plataforma. Es exactamente el trabajo del módulo 9, y adaptar el exploit encontrado, el del módulo 10.
8. Priorizar y documentar
Al terminar, no tienes "una lista de puertos": tienes un conjunto de hallazgos que hay que ordenar por dónde atacar primero. El criterio es impacto × facilidad, no el número de avisos ni su color en el informe del escáner. Un FTP anónimo con credenciales dentro vale más que diez avisos "medios" de cabeceras ausentes.
Documenta cada hallazgo con su evidencia (el comando y su salida): es la base del informe final y tu memoria de trabajo para las fases siguientes.
- Documentación oficial de nmap: estados de puerto, técnicas de escaneo y la Nmap Scripting Engine (NSE).
- Las guías de nmap, enum4linux, NetExec, Nuclei y OpenVAS de Ghost Academy (ver "Herramientas relacionadas").
- NVD (nvd.nist.gov) para entender cómo se puntúa un CVE con CVSS y qué significan sus métricas.
Guías y laboratorios ya publicados en Ghost Academy sobre las herramientas de este módulo:
Nmap: guía completa · Nmap en Kali · Enum4linux · NetExec · Nuclei · OpenVAS · WhatWeb
Descomprime, lee el LEEME.md y lanza startlab.sh. Hay servicios TCP y UDP, con 8 flags GO{...}. Verifícalas en http://localhost:8181/verificador, donde también encontrarás el reto de la versión a la CVE.
Aplica esta unidad y recuerda: no todo está en su puerto habitual, y no todo es TCP.
¿Atascado o ya terminado? La solución paso a paso revela todas las flags. Úsala cuando lo hayas intentado.
Autoevaluación
- Diferencia entre un puerto
closedy unofiltered: ¿qué te dice cada uno sobre la máquina y su red? - ¿Por qué se escanean todos los puertos antes de lanzar
-sVy los scripts? - ¿Qué significa que nmap marque un servicio con
?y qué haces a continuación? - ¿Por qué un escaneo TCP completo no te dice nada sobre SNMP?
- ¿Qué diferencia hay entre un falso positivo y un falso negativo de un escáner de vulnerabilidades, y por qué importan las dos?
- Un escáner dice que un servidor es vulnerable por su versión. ¿Qué tres cosas compruebas antes de darlo por bueno?
- ¿Por qué un
403 Forbiddenen un descubrimiento por diccionario puede ser más interesante que un200?