
Scripts de preuve de concept et laboratoire Docker pour reproduire la CVE-2023-41892, une vulnérabilité d'exécution de code à distance sans authentification dans Craft CMS. Inclut des exploits de log poisoning et d'écriture de fichiers MSL Imagick.
Ce dépôt contient des scripts de preuve de concept et un laboratoire local Vulhub pour reproduire la CVE-2023-41892, une vulnérabilité d'exécution de code à distance sans authentification préalable dans Craft CMS.
N'utilisez ce projet que dans un laboratoire local autorisé ou sur d'autres systèmes pour lesquels vous disposez d'une autorisation explicite de test.
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
| Chemin | Rôle |
|---|
LFI_to_RCE.py | PoC pour l'empoisonnement des journaux suivi d'une inclusion locale de fichier via le gadget Psy\Configuration. |
Imagick_PoC.py | PoC pour l'écriture arbitraire de fichier via le gadget MSL Imagick. |
Vulnhub_env/docker-compose.yml | Laboratoire Docker Compose qui démarre Craft CMS 4.4.14 vulnérable et MySQL 5.7. |
Vulnhub_env/README.md | Notes de reproduction originales de style Vulhub avec exemples de requêtes et captures d'écran. |
Vulnhub_env/README.zh-cn.md | Version chinoise des notes de reproduction Vulhub. |
Vulnhub_env/*.png | Captures d'écran utilisées par la documentation de l'environnement Vulhub. |
La CVE-2023-41892 affecte les versions de Craft CMS allant de 4.0.0-RC1 à 4.4.14. Le problème a été corrigé dans Craft CMS 4.4.15.
Le point de terminaison vulnérable utilisé par les deux scripts est :
/index.php?action=conditions/render
Les PoC ciblent l'URL par défaut du laboratoire local :
http://localhost:8088
Si votre laboratoire s'exécute sur un autre hôte ou port, mettez à jour la valeur URL près du haut de LFI_to_RCE.py et Imagick_PoC.py.
requestsInstallez la dépendance Python :
pip install requests
Démarrez l'environnement Craft CMS vulnérable :
cd Vulnhub_env
docker compose up -d
Ouvrez l'installeur Craft CMS :
http://localhost:8088/admin/install
Utilisez les paramètres de base de données par défaut suivants lors de l'installation :
| Paramètre | Valeur |
|---|---|
| Hôte de la base de données | db |
| Nom de la base de données | craftcms |
| Utilisateur de la base de données | root |
| Mot de passe de la base de données | root |
Après l'installation, vérifiez que le site est accessible à l'adresse :
http://localhost:8088
Exécutez les commandes depuis la racine du dépôt :
cd CVE-2323-41892_PoC
Exécutez :
python LFI_to_RCE.py
Ce qu'il fait :
Envoie un JSON malformé contenant du code PHP au journal de Craft CMS.
Construit un chemin de fichier journal en utilisant la date locale actuelle :
../storage/logs/web-YYYY-MM-DD.log
Utilise craft\elements\conditions\users\UserCondition avec \Psy\Configuration pour inclure le fichier journal empoisonné.
Vérifie si la sortie de phpinfo() apparaît dans la réponse.
Sortie attendue en cas de succès :
[*] Starting Log Poisoning...
[+] Payload sent successfully!
[*] Starting LFI to RCE...
[+] phpinfo() executed successfully!
Exécutez :
python Imagick_PoC.py
Ce qu'il fait :
Imagick.webshell.php dans la racine web.http://localhost:8088/webshell.php et vérifie la présence de phpinfo().Sortie attendue en cas de succès :
[*] Sending multipart/form-data payload to trigger Imagick gadget...
[+] Success: phpinfo() output found.
L'exploitation via Imagick peut faire planter le worker PHP après le déclenchement de la charge utile. Dans le laboratoire Vulhub, cela peut rester normal si webshell.php est écrit avant le plantage.
Les deux scripts définissent l'URL cible en haut du fichier :
URL = "http://localhost:8088"
Modifiez cette valeur si le laboratoire vulnérable est exposé sur une autre adresse.
Imagick_PoC.py vérifie le fichier généré à l'adresse :
OUTPUT_FILE = "/webshell.php"
Vérifiez que les conteneurs sont en cours d'exécution :
cd Vulnhub_env
docker compose ps
Vérifiez que le site est accessible à l'adresse http://localhost:8088.
Vérifiez si un autre service utilise déjà le port 8088.
Mettez à jour la valeur URL dans les scripts Python si vous avez modifié le port exposé.
LFI_to_RCE.py n'affiche pas PHP Versionstorage/logs/.web-YYYY-MM-DD.log généré dans LFI_to_RCE.py.Imagick_PoC.py renvoie 404 pour /webshell.php/tmp/php*.Arrêtez le laboratoire :
cd Vulnhub_env
docker compose down
Supprimez les conteneurs et le volume de la base de données si vous souhaitez une réinstallation propre :
docker compose down -v
Mettez à niveau Craft CMS vers 4.4.15 ou une version ultérieure.
En cas de suspicion d'exploitation, faites pivoter la clé de sécurité Craft CMS, les identifiants de la base de données, les secrets de l'application et tous les identifiants stockés dans l'environnement.