Llegamos a la última lección del Módulo 3. En 03-01 abrimos los puertos y en 03-02 los convertimos en un inventario de servicios con versiones: Apache 2.4.29 con PHP 7.2.24 en la tienda, MySQL 5.5.62 expuesto en dev, un Werkzeug de desarrollo en el 54321, SMB con sesión nula, SNMP public... Tenemos software concreto con versiones concretas. Ahora toca la pregunta que lo conecta todo con la explotación: ¿cuáles de estos servicios son vulnerables, con qué gravedad y por dónde conviene empezar?
Detectar vulnerabilidades es cruzar cada servicio/versión con las bases de datos de vulnerabilidades conocidas (CVE, CPE, NVD, exploit-db) y con escáneres automáticos (Nessus/OpenVAS, nmap --script vuln, nuclei), para después validarlos críticamente —separando el falso positivo del hallazgo real—. El entregable es una lista priorizada de vulnerabilidades candidatas que alimenta directamente el Módulo 4. Encuadre de siempre: los escáneres de vulnerabilidades son ruidosos y a veces intrusivos (pueden reiniciar servicios frágiles), así que se lanzan dentro del alcance, en la ventana acordada y avisando; y detectar no es explotar: aquí identificamos y priorizamos, no lanzamos el exploit.
Contenido
- Qué es una vulnerabilidad y el ciclo CVE
- El lenguaje común: CVE, CPE, NVD y CVSS
- Búsqueda manual: searchsploit y exploit-db
- Escaneo con Nmap:
--script vuln - Escáneres de vulnerabilidades: Nessus y OpenVAS/GVM
- nuclei: plantillas rápidas
- Lectura crítica: falsos positivos y validación
- La lista priorizada de vulnerabilidades de TechNova
- Contrapartida defensiva
- Errores comunes y consejos
- Ejercicios
- Conclusión
- Qué es una vulnerabilidad y el ciclo CVE
Una vulnerabilidad es un fallo (de software, configuración o diseño) que un atacante puede aprovechar para violar la seguridad del sistema. En esta fase nos centramos sobre todo en vulnerabilidades conocidas: las publicadas, con identificador y a menudo con exploit disponible. Su ciclo de vida:
flowchart LR
A[Fallo descubierto] --> B[Se asigna CVE]
B --> C[Publicacion en NVD<br/>con CVSS y CPE]
C --> D[Aparece exploit<br/>exploit-db, PoC]
D --> E[Parche del fabricante]
E --> F[Sistemas sin parchear<br/>= vulnerables]
El pentester trabaja en el tramo final: hay sistemas que no han aplicado el parche y siguen expuestos. Nuestro trabajo es detectar esos casos cruzando lo que corre (03-02) con lo que se sabe que es vulnerable.
- El lenguaje común: CVE, CPE, NVD y CVSS
Para hablar de vulnerabilidades con precisión hay un vocabulario estándar:
| Término | Qué es | Ejemplo |
|---|---|---|
| CVE | Identificador único de una vulnerabilidad concreta | CVE-2021-44228 (Log4Shell) |
| CPE | Nombre estandarizado de un producto/versión | cpe:/a:apache:http_server:2.4.29 |
| NVD | Base de datos del NIST que enriquece cada CVE | nvd.nist.gov |
| CVSS | Puntuación de gravedad de 0.0 a 10.0 | 9.8 (crítica) |
| exploit-db | Repositorio de exploits públicos | exploit-db.com |
El puente clave es el CPE: el identificador de producto+versión que Nmap ya nos dio en 03-02 (cpe:/a:apache:http_server:2.4.29). Con ese CPE se consulta la NVD y salen todos los CVE que afectan a esa versión. El CVSS da una idea rápida de gravedad; usaremos la puntuación solo como orientación para priorizar —el detalle de cómo se calcula (vectores, métricas) es materia de 06-02—.
- Búsqueda manual: searchsploit y exploit-db
Antes de los escáneres, la vía más directa y controlada es buscar a mano. searchsploit es la copia local de exploit-db en Kali:
# Buscar exploits para las versiones del inventario
searchsploit apache 2.4.29
searchsploit php 7.2
searchsploit werkzeug--------------------------------------------------------- --------------------- Exploit Title | Path --------------------------------------------------------- --------------------- Apache 2.4.x - Denial of Service | linux/dos/... Werkzeug - Debug Shell Command Execution | python/remote/43905.py PHP 7.x - Various | php/... --------------------------------------------------------- ---------------------
Lectura: destaca Werkzeug - Debug Shell Command Execution. Si el servidor de desarrollo del puerto 54321 tiene el modo debug activo (el famoso PIN de Werkzeug), podría permitir ejecución de comandos. Es una candidata fuerte para el Módulo 4. Para consultar el detalle o el CPE también sirve la web de la NVD filtrando por producto y versión.
- Escaneo con Nmap:
--script vuln
--script vulnLa NSE incluye una categoría vuln que comprueba vulnerabilidades conocidas contra los servicios detectados. Es el paso natural tras la enumeración:
80/tcp open http | http-enum: | /config.php.bak: Possible backup file | http-slowloris-check: | VULNERABLE: Slowloris DoS attack | State: LIKELY VULNERABLE | IDs: CVE:CVE-2007-6750 | http-csrf: | Found the following CSRF possible vulnerabilities: | Path: /login.php |_http-sql-injection: Possible sqli for query: /producto.php?id=1'
Análisis línea a línea:
http-slowloris-check ... LIKELY VULNERABLE (CVE-2007-6750): posible denegación de servicio Slowloris. Ojo: los scripts DoS pueden tumbar el servicio; muchos solo lo comprueban sin lanzarlo, pero hay que usarlos con permiso.http-csrf: posible falta de protección CSRF en/login.php.http-sql-injection: Possible sqli for query: /producto.php?id=1': posible inyección SQL en el parámetroiddeproducto.php—justo el parámetro que el recon marcó en la tienda—. Es un candidato muy prometedor.
Fíjate en las palabras: "Possible", "LIKELY". Nmap señala candidatas, no confirma. La validación es el apartado 7.
- Escáneres de vulnerabilidades: Nessus y OpenVAS/GVM
Para cobertura amplia se usan escáneres dedicados, que prueban miles de comprobaciones y generan informes con gravedad. Los dos más habituales:
| Escáner | Licencia | Notas |
|---|---|---|
| Nessus | Comercial (Essentials gratuito limitado) | Estándar de industria, gran cobertura |
| OpenVAS / GVM | Libre (Greenbone) | Alternativa open source muy usada |
Ejemplo conceptual de resultado de un escaneo autenticado sobre dev:
Host: 10.10.10.15 CRÍTICO MySQL 5.5.x - Múltiples vulnerabilidades (CVE-2016-6662) CVSS 9.8 ALTO PHP 7.2 - Fin de soporte, múltiples CVE CVSS 7.5 ALTO Werkzeug debug console habilitada CVSS 8.1 MEDIO OpenSSH 7.6 - User enumeration (CVE-2018-15473) CVSS 5.3 INFO Certificado TLS autofirmado
Cada línea trae CVE, gravedad y una puntuación CVSS orientativa. Muy potente, pero con dos advertencias importantes: son ruidosos (un IDS los detecta al instante) y generan falsos positivos (por eso el apartado siguiente). Los escaneos autenticados (con credenciales que dé el cliente) son mucho más fiables que los no autenticados, porque ven las versiones reales en lugar de adivinar.
- nuclei: plantillas rápidas
nuclei comprueba vulnerabilidades y exposiciones mediante plantillas (YAML) mantenidas por la comunidad. Es rápido, preciso y muy usado para superficie web:
[phpinfo-files] [http] [medium] http://tienda.technova.lab/phpinfo.php [apache-detect] [http] [info] http://tienda.technova.lab [php-7-eol] [http] [high] PHP 7.2 fuera de soporte [git-config] [http] [medium] http://tienda.technova.lab/.git/config
Detecta el phpinfo.php, confirma PHP fuera de soporte y —hallazgo nuevo— un .git/config expuesto, que podría permitir descargar el código fuente. nuclei brilla por su bajo ruido relativo y su base de plantillas actualizada.
- Lectura crítica: falsos positivos y validación
Este es el apartado que separa a un profesional de alguien que pega la salida de un escáner en el informe. Los escáneres se equivocan, en dos direcciones:
- Falso positivo: reporta una vulnerabilidad que no existe (p. ej. marca vulnerable por número de versión aunque haya un parche retroportado por la distribución —muy común en Debian/Ubuntu—).
- Falso negativo: no ve una vulnerabilidad real (configuración a medida, servicio no reconocido).
Por eso toda candidata se valida. Formas de hacerlo sin llegar a explotar:
- Contrastar la versión exacta y el parcheo. Ubuntu suele retroportar correcciones sin cambiar el número de versión visible; un CVE "detectado" por versión puede estar ya corregido.
- Cruzar varias fuentes. Si Nessus,
--script vulny searchsploit coinciden, la confianza sube. - Comprobación manual ligera. Una petición controlada (p. ej.
producto.php?id=1'y ver si el error revela SQL) confirma la sospecha sin lanzar aún un exploit completo. - Descartar lo inaplicable. Un CVE de una función que el servicio no usa no es explotable en este contexto.
Cada candidata se etiqueta con un nivel de confianza (confirmada / probable / a validar). Sin este filtro, un informe se llena de ruido y pierde credibilidad.
- La lista priorizada de vulnerabilidades de TechNova
Consolidamos todo en el entregable final del módulo: la lista priorizada de vulnerabilidades candidatas. Combina gravedad (CVSS orientativo), exposición y confianza tras la validación:
| # | Activo | Vulnerabilidad candidata | Ref. | CVSS aprox. | Confianza | Prioridad |
|---|---|---|---|---|---|---|
| 1 | tienda /producto.php?id= |
Inyección SQL | — | 9.8 | Probable (validar manual) | Crítica |
| 2 | dev:54321 Werkzeug | Consola debug / RCE | EDB-43905 | 8.1 | Probable | Crítica |
| 3 | dev:3306 MySQL 5.5.62 | Múltiples CVE + expuesta a red | CVE-2016-6662 | 9.8 | A validar (retroporte) | Alta |
| 4 | tienda PHP 7.2.24 | Fin de soporte, CVE varios | — | 7.5 | Confirmada (EOL) | Alta |
| 5 | 10.10.10.55 SMB | Sesión nula + share RRHH |
— | 7.5 | Confirmada | Alta |
| 6 | tienda /config.php.bak, .git/config |
Fuga de código/credenciales | — | 7.0 | Confirmada | Alta |
| 7 | db:161 SNMP public |
Fuga de información interna | — | 5.0 | Confirmada | Media |
| 8 | dev:22 OpenSSH 7.6 | Enumeración de usuarios | CVE-2018-15473 | 5.3 | Probable | Media |
Cómo se lee:
- Lo crítico combina alta gravedad, exposición y una vía de acceso plausible: la SQLi en la tienda (objetivo principal, en Internet) y la consola de debug de Werkzeug (posible ejecución de comandos).
- MySQL 5.5 marca CVSS altísimo pero queda "a validar" por el posible retroporte de Ubuntu: se comprueba antes de darlo por bueno.
- Los hallazgos confirmados de configuración (sesión nula SMB,
.bak/.git, SNMPpublic) son sólidos aunque su CVSS sea menor, porque no dependen de una versión y ya están verificados.
Esta tabla es exactamente lo que el Módulo 4 necesita: por dónde intentar entrar primero, con evidencia y confianza asociadas.
- Contrapartida defensiva
Frente a la detección de vulnerabilidades, la defensa se juega en la gestión de vulnerabilidades:
- Parchear y mantener soporte. El grueso de esta lista se evapora actualizando: PHP y MySQL soportados, dependencias al día. No usar software en fin de vida.
- Escaneo propio periódico. El defensor debe pasar Nessus/OpenVAS antes que el atacante y priorizar por CVSS y exposición.
- Corregir configuraciones. Quitar
.bak,phpinfo.phpy.gitde producción; cerrar la sesión nula; cambiar la comunidad SNMP; desactivar el modo debug de Werkzeug. - Detección: los escáneres de vulnerabilidades son muy ruidosos; un IDS/IPS y la monitorización de logs detectan el aluvión de peticiones y sondas. Que el cliente vea tu escaneo en sus alertas es, de hecho, una buena señal para su SOC.
- Errores Comunes y Consejos
- Copiar la salida del escáner tal cual. Sin validar, el informe se llena de falsos positivos y pierde credibilidad. Valida siempre antes de reportar.
- Ignorar los retroportes de la distribución. Un CVE "detectado" por versión puede estar ya parcheado en Ubuntu/Debian. Comprueba el estado real del parche.
- Lanzar escáneres sin avisar. Son intrusivos; algunos scripts (DoS, fuerza bruta) pueden tumbar servicios. Ventana acordada y aviso al contacto técnico, siempre.
- Confundir detectar con explotar. Aquí produces candidatas priorizadas; lanzar el exploit es el Módulo 4 y requiere que el alcance lo autorice.
- Obsesionarse con el CVSS. Una SQLi en la web pública pesa más que un CVSS 9.8 en un servicio inaccesible. Cruza gravedad con exposición y confianza.
- Olvidar los hallazgos de configuración. Sesión nula,
.gitexpuesto o SNMPpublicno tienen CVE pero suelen ser las vías más fiables. No los infravalores. - Consejo: combina siempre escáner + búsqueda manual + validación. La automatización cubre volumen; el criterio humano decide qué es real y qué importa.
- Ejercicios
Ejercicio 1. Un escaneo con Nessus marca MySQL 5.5.62 como CRÍTICO (CVSS 9.8) en dev. Describe los pasos que darías para validar si es un hallazgo real o un falso positivo, sin llegar a explotarlo, y menciona al menos una causa habitual de falso positivo en Ubuntu.
Ejercicio 2. Del inventario de TechNova tienes dos candidatas: (a) una posible SQLi en tienda.technova.lab/producto.php?id= (Internet, objetivo principal) y (b) un CVE de OpenSSH 7.6 de enumeración de usuarios en dev (interno). Ambas "detectadas" por escáner. Prioriza para el Módulo 4 y justifica cruzando gravedad, exposición y confianza.
Ejercicio 3. Explica por qué un hallazgo sin CVE como la sesión nula de SMB con el recurso RRHH accesible puede ser más valioso para el Módulo 4 que un CVE con CVSS 9.8 detectado solo por número de versión.
Soluciones
Solución 1. Pasos de validación: (1) confirmar la versión exacta con nmap --script mysql-info y banner, no fiarse solo del escáner; (2) comprobar el estado del parche: en Ubuntu los paquetes conservan el número de versión (5.5.62-0ubuntu…) aunque se hayan retroportado correcciones de seguridad —causa habitual de falso positivo—, así que hay que mirar el changelog del paquete y los avisos de seguridad de Ubuntu (USN); (3) cruzar fuentes: ver si searchsploit y la NVD confirman que ese CVE aplica a esa build concreta y que la funcionalidad afectada está en uso; (4) etiquetar la candidata como "confirmada" o "descartada" según el resultado. Todo sin lanzar el exploit: solo verificamos aplicabilidad.
Solución 2. Prioridad: 1.º (a) la SQLi de la tienda. Aunque ambas las marque un escáner, la SQLi combina gravedad muy alta (acceso potencial a la base de datos), máxima exposición (Internet, objetivo principal del alcance) y una vía de acceso directa; se valida con una comprobación manual ligera (id=1') que sube rápido la confianza. 2.º (b) la enumeración de usuarios de OpenSSH: gravedad media, exposición baja (host interno) y solo aporta nombres de usuario, no acceso; es útil como apoyo (alimenta ataques de contraseñas), no como vía principal. El criterio: a igualdad de "detectado por escáner", mandan exposición e impacto real.
Solución 3. Porque la sesión nula de SMB está confirmada y es directamente accionable: ya sabemos que da acceso a usuarios reales y a documentos de RRHH sin credenciales, es una vía real y verificada. En cambio, un CVE 9.8 "detectado solo por número de versión" es una sospecha sin validar: puede ser un falso positivo (parche retroportado), puede requerir condiciones que no se cumplen, o no tener exploit fiable. En pentesting vale más una vía modesta confirmada que una crítica incierta: la primera es una entrada; la segunda, todavía una hipótesis.
Conclusión
Cerramos el Módulo 3. Empezamos con una lista de hosts vivos y la hemos convertido, paso a paso, en algo accionable: primero los puertos abiertos (03-01), luego los servicios con versiones (03-02) y ahora una lista priorizada de vulnerabilidades candidatas (03-03), cada una con su referencia, su gravedad orientativa y —lo más importante— su nivel de confianza tras validarla. Hemos aprendido el lenguaje común (CVE, CPE, NVD, CVSS), a buscar a mano (searchsploit/exploit-db) y con escáneres (--script vuln, Nessus, OpenVAS, nuclei), y a leer sus resultados con espíritu crítico para no ahogarnos en falsos positivos.
Recapitulando el módulo entero: el reconocimiento nos dijo dónde mirar; el escaneo y la enumeración nos han dicho qué hay exactamente y qué de eso es débil. TechNova ya no es una caja negra: sabemos que su tienda expone una probable inyección SQL y ficheros sensibles, que dev corre una consola de debug y una base de datos anticuada expuesta, y que la red interna regala información por SMB y SNMP. Todo documentado, validado y ordenado por prioridad.
Y aquí termina el trabajo de "identificar". Hasta ahora no hemos explotado nada: hemos dibujado el mapa de puertas débiles. En el Módulo 4: Explotación de Vulnerabilidades, cogeremos la candidata número uno de esta lista y pasaremos —siempre dentro del alcance, con permiso explícito y control del impacto— de "esto parece vulnerable" a "esto es explotable y esto es lo que un atacante conseguiría". La primera lección, 04-01 Introducción a la Explotación, arranca justo aquí: con nuestra lista priorizada de vulnerabilidades candidatas en la mano.
Curso de Pentesting: Técnicas de Pruebas de Penetración
Módulo 1: Introducción al Pentesting
- ¿Qué es el Pentesting?
- Tipos de Pentesting
- Fases del Pentesting
- Ética y Legalidad en el Pentesting
- Metodologías y Estándares del Sector
Módulo 2: Reconocimiento y Recolección de Información
- Reconocimiento Pasivo
- Reconocimiento Activo
- Herramientas de Recolección de Información
- OSINT y Análisis de la Superficie de Ataque
Módulo 3: Escaneo y Enumeración
Módulo 4: Explotación de Vulnerabilidades
- Introducción a la Explotación
- Explotación de Vulnerabilidades Web
- Explotación de Vulnerabilidades de Red
- Explotación de Vulnerabilidades de Sistemas
- Ataques a Contraseñas y Autenticación
Módulo 5: Post-Explotación
- Escalada de Privilegios
- Mantenimiento del Acceso
- Pivoting y Movimiento Lateral
- Cobertura de Huellas y Anti-Forense
Módulo 6: Reporte y Remediación
- Documentación de Hallazgos
- Clasificación de Riesgos y CVSS
- Recomendaciones de Remediación
- Presentación de Resultados
