zoukankan      html  css  js  c++  java
  • 漏洞复现-ElasticSearch 命令执行漏洞(CVE-2014-3120)

    基础知识

    1. 全文检索:扫描文章中的每一个词,给每一个词建立一个索引指明该词在文章中出现的位置和次数。当进行查询操作时直接根据索引进行查找。

    2. 倒排索引:索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。

    举个栗子:文档A和C里面都有一个词B,我们查找B的时候,是先找到关键词B,再根据B存储的索引找到A和C;而不是先找到A,在A里面检索B,再找到C,在C里面检索B。

    3. ElasticSearch:基于开源的全文检索引擎Lucene,是一个实时分布式搜索和分析引擎,支持全文检索,结构化检索(就是咱们平时用的sql语句的形式)和数据分析等。

    4. ES的一些核心概念:

    • Index:索引,就是我们平时理解的数据库(database)
    • type:类型,就是表(table)
    • document:文档,es的最小数据单元。就是表中的一行数据(row)
    • field:字段,就是列(column)
    • mapping:映射,就是约束(schema)

    漏洞原理

    ElasticSearch 1.2版本之前支持动态脚本。漏洞是通过_search方法的参数传入恶意代码,远程执行任意MVEL表达式和Java代码。

     

    复现环境

    在ubuntu 16.04虚拟机中用vulhub靶场提供的docker容器来复现

    jdk版本1.7

    ElasticSearch版本1.1.1

    影响版本

    ElasticSearch 1.2之前的版本

    复现过程

    1. 启动docker容器,先创建一条数据:

    2. 按照vulhub给出的例子来传参数:

    3. 既然能执行任意代码,应该也能读取文件:

    3. 执行操作系统命令(还可以同时执行多行恶意代码:) 

     

    防御方法

    1. 升级版本

    2. 在elasticsearch.yml里配置script.disable_dynamic: true 

     

    本文仅用于技术学习和交流,严禁用于非法用途,否则产生的一切后果自行承担。

    如需转载,请注明出处,这是对他人劳动成果的尊重。

  • 相关阅读:
    添加语句<tx:annotation-driven transaction-manager="txManager"/>报错
    ssh学习(1)
    C.Sum 2017 ACM-ICPC 亚洲区(西安赛区)网络赛
    Problem 1004-2017 ACM/ICPC Asia Regional Shenyang Online
    Problem 1002-2017 ACM/ICPC Asia Regional Shenyang Online
    2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛- A. Banana
    HDU 1052 Tian Ji -- The Horse Racing(贪心)
    HDU 1236 排名
    HDU 2550 百步穿杨
    HDU 1084 What Is Your Grade?(排序)
  • 原文地址:https://www.cnblogs.com/sallyzhang/p/12450035.html
Copyright © 2011-2022 走看看