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.
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),joomscanodroopescan(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 poco<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:
- ¿Necesita autenticación? Muchos exploits de Exploit-DB son "RCE autenticado": necesitas credenciales (busca credenciales por defecto o reutilizadas).
- ¿Qué ruta y qué parámetros usa? Puede que en tu objetivo la aplicación esté en
/app/y no en la raíz. - ¿Qué hace exactamente? Ejecutar un comando, subir una web shell, crear un usuario...
- ¿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.
Ejemplos del catálogo
- 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.