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