winrar 目录穿越漏洞分析
字数 1721 2025-08-29 08:31:53

WinRAR 目录穿越漏洞(CVE-2018-20250)深度分析与利用指南

漏洞概述

WinRAR目录穿越漏洞(CVE-2018-20250)是一个存在19年的高危漏洞,影响多个主流压缩软件。攻击者可通过构造恶意ACE压缩文件,在受害者解压时实现任意目录写入,最终可能导致系统被完全控制。

受影响软件及版本

  • WinRAR < 5.70 Beta
  • BandZip <= 6.2.0.0
  • 好压 <= 5.9.8.10907
  • 360压缩 < 4.0.0.1170

漏洞技术分析

漏洞根源

漏洞源于WinRAR使用的UNACEV2.dll动态链接库,该库用于处理ACE格式文件。在解压ACE文件时,未对文件名进行充分过滤,导致可实现目录穿越。

关键函数分析

Clean_Path函数

该函数对输入路径进行预处理,包含以下过滤逻辑:

  1. 路径以\\开头且包含两个\时,忽略中间部分(处理SMB路径)
  2. 路径以*:\开头时,忽略*:\(忽略盘符)
  3. 路径包含\..\时,忽略\..\(防止目录回溯)
  4. 路径开头为*:*且不为*:\时,忽略*:(处理特殊格式路径)

GetDevicePathLen函数

该函数判断路径类型并返回不同值:

  1. 路径以\\开头且包含多个\:返回第四个斜杠与开头的偏移量
  2. 路径以\开头但不以\\开头:返回1
  3. 路径以*:开头但不以*:\开头:返回2
  4. 路径以*:\开头:返回3

漏洞触发原理

GetDevicePathLen返回非0值时,路径会被视为绝对路径而非相对路径。通过构造特殊路径绕过Clean_Path的过滤,可实现任意目录写入。

漏洞利用方法

路径构造技巧

  1. 基本目录穿越

    • 使用C:C:\some_folder\some_file.txt路径
    • 经过Clean_Path处理后变为C:\some_folder\some_file.txt
    • GetDevicePathLen返回非0值,实现绝对路径写入
  2. SMB共享攻击

    • 构造路径C:\\\10.10.10.10\smb_folder\file.txt
    • 处理后变为\\10.10.10.10\smb_folder\file.txt
    • 实现共享文件的目录穿越

实际利用场景

  1. 开机自启动目录写入

    • 目标路径1(需管理员权限):
      C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
    • 目标路径2(无需管理员权限):
      C:\Users\$user_name\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
    • 特殊构造路径:
      C:C:../AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/some_file.exe
      假设解压目录为C:\Users\$user_name\DesktopDownloadsC:../会回溯至用户目录
  2. DLL劫持

    • 覆盖系统关键DLL文件
    • 需要了解目标系统环境

漏洞利用实现步骤

手动构造恶意ACE文件

  1. 使用WinACE创建ACE文件,选择"store full path"选项
  2. 使用WinHex等工具修改文件路径为恶意路径
  3. 修改文件头中的关键字段:
    • hdr_size(头部大小)
    • hdr_crc(头部CRC校验)
    • 路径长度(需与实际路径匹配)
  4. 使用acefile.py验证修改后的文件有效性

自动化工具

已有自动化脚本可生成恶意ACE文件,可参考GitHub上的相关项目。

防御措施

  1. 升级受影响软件至最新版本
  2. 禁用ACE格式文件解压功能
  3. 避免解压来源不明的压缩文件
  4. 设置关键目录的写权限限制

参考资源

  1. WinACE软件
  2. acefile Python模块
  3. 相关GitHub项目(漏洞利用脚本)

总结

该漏洞利用门槛低但危害大,攻击者可轻易实现持久化控制。了解其原理不仅有助于防御,也对研究文件格式解析类漏洞有重要参考价值。

WinRAR 目录穿越漏洞(CVE-2018-20250)深度分析与利用指南 漏洞概述 WinRAR目录穿越漏洞(CVE-2018-20250)是一个存在19年的高危漏洞,影响多个主流压缩软件。攻击者可通过构造恶意ACE压缩文件,在受害者解压时实现任意目录写入,最终可能导致系统被完全控制。 受影响软件及版本 WinRAR < 5.70 Beta BandZip <= 6.2.0.0 好压 <= 5.9.8.10907 360压缩 < 4.0.0.1170 漏洞技术分析 漏洞根源 漏洞源于WinRAR使用的UNACEV2.dll动态链接库,该库用于处理ACE格式文件。在解压ACE文件时,未对文件名进行充分过滤,导致可实现目录穿越。 关键函数分析 Clean_ Path函数 该函数对输入路径进行预处理,包含以下过滤逻辑: 路径以 \\ 开头且包含两个 \ 时,忽略中间部分(处理SMB路径) 路径以 *:\ 开头时,忽略 *:\ (忽略盘符) 路径包含 \..\ 时,忽略 \..\ (防止目录回溯) 路径开头为 *:* 且不为 *:\ 时,忽略 *: (处理特殊格式路径) GetDevicePathLen函数 该函数判断路径类型并返回不同值: 路径以 \\ 开头且包含多个 \ :返回第四个斜杠与开头的偏移量 路径以 \ 开头但不以 \\ 开头:返回1 路径以 *: 开头但不以 *:\ 开头:返回2 路径以 *:\ 开头:返回3 漏洞触发原理 当 GetDevicePathLen 返回非0值时,路径会被视为绝对路径而非相对路径。通过构造特殊路径绕过 Clean_Path 的过滤,可实现任意目录写入。 漏洞利用方法 路径构造技巧 基本目录穿越 : 使用 C:C:\some_folder\some_file.txt 路径 经过 Clean_Path 处理后变为 C:\some_folder\some_file.txt GetDevicePathLen 返回非0值,实现绝对路径写入 SMB共享攻击 : 构造路径 C:\\\10.10.10.10\smb_folder\file.txt 处理后变为 \\10.10.10.10\smb_folder\file.txt 实现共享文件的目录穿越 实际利用场景 开机自启动目录写入 : 目标路径1(需管理员权限): C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 目标路径2(无需管理员权限): C:\Users\$user_name\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 特殊构造路径: C:C:../AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/some_file.exe 假设解压目录为 C:\Users\$user_name\Desktop 或 Downloads , C:../ 会回溯至用户目录 DLL劫持 : 覆盖系统关键DLL文件 需要了解目标系统环境 漏洞利用实现步骤 手动构造恶意ACE文件 使用WinACE创建ACE文件,选择"store full path"选项 使用WinHex等工具修改文件路径为恶意路径 修改文件头中的关键字段: hdr_size (头部大小) hdr_crc (头部CRC校验) 路径长度(需与实际路径匹配) 使用acefile.py验证修改后的文件有效性 自动化工具 已有自动化脚本可生成恶意ACE文件,可参考GitHub上的相关项目。 防御措施 升级受影响软件至最新版本 禁用ACE格式文件解压功能 避免解压来源不明的压缩文件 设置关键目录的写权限限制 参考资源 WinACE软件 acefile Python模块 相关GitHub项目(漏洞利用脚本) 总结 该漏洞利用门槛低但危害大,攻击者可轻易实现持久化控制。了解其原理不仅有助于防御,也对研究文件格式解析类漏洞有重要参考价值。