ElasticSearch的這個(gè)漏洞的編號(hào)是CVE⑵015⑴427,影響版本為1.3.0⑴.3.7和1.4.0⑴.4.2,漏洞成因詳見(jiàn):http://drops.wooyun.org/papers/5107,本文具體探討1下漏洞利用。
1.2.0版本默許是禁用了腳本履行,如果要使用該功能的話,要在elasticsearch.yml中設(shè)置script.disable_dynamic:true。
在1.3.0版本,開(kāi)始使用groovy和sandbox來(lái)進(jìn)行腳本履行,其中使用了白名單機(jī)制,限制了可以調(diào)用的類和方法等等。
但是由于Java中的反射機(jī)制,我們可以通過(guò)白名單中的類獲得到Runtime,也就造成了遠(yuǎn)程代碼履行漏洞,威力很大。
空話不多說(shuō),使用es的python客戶端進(jìn)行測(cè)試:
這里要注意,需要指定1下腳本的類型為groovy。這是由于1.3版本中,MVEL依然是默許的語(yǔ)言,效果以下:
既然是遠(yuǎn)程代碼履行,那攻擊面實(shí)在是太廣闊了,這酸爽。
(1)謝絕服務(wù)攻擊
調(diào)用exit便可。
(2)getshell
測(cè)試結(jié)果,成功返回1個(gè)反彈shell:
如果Linux下,很多服務(wù)器都是以root權(quán)限運(yùn)行,提權(quán)都省了~~
(3)任意文件讀取
獲得到輸入流以后readLine就可以取得回顯。
(4)任意文件寫入(寫shell)
只寫了使用java代碼實(shí)現(xiàn)的,并且本地測(cè)試成功,不過(guò)簡(jiǎn)單的1段java代碼,使用反射竟然能這么長(zhǎng):
這里不再寫出exp程序,由于比較簡(jiǎn)單,不適用es的python api,也能夠自己構(gòu)造1個(gè)要求給es服務(wù)器。1個(gè)query對(duì)應(yīng)1項(xiàng)攻擊方法。
批量利用的話,掃IP段的9200然后上攻擊代碼就好了,希望大家玩的愉快。