前言
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:
修复建议
- 禁止外部访问Redis服务端口
- 禁止使用root权限启动redis服务
- 配置安全组,限制可连接Redis服务器的IP