前言

Redis

REmote DIctionary Server(Redis) 是完全开源免费的,遵守BSD协议,Redis是一个由Salvatore Sanfilippo写的key-value存储系统。

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

漏洞原因

Redis因配置不当可造成未授权访问。攻击者无需通过身份认证便可访问到内部数据,造成敏感信息泄露,也可以恶意执行flushall来清空所有数据。如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

漏洞影响

这里通过再ZoomEye上搜索可以发现,存在这样漏洞的服务器还是挺多的:

漏洞环境搭建

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

解压缩:tar xzf redis-2.8.17.tar.gz
进入redis目录:cd redis-2.8.17
安装:make

如图所示,即为安装成功
make结束后,进入src目录:cd src
将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了)

cp redis-cli /usr/bin
cp redis-server /usr/bin

然后再切回上级目录,将配置文件拷贝到/etc目录下
cp redis.conf /etc/

然后尝试启动redis:
redis-server /etc/redis.conf

如上图所示即为启动成功了

在前言中已经提到,该漏洞出现的原因是由于错误的配置导致,所以修改一下配置文件:

修改此处的绑定IP

关闭Centos7的防火墙

然后使用命令启动:

在另一台机器上尝试无密码连接:

ok, 环境就搭建好了

漏洞复现

未授权访问

无密码连接成功:

写入webshell

假设目标服务器上不仅开启了无需授权的redis,还开启了web服务的话,可以尝试写入一句话木马:


1.靶机redis链接未授权,在攻击机上能用redis-cli连上,如上图,并未登陆验证
2.开了web服务器,并且知道路径(如利用phpinfo,或者错误爆路经),还需要具有文件读写增删改查权限
(我们可以将dir设置为一个目录a,而dbfilename为文件名b,再执行save或bgsave,则我们就可以写入一个路径为a/b的任意文件。)

这里我们尝试再web目录下写入文件,由于我们本地环境,所以我们已知web目录:/var/www/html/:

写入成功,尝试访问一下:

写入一句话木马

写入成功,使用蚁剑进行连接:

写入SSH公钥实现SSH登录

首先需要在攻击机上生成rsa的公钥:

然后将公钥写如到redis缓存,再将db文件设置为/root/.ssh/authorized_keys文件中:

然后就可以尝试连接这台服务器:

利用crontab写入定时任务,反弹shell

先在靶机上监听一个端口:

设置一个定时任务

在kali上成功拿到反弹shell:

修复建议

  1. 禁止外部访问Redis服务端口
  2. 禁止使用root权限启动redis服务
  3. 配置安全组,限制可连接Redis服务器的IP
最后修改:2020 年 09 月 08 日 04 : 27 PM