Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。但如果当把数据存储在单个Redis的实例中,当读写体量比较大的时候,服务端就很难承受。为了应对这种情况,Redis就提供了主从模式,主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中主机和从机数据相同,而从机只负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。
在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在Redis中实现一个新的Redis命令,通过写c语言并编译出.so文件。
在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上。然后在从机上加载so文件,我们就可以执行拓展的新命令了
Redis4.x 5.x
OS: macOS
IP:172.16.27.144
服务:Redis服务(容器运行)
启动Redis服务
# docker run -p 6379:6379 -d redis redis-server
OS: kali
IP:172.16.50.12
主机B上下载redis-rce文件
# git clone https://github.com/Ridter/redis-rce
# cd redis-rce
root@kali:~/redis-rce# ls
exp_lin.so exp_osx.so README.md redis-rce.py
确认主机B可以访问到主机A中的Redis服务
root@kali:~/redis-rce# redis-cli -h 172.16.27.144
172.16.27.144:6379> info
# Server
redis_version:5.0.5
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:8e192385ffc80cce
......
从上图可知,该rce脚本支持交互式和反反弹式,上图是交互式,反弹式使用nc即可,如下图
修复方法:服务访问认证
之前也写过有关redis的文章,如:
redis知识体系概述
https://securityer.lofter.com/post/1d0f3ee7_8ff71dc
redis安装与安全配置
https://securityer.lofter.com/post/1d0f3ee7_6da16ef
redis安全性测试
https://securityer.lofter.com/post/1d0f3ee7_6db4f1f
通过redis快速渗透某2012服务器
https://securityer.lofter.com/post/1d0f3ee7_7a45269