为什么很多SSRF最终都会打Redis?Redis未授权访问学习笔记
大家好,最近在学习 SSRF 利用链。
上一篇文章学习了 Gopher 协议,了解到它能够帮助 SSRF 与内网服务进行交互。
学习过程中发现一个出现频率极高的目标:Redis
很多利用链都是:
SSRF
↓
Gopher
↓
Redis
↓
RCE
那么问题来了:
Redis 明明只是数据库,为什么会成为攻击者最喜欢的目标之一?
今天整理一下自己的学习笔记。
一、什么是 Redis
Redis 是一种高性能 Key-Value 数据库。
特点:
- 速度快
- 内存存储
- 支持缓存
- 支持消息队列
- 支持持久化
很多网站都会使用 Redis。
例如:
- 用户登录状态
- 验证码
- 缓存数据
- 排行榜
- 购物车
都可能存储在 Redis 中。
二、什么叫未授权访问
正常情况下:
客户端
↓
认证
↓
Redis
需要密码。
例如:AUTH password 认证成功才能继续操作。
但是很多管理员部署时:没有设置密码
或者:
bind 0.0.0.0
开放到公网。
于是形成:
任何人
↓
连接6379
↓
操作Redis
这就是未授权访问。
三、为什么危险
很多人觉得:
数据库被看见最多泄露数据。
实际上 Redis 远不止如此。
因为 Redis 支持:
- 读
- 写
- 保存文件
- 修改配置
这就给攻击者创造了机会。
四、Redis 常见危险操作
- 查看数据:keys *
- 获取内容:get username
- 查看配置:config get *
- 修改配置:config set
- 保存数据:save
这些能力组合起来后,影响远超数据库泄露。
五、为什么能导致RCE
Redis 本身不会执行系统命令。
但它有一个特殊能力:把数据保存到磁盘
例如:
config set dir /var/www/html
config set dbfilename shell.php
save
如果环境配置不当。
可能将内容写入网站目录。
形成:
WebShell
思路:
写入恶意内容
↓
保存文件
↓
访问文件
↓
执行代码
这也是经典利用链之一。
六、SSRF 为什么喜欢 Redis
因为很多 Redis 只监听:127.0.0.1外部无法连接。
例如:
127.0.0.1:6379
管理员认为:
只有本机能访问因此没有额外防护。
但当网站存在 SSRF:
攻击者
↓
SSRF
↓
127.0.0.1:6379
这种信任关系就被打破。
七、经典攻击链
学习时经常看到:
所以:
SSRF只是入口。
Redis才是很多利用链的重要目标。
八、真实环境为什么越来越少
早期很多 Redis:
- 无密码
- 开放公网
导致大量安全事件。
如今默认配置已经更加安全。
常见措施:
- 密码认证
- 仅本机监听
- 防火墙限制
- 云安全组限制
因此直接利用的难度越来越高。
但理解原理仍然十分重要。
九、容易犯的错误
看到:Redis未授权
就认为:一定RCE
实际上并不是。
是否能进一步利用。
取决于:
- 文件权限
- 运行身份
- 目标环境
- 目录权限
- 系统配置
所以:
Redis未授权 ≠ 必然RCE
但风险依然很高。
十、总结
今天学习了 Redis 未授权访问原理。
记住一句话:
Redis危险的不是存储数据,而是它拥有写文件和修改配置的能力。
很多 SSRF 利用链最终都会指向 Redis。
因为 Redis 往往部署在内网,而且默认信任本机访问。
因此理解 Redis 未授权访问,是理解 SSRF 利用链的重要一步。