0x01 漏洞简述
Redis默认情况下,会绑定在0.0.0.0:6379(在redis3.2之后,redis增加了protected-mode,在这个模式下,非绑定IP或者没有配置密码访问时都会报错),如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等等,这样将会将Redis服务暴露在公网上,如果在没有设置密码认证(默认为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下,利用Redis自身的提供的config命令,可以进行写文件操作,攻击者还可以成功将自己的ssh公钥写入目标服务器的/root/.ssh文件的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务器登录目标服务器。
0x02 风险等级
严漏洞的评定结果如下:
评定方式 等级
威胁等级 严重
影响面 广泛重
0x03 漏洞详情
redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网;
没有设置密码认证(一般为空),可以免密码远程登录redis服务。
0x04 影响版本
Redis 2.x
Redis 3.x
Redis 4.x
Redis 5.x
0x05 漏洞验证
下载安装redis wgethttp://download.redis.io/releases/redis-3.2.11.tar.gz
解压压缩包tarzxvfredis-3.2.11.tar.gz。
进入解压目录redis-3.2.11执行make命令
将redis-server和redis-cli拷贝到/usr/bin目录下,再次启动redis-server和redis-cli就不用每次都进入安装目录。
返回目录redis-2.8.17,将redis.conf拷贝到/etc/目录下:
启动redis。
编辑etc中的redis配置文件redis.conf
去掉ip绑定,允许除本地外的主机远程登录redis服务 前面加#注释掉
将yes改为no,关闭保护模式,允许远程连接
使用redis客户端直接无账号成功登录redis:
在靶机写入cs.php文件
我们将shell写入/home/ubuntus/cs目录下,这里由于本地搭建,我们已经知道目录,如果没有的话需要在靶机创建一个目录。
由于某些原因靶机IP地址从172.16.16.214变为172.16.16.212.
我们在靶机下查看文件是否创建成功,如下图:
如果写入网站服务的路径下,后续可以使用工具连接shell
通过写入SSH公钥实现ssh登录
先在kali linux 上生成ssh公钥,一路回车:
我们ssh里写入公钥配置文件key.txt,如下图:
将key.txt写靶机(使用redis-cli -h ip命令连接靶机,写入文件)
cat key.txt|redis-cli -h 172.16.16.212 -x set *****
下一步我们远程登录靶机的Redis服务,redis-cli -h 172.16.16.212
更改redis备份路径为ssh公钥存放目录
设置上传公钥的备份文件名字为authorized_keys
save保存
我们查看靶机key与authorized_keys是否一致(如果不一致则会Permission denied)
远程登录靶机的Redis服务,redis-cli -h 172.16.16.212,免密连接成功
0x06 修复建议
1、禁止外部访问Redis服务端口
2、禁止使用root权限启动redis服务
3、配置安全组,限制可连接Redis服务器的IP