
Scripts de prueba de concepto y laboratorio Docker para reproducir CVE-2023-41892, una vulnerabilidad de ejecución remota de código sin autenticación previa en Craft CMS. Incluye exploits de envenenamiento de registros (log poisoning) y escritura de archivos MSL de Imagick.
Este repositorio contiene scripts de prueba de concepto y un laboratorio Vulhub local para reproducir CVE-2023-41892, una vulnerabilidad de ejecución remota de código sin autenticación en Craft CMS.
Utilice este proyecto solo en un laboratorio local autorizado u otros sistemas donde tenga permiso explícito para realizar pruebas.
CVE-2323-41892_PoC/
+-- README.md
+-- LFI_to_RCE.py
+-- Imagick_PoC.py
+-- Vulnhub_env/
+-- docker-compose.yml
+-- README.md
+-- README.zh-cn.md
+-- 1.png ... 5.png
| Ruta | Propósito |
|---|
LFI_to_RCE.py | PoC para envenenamiento de logs seguido de inclusión de archivos locales a través del gadget Psy\Configuration. |
Imagick_PoC.py | PoC para escritura arbitraria de archivos a través del gadget Imagick MSL. |
Vulnhub_env/docker-compose.yml | Laboratorio Docker Compose que inicia Craft CMS 4.4.14 vulnerable y MySQL 5.7. |
Vulnhub_env/README.md | Notas de reproducción originales al estilo Vulhub con ejemplos de solicitudes y capturas de pantalla. |
Vulnhub_env/README.zh-cn.md | Versión en chino de las notas de reproducción de Vulhub. |
Vulnhub_env/*.png | Capturas de pantalla utilizadas por la documentación del entorno Vulhub. |
CVE-2023-41892 afecta a las versiones de Craft CMS desde 4.0.0-RC1 hasta 4.4.14. El problema fue corregido en Craft CMS 4.4.15.
El endpoint vulnerable utilizado por ambos scripts es:
/index.php?action=conditions/render
Los PoCs apuntan a la URL predeterminada del laboratorio local:
http://localhost:8088
Si su laboratorio se ejecuta en otro host o puerto, actualice el valor de URL cerca de la parte superior de LFI_to_RCE.py y Imagick_PoC.py.
requestsInstale la dependencia de Python:
pip install requests
Inicie el entorno vulnerable de Craft CMS:
cd Vulnhub_env
docker compose up -d
Abra el instalador de Craft CMS:
http://localhost:8088/admin/install
Utilice la siguiente configuración de base de datos predeterminada durante la instalación:
| Configuración | Valor |
|---|---|
| Host de la base de datos | db |
| Nombre de la base de datos | craftcms |
| Usuario de la base de datos | root |
| Contraseña de la base de datos | root |
Después de la instalación, confirme que el sitio es accesible en:
http://localhost:8088
Ejecute los comandos desde la raíz del repositorio:
cd CVE-2323-41892_PoC
Ejecute:
python LFI_to_RCE.py
Lo que hace:
Envía JSON malformado que contiene código PHP al log de Craft CMS.
Construye una ruta de archivo de log usando la fecha local actual:
../storage/logs/web-YYYY-MM-DD.log
Utiliza craft\elements\conditions\users\UserCondition con \Psy\Configuration para incluir el archivo de log envenenado.
Verifica si la salida de phpinfo() aparece en la respuesta.
Salida esperada de éxito:
[*] Starting Log Poisoning...
[+] Payload sent successfully!
[*] Starting LFI to RCE...
[+] phpinfo() executed successfully!
Ejecute:
python Imagick_PoC.py
Lo que hace:
Imagick.webshell.php en la raíz web.http://localhost:8088/webshell.php y busca phpinfo().Salida esperada de éxito:
[*] Sending multipart/form-data payload to trigger Imagick gadget...
[+] Success: phpinfo() output found.
La ruta de Imagick puede bloquear el worker de PHP después de que se active el payload. En el laboratorio Vulhub esto puede ser normal si webshell.php se escribe antes del bloqueo.
Ambos scripts definen la URL objetivo en la parte superior del archivo:
URL = "http://localhost:8088"
Cambie este valor si el laboratorio vulnerable está expuesto en otra dirección.
Imagick_PoC.py verifica el archivo generado en:
OUTPUT_FILE = "/webshell.php"
Confirme que los contenedores están ejecutándose:
cd Vulnhub_env
docker compose ps
Confirme que el sitio es accesible en http://localhost:8088.
Verifique si otro servicio ya está usando el puerto 8088.
Actualice el valor de URL en los scripts de Python si cambió el puerto expuesto.
LFI_to_RCE.py no muestra PHP Versionstorage/logs/.web-YYYY-MM-DD.log en LFI_to_RCE.py.Imagick_PoC.py devuelve 404 para /webshell.php/tmp/php*.Detenga el laboratorio:
cd Vulnhub_env
docker compose down
Elimine los contenedores y el volumen de la base de datos si desea una reinstalación limpia:
docker compose down -v
Actualice Craft CMS a 4.4.15 o posterior.
Si se sospecha de explotación, rote la clave de seguridad de Craft CMS, las credenciales de la base de datos, los secretos de la aplicación y cualquier credencial almacenada en el entorno.