Explotar un CVE público: buscar, leer y adaptar exploits de searchsploit y GitHub

De un número de versión a una shell: identificar el software, buscar en searchsploit, GitHub y nuclei, leer el exploit antes de lanzarlo y arreglar los que fallan.

· 4 min de lectura

Es la técnica más etiquetada del catálogo: más de 100 máquinas tienen un CVE público en algún punto. No consiste en lanzar lo primero que sale en Google, sino en un método: saber exactamente qué versión hay, encontrar el exploit adecuado, entenderlo y adaptarlo. En el examen de la OSCP es la mitad del trabajo.

1. Identificar el software y su versión

Sin versión no hay CVE. Dónde mirar:

  • Banners de nmap: nmap -sV -sC -p- objetivo (la chuleta de nmap tiene más opciones).
  • La propia web: el pie de página, el código fuente (<meta name="generator">), las rutas de los ficheros estáticos (/wp-content/, /media/system/js/), la página de login o "Acerca de".
  • Ficheros conocidos de cada producto: CHANGELOG.txt, README.md, /administrator/manifests/files/joomla.xml, /composer.json, /package.json.
  • Cabeceras: Server, X-Powered-By, cookies con el nombre del producto.
  • Herramientas específicas de CMS (explotación de CMS): wpscan (WordPress), joomscan o droopescan (Joomla, Drupal), CMSeeK.
whatweb -a 3 http://objetivo.htb
curl -s http://objetivo.htb/CHANGELOG.txt | head
wpscan --url http://objetivo.htb -e ap,at,u --api-token TOKEN

2. Buscar el exploit

searchsploit drupal 7
searchsploit -m 44449            # copia el exploit a la carpeta actual
searchsploit -x 44449            # lo abre para leerlo

Y además:

  • GitHub: busca CVE-AAAA-NNNNN poc o <producto> <versión> exploit. Suele haber versiones más modernas y mejor escritas que la de Exploit-DB.
  • nuclei: comprueba miles de CVE de forma automática (nuclei -u http://objetivo.htb -tags cve). Si dice que es vulnerable, abre la plantilla: te enseña la petición exacta.
  • El aviso del fabricante y el diff del parche: cuando no hay exploit, comparar la versión vulnerable con la arreglada te dice dónde está el fallo.

Cuidado

Lee siempre el código antes de ejecutarlo. Los exploits de repositorios desconocidos a veces llevan sorpresas (descargan algo, borran ficheros o simplemente no hacen lo que dicen). En un trabajo real, además, un exploit que tumba un servicio es un problema serio.

3. Entender el exploit

Antes de lanzarlo, responde a esto leyendo el código:

  1. ¿Necesita autenticación? Muchos exploits de Exploit-DB son "RCE autenticado": necesitas credenciales (busca credenciales por defecto o reutilizadas).
  2. ¿Qué ruta y qué parámetros usa? Puede que en tu objetivo la aplicación esté en /app/ y no en la raíz.
  3. ¿Qué hace exactamente? Ejecutar un comando, subir una web shell, crear un usuario...
  4. ¿Para qué versiones vale? Una versión menor de diferencia puede cambiarlo todo.

4. Arreglar los que no funcionan

Los fallos más habituales al lanzar exploits antiguos:

Síntoma Causa probable Arreglo
SyntaxError en print "..." Escrito para Python 2 Paréntesis en print, bytes frente a str, o ejecútalo con python2
SSL: CERTIFICATE_VERIFY_FAILED HTTPS con certificado propio verify=False en requests
No pasa nada y no da error La ruta base o el payload no encajan Pasa el tráfico por Burp (proxies={'http':'http://127.0.0.1:8080'}) y compara con lo que esperas
La reverse shell no llega IP o puerto mal puestos, o salida bloqueada Prueba primero con ping o curl a tu equipo
El exploit en C no compila Falta una librería o es de 32 bits gcc -m32, -static, o compila en un sistema parecido al objetivo

Si el exploit original es demasiado complicado, a veces es más rápido reproducir la petición a mano en Burp: suele ser una sola petición HTTP con un payload concreto.

5. Exploits de Windows y de kernel

Para escalar en Windows sin parches (exploits de Windows), saca la lista de actualizaciones y compárala:

systeminfo
wmic qfe get HotFixID,InstalledOn
# En tu equipo
wes.py systeminfo.txt --impact "Elevation of Privilege" --exploits-only

Clásicos que aún aparecen: MS17-010 (EternalBlue, en Blue), MS16-032, MS10-059 y vulnerabilidades del Spooler como PrintNightmare. En Linux, el equivalente es comparar uname -a con linux-exploit-suggester (técnica de exploit de kernel); pruébalos como último recurso, porque pueden colgar la máquina.

  • Armageddon: Drupalgeddon2 en un Drupal 7 sin parchear.
  • Devvortex: una fuga de información de la API de Joomla que da credenciales.
  • Optimum: HttpFileServer 2.3 con RCE y luego un exploit de kernel de Windows.
  • Bizness, Broker y Boardlight: productos empresariales (OFBiz, ActiveMQ, Dolibarr) con CVE recientes.

Y después

Un CVE te da la entrada; lo siguiente es la checklist de post-explotación. Y si buscas versiones vulnerables de lo que corre dentro de la máquina (un servicio en localhost), llega a él antes con port forwarding.

Practícalo en máquinas reales

Máquinas de Hack The Box donde se usa la técnica. Cada ▶ salta al minuto del vídeo de IppSec donde aparece.

Explotación de CVE público 110 máquinas

Ver las 110 máquinas →

Explotación de CMS 22 máquinas

Ver las 22 máquinas →

Exploits de Windows 15 máquinas

Ver las 15 máquinas →

¿Ves un error o echas algo en falta? Cuéntanoslo