Redis 未授权访问
一句话定义
1 | Redis 未授权访问是 Redis 服务暴露在可访问网络中,且没有配置认证或访问控制,攻击者可以直接连接 Redis 执行命令。 |
默认端口
1 | 6379 |
产生原因
- Redis 绑定
0.0.0.0。 - 暴露到公网。
- 没有设置
requirepass。 - 安全组或防火墙未限制来源。
- 使用高权限用户运行 Redis。
常见危害
- 读取缓存中的敏感信息。
- 写入数据破坏业务。
- 写 SSH 公钥。
- 写 crontab 反弹 shell。
- 写 WebShell 到 Web 目录。
- 主从复制加载恶意 so 实现 RCE。
常见利用思路
1. 写 SSH 公钥
前提:
- Redis 运行用户有权限写入目标用户
.ssh/authorized_keys。 - 目标机器开放 SSH。
思路:
1 | 通过 Redis config set dir 和 dbfilename 修改写入目录和文件名,把攻击者公钥写入 authorized_keys,实现 SSH 登录。 |
2. 写计划任务
前提:
- Redis 有权限写入 crontab 目录。
思路:
1 | 写入反弹 shell 的计划任务,让系统定时执行命令。 |
3. 写 WebShell
前提:
- 知道 Web 目录。
- Redis 有权限写入 Web 目录。
- Web 目录可解析脚本。
思路:
1 | 将 WebShell 内容写入 Web 目录,再通过浏览器访问。 |
4. 主从复制加载恶意 so
思路:
1 | 攻击者搭建恶意 Redis 主库,让目标 Redis 作为从库同步恶意 so 文件,再通过 Redis 模块加载执行命令。 |
修复方案
- Redis 不暴露公网。
bind 127.0.0.1或绑定内网地址。- 设置
requirepass强密码。 - 安全组限制访问来源。
- 重命名或禁用高危命令。
- 使用低权限用户运行 Redis。
- 升级版本。
- 开启日志和监控。
面试标准回答
1 | Redis 未授权访问是 Redis 暴露在网络中且没有认证,攻击者可以直接连接 6379 端口执行 Redis 命令。 |