一、了解漏洞
1.redis是什么?
Redis是一个Key-Value(根据关键字取词)数据库。
分布式存储系统:是将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。 [1]

特点:开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、
和Memcached类似,它支持存储的value 类型相对更多,包括 string(字符串)、list ( 链表)、 set(集合)、zset(sorted set – 有序集合)和 hash(哈希类型)。这些数据类型都支持push/pop 、 add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上, redis支持各种不同方式的排序。与 Memcached 一样,为了保证效率,数据都是缓存在内存中。区别的是 redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave ( 主从)同步。

2.redis未授权访问是什么漏洞?
Redis因配置不当可以导致未授权访问,被攻击者恶意利用。当前流行的针对Redis未授权访问的一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。

二、分析漏洞原理 1.redis未授权访问漏洞产生的原因是什么?
• redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则、避免其他非信任来源IP访问等相关安全策略,直接暴露在公网上
• 没有设置密码认证(一般为空),可以免密码远程登录redis服务
2.一个系统存在这个漏洞会导致什么后果?
• 攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以通过恶意执行flushall来清空所有数据
• 攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件
• 如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害者服务器//////
Ps:SSH免密登录原理简介:
在正式开始介绍复现过程前,先说明一下我复现的是最严重的漏洞利用情况即以root身份登录redis服务写入ssh公钥实现使用ssh免密登录受害主机。
SSH提供两种登录验证方式,一种是口令验证也就是账号密码登录,另一种是**验证也就是我们想要的免密登录了,这里只简单说一下**验证的原理。
所谓**验证,其实就是一种基于公钥密码的认证,使用公钥加密、私钥解密,其中公钥是可以公开的,放在服务器端,你可以把同一个公钥放在所有你想SSH远程登录的服务器中,而私钥是保密的只有你自己知道,公钥加密的消息只有私钥才能解密,大体过程如下:
(1)客户端生成私钥和公钥,并把公钥拷贝给服务器端;
(2)客户端发起登录请求,发送自己的相关信息;
(3)服务器端根据客户端发来的信息查找是否存有该客户端的公钥,若没有拒绝登录,若有则生成一段随机数使用该公钥加密后发送给客户端;
(4)客户端收到服务器发来的加密后的消息后使用私钥解密,并把解密后的结果发给服务器用于验证;
(5)服务器收到客户端发来的解密结果,与自己刚才生成的随机数比对,若一样则允许登录,不一样则拒绝登录。

三、漏洞的重现和利用
NOTE:一定要在链接复制出来的虚拟机里面做实验,因为如果安装配置失败,可以直接删除 虚拟机,在新复制的虚拟机里面继续尝试。

Ps:环境搭建问题:
需要两个不同IP且能相互ping通的虚拟机,这里可能需要多多探索,visual box可能不好使,怎样才能ping通,,可能需要其他虚拟机软件

redis未授权访问漏洞学习文档
redis未授权访问漏洞学习文档
redis未授权访问漏洞学习文档
redis未授权访问漏洞学习文档
Docker尝试在阿里云服务器上进行,已另做记录,由于资料有限,仅限于docker安装,基础命令。未实现docker下的漏洞复现。
参考:https://www.cnblogs.com/bmjoker/p/9548962.html
https://www.cnblogs.com/ECJTUACM-873284962/p/9561993.html

1.安装redis(这里就需要考虑如何安装,是从软件源安装还是源码编译安装)

redis未授权访问漏洞学习文档
redis未授权访问漏洞学习文档
redis未授权访问漏洞学习文档

make结束后,进入src目录:cd src,将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了)
2.根据漏洞原理配置redis,使redis变成处于漏洞的状态。
redis未授权访问漏洞学习文档
redis未授权访问漏洞学习文档
redis未授权访问漏洞学习文档
redis未授权访问漏洞学习文档

