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函数
该函数对输入路径进行预处理,包含以下过滤逻辑:
- 路径以
\\开头且包含两个\时,忽略中间部分(处理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:../会回溯至用户目录
- 目标路径1(需管理员权限):
-
DLL劫持:
- 覆盖系统关键DLL文件
- 需要了解目标系统环境
漏洞利用实现步骤
手动构造恶意ACE文件
- 使用WinACE创建ACE文件,选择"store full path"选项
- 使用WinHex等工具修改文件路径为恶意路径
- 修改文件头中的关键字段:
hdr_size(头部大小)hdr_crc(头部CRC校验)- 路径长度(需与实际路径匹配)
- 使用acefile.py验证修改后的文件有效性
自动化工具
已有自动化脚本可生成恶意ACE文件,可参考GitHub上的相关项目。
防御措施
- 升级受影响软件至最新版本
- 禁用ACE格式文件解压功能
- 避免解压来源不明的压缩文件
- 设置关键目录的写权限限制
参考资源
- WinACE软件
- acefile Python模块
- 相关GitHub项目(漏洞利用脚本)
总结
该漏洞利用门槛低但危害大,攻击者可轻易实现持久化控制。了解其原理不仅有助于防御,也对研究文件格式解析类漏洞有重要参考价值。