1. 项目概述一次对经典压缩软件“侧漏”的深度剖析最近在安全圈里WinRAR那个编号为CVE-2023-38831的漏洞又被大家频繁提起。这个漏洞其实早在去年就被披露了但它的影响范围之广、利用方式之巧妙让它至今仍是红队演练和渗透测试中的一个经典案例。简单来说这个漏洞允许攻击者制作一个特殊的压缩包当用户在WinRAR中查看这个压缩包里的文件时即便没有解压恶意代码也可能被触发执行。这听起来有点反直觉毕竟我们通常认为“不解压就安全”。但正是这种认知偏差让这个漏洞具备了很强的迷惑性和危害性。今天我就以一个安全研究者的视角带大家从头到尾、手把手地复现一遍这个漏洞不仅是为了复现而复现更重要的是理解其背后的原理、利用链的构造以及在真实环境中如何识别和防御这类攻击。无论你是刚入门的安全爱好者还是想巩固漏洞原理的从业者这篇文章都将提供一份详实的实操笔记。2. 漏洞原理深度解析为什么“看一眼”就中招在动手之前我们必须先搞清楚这个漏洞到底是怎么一回事。CVE-2023-38831本质上是一个逻辑漏洞更具体地说是WinRAR在处理压缩包内特定文件结构时的路径遍历和命令注入问题。它并不依赖于复杂的内存破坏技术而是利用了软件本身在解压预览逻辑上的缺陷。2.1 核心触发机制临时目录的“狸猫换太子”WinRAR有一个功能当用户双击压缩包内的一个文件比如一个.txt或.jpg文件时WinRAR会先将这个文件解压到一个临时目录然后用系统关联的程序打开它以便用户预览内容。这个临时目录的路径通常是类似C:\Users\[用户名]\AppData\Local\Temp\Rar$DIa[随机数字].XXX这样的格式。漏洞的根源在于当压缩包内同时存在一个文件例如poc.jpg和一个与该文件同名的文件夹例如poc.jpg\时WinRAR的处理逻辑出现了混乱。攻击者可以精心构造这样一个压缩包一个名为poc.jpg的文件夹里面藏着一个真正的恶意可执行文件比如backdoor.cmd。一个名为poc.jpg的文件它可能是一个无害的图片文件。当用户在WinRAR的图形界面中双击那个看似无害的poc.jpg文件试图预览时WinRAR的意图是将poc.jpg文件解压到临时目录并打开。但由于存在同名文件夹其内部解压逻辑在拼接临时文件路径时错误地将文件路径指向了同名文件夹内的恶意文件。在某些特定的触发条件下例如文件扩展名关联了脚本或可执行程序系统可能会执行那个隐藏在文件夹里的backdoor.cmd而不是打开预览的图片。注意这里需要澄清一个常见的误解。早期的分析可能过于简化认为仅仅是“预览就执行”。实际上漏洞的触发与文件扩展名的关联、Windows系统如何解释临时目录下的文件命令等因素紧密相关。攻击者常常需要将恶意脚本伪装成与图片等文档关联的格式并利用脚本引擎如.cmd,.js,.vbs或某些特定文件类型的“打开方式”漏洞来最终执行代码。2.2 漏洞影响范围与版本限定这个漏洞影响的是特定版本的WinRAR。根据官方公告在WinRAR 6.23版本之前的所有版本均受影响。这意味着在2023年8月补丁发布之前全球数亿用户使用的WinRAR都暴露在此风险之下。即便用户只是使用WinRAR查看压缩包内容而没有进行解压操作也可能中招。这使得钓鱼攻击的成本极低——攻击者只需要诱骗目标打开一个压缩包并查看里面的文件即可。3. 复现环境搭建与工具准备纸上得来终觉浅绝知此事要躬行。要真正理解这个漏洞没有比亲手复现一遍更好的方法了。下面我们来搭建一个安全的复现环境。3.1 实验室环境配置核心原则隔离与可控。绝对不要在物理机或日常使用的主机上进行漏洞复现操作。虚拟机环境我使用的是VMware Workstation 17 Pro。你也可以使用VirtualBox它们都是优秀的选择。创建一个全新的Windows 10或Windows 11虚拟机。系统版本不重要关键是干净。操作系统快照在安装任何软件之前为虚拟机创建一个“干净状态”的快照。这是你的“后悔药”一旦实验过程中环境被意外污染或你想从头开始可以瞬间恢复。受影响版本的WinRAR这是复现的关键。你需要下载一个低于6.23版本的WinRAR。例如WinRAR 6.22 或 6.11。务必从可靠的存档站点或自己之前的备份获取避免从不明来源下载带来二次风险。在虚拟机中安装它。网络设置将虚拟机的网络模式设置为“仅主机模式”或“NAT模式”并确保防火墙开启。严禁将实验虚拟机桥接到物理网络防止潜在的恶意样本逃逸。必要工具文本编辑器Notepad 或 VS Code用于编写脚本和配置文件。进程监控工具Sysinternals Suite 中的Process Monitor。它是我们观察WinRAR行为、捕捉临时文件创建和进程启动的“显微镜”。命令行工具确保CMD或PowerShell可用。3.2 心理与操作准备复现漏洞尤其是涉及执行的漏洞心态要稳操作要细。明确目标我们的目标是验证漏洞原理生成一个能触发异常行为的POC概念验证压缩包。绝不是制作一个具有真实破坏力的恶意软件。我们的POC将执行无害的命令如弹出一个计算器或创建一个文本文件以此证明代码执行能力。步步为营按照步骤来每完成一步观察结果理解后再进行下一步。不要急于求成。记录日志开启Process Monitor的日志记录所有文件系统和进程活动都将被捕获这是分析漏洞触发链的宝贵数据。4. 手工构造漏洞利用压缩包POC理解了原理备好了环境现在开始最核心的部分——手工打造那个“问题压缩包”。我们将创建一个能弹出Windows计算器calc.exe的POC。4.1 创建恶意负载与诱饵文件首先在虚拟机桌面或任意目录创建一个实验文件夹例如CVE-2023-38831_POC。编写恶意脚本在文件夹内新建一个文本文件重命名为poc.cmd。用记事本打开输入以下内容echo off start calc.exe echo [S] POC Executed! C:\poc_test.txt pause这个脚本做了两件事启动计算器同时在C盘根目录创建一个包含标记的文本文件。pause是为了让CMD窗口停留方便我们观察。准备诱饵文件我们需要一个看起来人畜无害的文件。找一个小的JPG图片文件复制到实验文件夹并将其重命名为poc.jpg。这个文件就是用户会双击预览的那个“诱饵”。4.2 构造特殊的文件夹结构这是利用漏洞的关键一步。我们需要创建一个特殊的文件夹其名称与诱饵文件相同并将恶意脚本放入其中。在实验文件夹内新建一个文件夹。关键操作将这个新建的文件夹重命名为poc.jpg。是的你没看错就是一个以.jpg结尾的文件夹名。Windows会弹出一个警告询问“如果改变文件扩展名可能会导致文件不可用。确实要更改吗”选择“是”。 现在你的实验文件夹里应该有三个东西poc.jpg(一个真实的图片文件)poc.jpg(一个文件夹注意图标不同)poc.cmd(恶意脚本)将poc.cmd文件移动或复制到名为poc.jpg的文件夹内。至此文件结构准备完毕。它的结构看起来应该是这样CVE-2023-38831_POC/ ├── poc.jpg (文件诱饵图片) └── poc.jpg (文件夹) └── poc.cmd (文件恶意脚本)4.3 制作漏洞压缩包我们不能直接压缩这个包含特殊文件夹的目录因为WinRAR的图形界面压缩可能会标准化路径。我们需要使用命令行工具rar.exe来精确控制压缩包内的结构。找到rar.exe它通常位于WinRAR的安装目录下例如C:\Program Files\WinRAR。打开命令行以管理员身份打开CMD或PowerShell导航到你的实验文件夹CVE-2023-38831_POC。执行压缩命令输入以下命令C:\Program Files\WinRAR\rar.exe a -r -ep1 malicious.rar .\poc.jpg .\poc.jpg\a添加文件到压缩包。-r递归包含子文件夹。-ep1这个参数至关重要。它表示从名称中排除基文件夹。这意味着压缩包内直接包含poc.jpg文件和poc.jpg\文件夹及其内容而不包含外层的CVE-2023-38831_POC目录。malicious.rar生成的压缩包名称。.\poc.jpg .\poc.jpg\要压缩的两个条目注意第二个条目后面有反斜杠\这告诉rar.exe这是一个文件夹。执行成功后你会在当前目录下得到一个malicious.rar文件。用WinRAR打开它你应该能看到类似这样的内容malicious.rar ├── poc.jpg (文件) └── poc.jpg (文件夹) └── poc.cmd (文件)实操心得使用-ep1参数是成功构造的关键。如果直接通过图形界面拖拽压缩WinRAR可能会将父文件夹也打包进去或者对特殊命名的文件夹处理方式不同导致漏洞无法触发。命令行给了我们最底层的控制力。5. 漏洞触发与行为监控分析压缩包制作好了现在让我们来“引爆”它并观察整个过程。5.1 使用Process Monitor捕获动态打开Process Monitor立即按下CtrlE或点击工具栏的“捕获事件”按钮先停止当前可能无关的捕获流。点击菜单栏的“筛选”(Filter) - “筛选...” (Filter...)我们需要设置过滤器只关注WinRAR相关的活动否则海量事件会让你无从下手。添加以下过滤器第一个过滤器Process NameisWinRAR.exeInclude第二个过滤器OperationisProcess CreateInclude第三个过滤器PathcontainsRar$DIInclude(用于捕捉临时目录操作) 点击“添加”加入每个过滤器然后点击“应用”最后“确定”。点击CtrlE重新开始捕获事件。现在ProcMon只记录我们关心的内容了。5.2 触发漏洞并观察在虚拟机中双击我们生成的malicious.rar文件用WinRAR打开它。在WinRAR的界面中找到那个poc.jpg文件不是文件夹。双击它。预期结果与观察界面现象你可能会看到图片查看器一闪而过如果系统默认用图片查看器打开.jpg但同时一个CMD命令窗口会弹出并启动了计算器calc.exe。CMD窗口中的脚本显示“POC Executed!”并暂停。C盘根目录下也会出现poc_test.txt文件。ProcMon现象停止捕获CtrlE查看事件列表。你应该能看到一系列关键事件WinRAR.exe创建了一个临时目录路径类似C:\Users\[...]\AppData\Local\Temp\Rar$DIa12345.000。在该临时目录下出现了与我们的压缩包内结构相似的内容。关键点来了你可能会观察到WinRAR试图将poc.jpg文件写入临时目录但由于路径混淆其操作可能涉及到了poc.jpg\文件夹下的poc.cmd文件。最终会有一个cmd.exe进程被创建其命令行参数指向了临时目录下的poc.cmd脚本文件。这就是代码执行发生的铁证。5.3 关键行为逻辑链还原通过ProcMon的日志我们可以尝试还原WinRAR的“心路历程”用户双击压缩包内的poc.jpg文件。WinRAR准备将其解压到临时目录TEMP\Rar$DIa12345.000\下。由于压缩包内存在同名的poc.jpg\文件夹WinRAR的内部路径处理函数可能产生了混淆。它本应生成TEMP\Rar$DIa12345.000\poc.jpg但实际处理时路径可能被错误地关联或解析到了文件夹内的内容。当WinRAR尝试调用系统关联程序打开“已解压”的文件时它传递的路径可能指向了poc.cmd。因为.cmd扩展名默认由cmd.exe执行于是系统便启动了cmd.exe /c来运行这个脚本导致恶意代码执行。注意事项实际的触发路径可能因WinRAR版本和系统环境有细微差异。有时需要诱饵文件是某些特定扩展名如.jpg并且需要该扩展名的默认打开程序存在某种“命令行参数注入”的可能才能最终跳转到执行.cmd。我们的POC构造方法是一种广泛验证有效的路径混淆方式。在真实攻击中攻击者可能会尝试多种文件扩展名如.pdf, .png,.txt并结合Windows脚本宿主wscript.exe来执行VBS/JS脚本以达到更隐蔽的效果。6. 漏洞修复与安全防护建议复现漏洞是为了更好地防御它。了解了攻击面我们来看看如何筑起防线。6.1 官方修复方案WinRAR官方在6.23版本中彻底修复了此漏洞。修复的核心逻辑是改进了对压缩包内文件与文件夹同名情况的处理机制确保在预览文件时路径解析不会错误地跳转到同名文件夹内的内容。因此最根本、最有效的防护措施就是立即将WinRAR升级到6.23或更高版本。6.2 针对无法升级环境的缓解措施在某些严格控制的内部环境中可能无法立即升级软件。可以采取以下防御策略禁用WinRAR的“查看文件”功能这算是一剂“猛药”。可以通过修改WinRAR的设置禁止在压缩包内直接双击打开文件。但这会严重影响用户体验。打开WinRAR - 选项 - 设置 - 安全。勾选“禁止潜在危险类型文件的运行”但这主要针对可执行文件对脚本可能无效。更彻底的方法是改变用户习惯要求一律解压到指定目录后再操作。应用软件限制策略在企业域环境中可以使用AppLocker或Windows Defender应用程序控制策略限制从临时目录尤其是%TEMP%\Rar$DI*执行任何脚本.cmd,.bat,.js,.vbs,.ps1和可执行文件。这能从根源上阻断利用链。加强终端检测与响应部署EDR解决方案监控并告警从WinRAR进程派生出的非常规子进程如winrar.exe - cmd.exe - calc.exe这种链。许多现代EDR都能检测到这种可疑的进程链。用户安全意识培训这是老生常谈但永远有效的一环。教育用户不要打开来源不明的压缩文件尤其是邮件附件。即使打开也不要轻易双击其中的文件进行预览特别是来自不信任来源的压缩包。养成先解压到沙箱或虚拟机或用杀毒软件扫描后再操作的习惯。6.3 安全研究视角的延伸思考CVE-2023-38831给我们上了一堂生动的课安全威胁往往藏在最寻常的功能里。压缩软件的文件预览功能本是为了便利却因逻辑缺陷成了攻击入口。这提醒我们输入验证的极端重要性即使是像文件名、路径这样的“普通”输入也需要进行严格的验证和规范化处理。对特殊字符、非常规命名如以空格结尾的文件夹、包含特殊符号的路径要保持警惕。临时文件操作的风险任何涉及将不可信内容写入临时目录并随后由其他程序处理的操作都是高风险点。必须确保临时文件的完整生命周期创建、命名、使用、删除都在安全控制之下。默认安全配置软件应考虑更安全的默认设置。例如是否可以默认禁止从压缩包内直接运行任何脚本或可执行文件类型7. 复现过程中的常见问题与排查技巧在复现过程中你可能会遇到一些问题。这里我总结了一些常见的坑和解决办法。问题现象可能原因排查与解决思路双击poc.jpg后只打开了图片没有弹出计算器或CMD窗口。1. WinRAR版本已打补丁6.23。2. 压缩包结构构造不正确。3. 系统对.cmd文件的执行有策略限制。1.确认版本检查WinRAR关于对话框中的版本号必须低于6.23。2.检查结构用WinRAR打开malicious.rar确保内部直接显示poc.jpg(文件)和poc.jpg(文件夹)且文件夹内有poc.cmd。确保是用rar.exe -ep1命令创建的。3.手动测试脚本直接在实验文件夹内双击poc.cmd看是否能正常运行。如果不能可能是系统策略问题如组策略禁止运行脚本。Process Monitor中看不到cmd.exe进程创建事件。1. 过滤器设置太窄过滤掉了关键事件。2. 漏洞未成功触发。1.放宽过滤器先将过滤器清空重新捕获一次完整事件。然后使用“查找”功能搜索“cmd.exe”或“calc.exe”。2.关注临时目录搜索路径中包含“Rar$DI”的事件看WinRAR在临时目录下具体创建和操作了哪些文件。系统弹出“Windows无法访问指定设备、路径或文件”错误。临时文件路径可能包含特殊字符或长度超限导致系统无法正确关联打开。尝试简化POC。将诱饵文件改为更简单的.txt文件恶意脚本也使用绝对路径简单的命令如echo test C:\test.txt。有时路径太深或名称太复杂会影响触发。杀毒软件拦截了操作。现代杀毒软件或Windows Defender可能会将此类可疑行为识别为恶意软件。在实验虚拟机中临时禁用实时病毒防护和防火墙实验完成后务必重新开启。或者将你的实验文件夹和生成的RAR文件添加到杀毒软件的排除列表中。独家避坑技巧使用绝对路径在poc.cmd中使用calc.exe的绝对路径C:\Windows\System32\calc.exe可能比直接写calc.exe更可靠避免因环境变量问题导致执行失败。善用“回声”定位在poc.cmd开头加上echo [DEBUG] Script started at %TIME% C:\debug_log.txt这样即使脚本瞬间被关闭你也能在C盘看到它是否曾被启动以及启动时间便于在ProcMon中对应时间点查找事件。精简ProcMon视图在ProcMon中除了进程创建和文件操作还可以关注RegSetValue操作有时WinRAR会修改注册表来关联临时文件的打开方式这也是利用链的一部分。通过这样一次完整的手工复现你收获的不仅仅是一个漏洞的利用方法更是一套分析软件逻辑漏洞、构造利用链、监控系统行为、排查问题的完整方法论。安全研究就像解谜CVE-2023-38831是一个经典的谜题它的价值在于教会我们如何审视那些看似坚固的软件堡垒中可能存在的细微裂痕。保持好奇严谨求证你就能在攻防的道路上走得更远。