
Log4Shell Prueba de concepto derivado de https://github.com/kozmer/log4j-shell-poc
Este repositorio es una prueba de concepto para la vulnerabilidad CVE-2021-44228.
Se deriva de este repositorio.
En este repositorio he creado un ejemplo de una aplicación vulnerable y una demostración de cómo explotarla.
He modificado el script de python upstream para automatizar la generación de esta vulnerabilidad.
En este repositorio hay dos Dockerfiles para un uso sencillo, como se indica a continuación:
En esta imagen Docker descargamos java jdk-8u20 desde mi Google Drive, ya que es necesario crear una cuenta en Oracle para poder descargarlo.
Si no confías en esto, puedes modificar el archivo de descarga del Dockerfile y descargar el jdk desde aquí (Asegúrate de descargar la versión Java SE Development Kit 8u20 para linux).
Esta imagen Docker ejecuta una versión modificada del script proporcionado por kozmer y hace lo siguiente:
Los puertos predeterminados usados para esto son 1389 para JNDI LDAP, 8000 para el SimpleHttpServer y 9001 para la reverse shell.
Para compilar y ejecutar esto, ejecuta:
sudo docker build -t log4j-ldap .
sudo docker run -d -p 8000:8000 -p 1389:1389 log4j-ldap
Usa docker logs <containerID> para ver los registros de la aplicación y recuperar la entrada correcta que se debe proporcionar a la aplicación vulnerable.
Para este PoC he considerado las IPs predeterminadas que usa docker (172.17.0.1/24); puedes cambiarlas en el script ./Docker-Ldap/run.sh para ajustarlas a tu escenario.
En esta imagen docker se ejecuta una aplicación web vulnerable que usa la versión sin parchear de Log4J 2 y la expone en el puerto 8080.
El código fuente de la aplicación también está disponible en ./Docker-Vuln; créditos a kozmer.
Para compilar y ejecutar esto, ejecuta:
sudo docker build -t log4j-ldap .
sudo docker run -d -p 8000:8000 -p 1389:1389 log4j-ldap
¡El campo Username es inyectable!
Para recibir la reverse shell debes crear un listener de netcat en el puerto 9001
nc -lvnp 9001
Después de descargar el repositorio, asegúrate de tener instalado el motor de docker y de no tener otras imágenes docker ejecutándose en tu máquina.
config.sh para construir las imágenes y ponerlas en marcha. (Este script se ejecuta con privilegios de root; puedes modificarlo según corresponda).9001.localhost:8080.docker logs <containerID>).