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
2
3
4
5
Redis 未授权访问是 Redis 暴露在网络中且没有认证,攻击者可以直接连接 6379 端口执行 Redis 命令。

常见利用思路包括写 SSH 公钥、写 crontab 计划任务、写 WebShell 到 Web 目录,以及通过主从复制加载恶意 so 实现 RCE。

修复上需要禁止 Redis 暴露公网,绑定内网地址,设置 requirepass,安全组限制访问来源,重命名或禁用高危命令,并使用低权限用户运行 Redis。