由 zip 压缩绕过目录穿越限制导致的 getshell 分析
字数 1002 2025-08-29 08:30:24

ZIP压缩绕过目录穿越限制导致的Getshell分析

漏洞原理

该漏洞源于ZIP压缩文件处理过程中对目录穿越防护的绕过。当系统解压ZIP文件时,如果没有正确验证或过滤路径中的特殊字符(如../),攻击者可以构造恶意ZIP文件实现任意文件写入,最终可能导致服务器被完全控制(getshell)。

关键原理点

  1. ZIP压缩命令的特殊路径处理:

    • zip -r ./a.zip ..\*.\a 这种命令模式可能绕过目录限制
    • .. 表示上级目录,* 是通配符,a 是文件名的一部分
  2. 解压时的验证缺失:

    • 系统未正确验证ZIP文件中包含的路径
    • 目录穿越防护被特殊构造的payload绕过

漏洞复现步骤

1. 准备恶意ZIP文件

  1. 创建一个包含特殊路径的文件结构
  2. 使用zip命令构造恶意压缩包:
    zip -r ./malicious.zip ..\*.\malicious_file
    

2. 寻找上传点

  1. 在目标CMS系统中找到允许上传ZIP文件的功能点(如主题上传)
  2. 上传构造好的恶意ZIP文件

3. 观察效果

  1. 检查系统目录结构变化
  2. 确认是否在预期外的目录创建了文件

4. Getshell利用

  1. 在Linux环境下:

    • 写入反弹shell的定时任务文件
    • 例如写入到/var/spool/cron/root/etc/cron.d/
  2. 设置监听:

    nc -lvnp [监听端口]
    
  3. 等待定时任务执行,获取反弹shell

漏洞代码分析

漏洞路由定位

  1. 找到处理ZIP上传和解压的路由
  2. 分析解压功能的代码实现

防护绕过机制

  1. 系统虽然有限制目录穿越的代码
  2. 但特殊payload(如包含*的模式)可以绕过防护:
    • ..\*.\file 这种模式可能被错误解析
    • 星号(*)在路径处理中被特殊对待

错误处理

  1. 解压过程中可能出现报错
  2. 但报错发生在文件已经写入之后,不影响漏洞利用

防护建议

  1. 严格验证ZIP文件中的路径:

    • 过滤所有../等目录穿越尝试
    • 检查绝对路径
  2. 限制解压目录:

    • 强制在指定目录内解压
    • 使用chroot等隔离技术
  3. 文件权限控制:

    • 运行解压功能的用户应具有最小权限
    • 关键目录设置只读权限
  4. 输入验证:

    • 检查ZIP文件内容白名单
    • 限制允许的文件类型和扩展名
  5. 日志监控:

    • 记录所有文件解压操作
    • 监控异常文件创建行为

总结

该漏洞展示了文件处理过程中路径验证的重要性。通过精心构造的ZIP文件,攻击者可以绕过常规防护实现任意文件写入,最终可能导致服务器完全沦陷。开发人员应特别注意文件上传和解压功能的安全性设计,实施多层防护措施。

ZIP压缩绕过目录穿越限制导致的Getshell分析 漏洞原理 该漏洞源于ZIP压缩文件处理过程中对目录穿越防护的绕过。当系统解压ZIP文件时,如果没有正确验证或过滤路径中的特殊字符(如 ../ ),攻击者可以构造恶意ZIP文件实现任意文件写入,最终可能导致服务器被完全控制(getshell)。 关键原理点 ZIP压缩命令的特殊路径处理: zip -r ./a.zip ..\*.\a 这种命令模式可能绕过目录限制 .. 表示上级目录, * 是通配符, a 是文件名的一部分 解压时的验证缺失: 系统未正确验证ZIP文件中包含的路径 目录穿越防护被特殊构造的payload绕过 漏洞复现步骤 1. 准备恶意ZIP文件 创建一个包含特殊路径的文件结构 使用zip命令构造恶意压缩包: 2. 寻找上传点 在目标CMS系统中找到允许上传ZIP文件的功能点(如主题上传) 上传构造好的恶意ZIP文件 3. 观察效果 检查系统目录结构变化 确认是否在预期外的目录创建了文件 4. Getshell利用 在Linux环境下: 写入反弹shell的定时任务文件 例如写入到 /var/spool/cron/root 或 /etc/cron.d/ 设置监听: 等待定时任务执行,获取反弹shell 漏洞代码分析 漏洞路由定位 找到处理ZIP上传和解压的路由 分析解压功能的代码实现 防护绕过机制 系统虽然有限制目录穿越的代码 但特殊payload(如包含 * 的模式)可以绕过防护: ..\*.\file 这种模式可能被错误解析 星号(* )在路径处理中被特殊对待 错误处理 解压过程中可能出现报错 但报错发生在文件已经写入之后,不影响漏洞利用 防护建议 严格验证ZIP文件中的路径: 过滤所有 ../ 等目录穿越尝试 检查绝对路径 限制解压目录: 强制在指定目录内解压 使用chroot等隔离技术 文件权限控制: 运行解压功能的用户应具有最小权限 关键目录设置只读权限 输入验证: 检查ZIP文件内容白名单 限制允许的文件类型和扩展名 日志监控: 记录所有文件解压操作 监控异常文件创建行为 总结 该漏洞展示了文件处理过程中路径验证的重要性。通过精心构造的ZIP文件,攻击者可以绕过常规防护实现任意文件写入,最终可能导致服务器完全沦陷。开发人员应特别注意文件上传和解压功能的安全性设计,实施多层防护措施。