漏洞复现-ElasticSearch 命令执行漏洞(CVE-2014-3120)
2023-02-18 16:42:06 时间
基础知识
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
本文仅用于技术学习和交流,严禁用于非法用途,否则产生的一切后果自行承担。
如需转载,请注明出处,这是对他人劳动成果的尊重。
相关文章
- 聊聊 C++ 大一统的初始化运算符 {}
- 记一次 .NET 某新能源系统 线程疯涨 分析
- 记一次 .NET 某工控数据采集平台 线程数 爆高分析
- 记一次 .NET 差旅管理后台 CPU 爆高分析
- 记一次 .NET 某物管后台服务 卡死分析
- 为什么 C# 访问 null 字段会抛异常?
- C# 读写文件从用户态切到内核态,到底是个什么流程?
- 聊聊 C# 和 C++ 中的 泛型模板 底层玩法
- 聊聊 C# 方法重载的底层玩法
- 聊聊 C++ 和 C# 中的 lambda 玩法
- C# 类继承中的私有字段都去了哪里?
- 聊聊 C# 中的多态底层 (虚方法调用) 是怎么玩的
- windbg的时间旅行实现对 C# 程序的终极调试
- 过早的给方法中 引用对象 设为 null 可被 GC提前回收吗?
- C#语法糖系列 —— 第三篇:聊聊闭包的底层玩法
- C#语法糖系列 —— 第二篇:聊聊 ref,in 修饰符底层玩法
- C#语法糖系列 —— 第一篇:聊聊 params 参数底层玩法
- 一个高频问题:异步操作会创建线程吗?
- 记一次 .NET 某供应链WEB网站 CPU 爆高事故分析
- 记一次 .NET 某智能交通后台服务 CPU爆高分析