#######################
Ps:前后两次尝试所用的redis版本不相同,后面是用的是redis2.8.17,并没有修改redis.config的操作,在其redis.config文件中也发现redis未授权访问漏洞学习文档 已注释且没有protected-mode,
redis未授权访问漏洞学习文档
##################################
redis未授权访问漏洞学习文档
启动redis服务进程后,就可以使用测试攻击机程序redis-cli和靶机的redis服务交互了。 比如:

redis未授权访问漏洞学习文档
从登录的结果可以看出该redis服务对公网开放,且未启用认证。

3.安装ssh服务端
redis未授权访问漏洞学习文档
4.开启ssh公钥登录,并验证是否正确开启。
redis未授权访问漏洞学习文档
ps -e | ssh
最后显示:3228 ? 00:00:00 sshd说明ssh服务器已启用
攻击机
redis未授权访问漏洞学习文档
进入.ssh目录:cd .ssh/,将生成的公钥保存到kitty.txt
[email protected]:~/.ssh# (echo -e “\n\n”;cat id_rsa.pub; echo -e “\n\n”) > kitty.txt
redis未授权访问漏洞学习文档
进入.ssh目录:cd .ssh/,将生成的公钥保存到kitty.txt
[email protected]:~/.ssh# (echo -e “\n\n”;cat id_rsa.pub; echo -e “\n\n”) > kitty.txt
redis未授权访问漏洞学习文档
远程登录主机A的redis服务:redis-cli -h 192.168.0.146并使用config get dir命令得到redis备份的路径
[email protected]:~/.ssh# redis-cli -h 192.168.152.133
192.168.152.133:6379> config get dir

  1. “dir”
  2. “/home/python/.ssh”
    redis未授权访问漏洞学习文档
    更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh)
    (这里第一次结果是没有权限,后来重做一次猜测应该是没有用前面的配置redis的文件启动redis-server)
    redis未授权访问漏洞学习文档
    redis未授权访问漏洞学习文档

已登陆,验证成功!
5.对漏洞进行利用(提示:利用redis写入ssh证书并登录),是否造成了上述分析中的结果
4中已验证
这里看到上传木马的操作,试了一下:
redis未授权访问漏洞学习文档
redis未授权访问漏洞学习文档

成功!
6.试分析如果公司服务器存在这种漏洞,会对公司有什么影响?
• 可能导致敏感信息泄露,丢失所有数据
• 攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件
• 如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害者服务器//////
四、使用openvas对该存在漏洞的系统进行扫描
1.查看扫描结果,是否能得到对该漏洞的报告?
很遗憾我没有在本地搭建openvas,使用学长搭的,虚拟机属于内网,担心扫不到,由于已经有之前的安全项目的经验,openvas的扫描方法,结果分析,漏洞验证都有所接触,故在此跳过。
2.了解openvas使用的各种插件,即nvt是什么
3.对应扫描该漏洞的nvt是什么?(提示:在扫描结果中可以找到nvt的名称,以及OID编号, 在http://www.openvas.org/openvas-nvt-feed.html中可以根据OID编号查找对应nvt的文件名是 什么,然后可以在/var/lib/openvas/plugins/目录下,找到该文件)扫描原理大致是什么?(可 以看nvt的源代码)
目前还没有合适的资料,粘贴一个网上的

https://m.2cto.com/database/201805/742931.html
::使用openvas对该存在漏洞的系统进行扫描
扫描结果发现redis服务空密码漏洞
redis未授权访问漏洞学习文档
这个漏洞可能会造成远程无密码登陆
redis未授权访问漏洞学习文档
该漏洞使用了编号为1.3.6.1.4.1.25623.1.0.105291的nvt,找到文件名:
redis未授权访问漏洞学习文档
找到该nvt的源码
redis未授权访问漏洞学习文档
原理是获得redis服务的端口号,直接空密码连接一下,如果能登录redis服务,则说明redis为空密码,有漏洞。

相关文章:

  • 2021-11-30
  • 2022-01-11
  • 2021-08-23
  • 2021-04-02
  • 2021-08-16
  • 2021-07-15
  • 2021-08-20
猜你喜欢
  • 2021-09-08
  • 2021-04-11
相关资源
相似解决方案