0x01 漏洞描述

2019 年 2 月 20 日 @Nadav Grossman 发表了一篇关于他如何发现一个在 WinRAR 中存在 19 年的逻辑问题以至成功实现代码执行的文章。
WinRAR 代码执行相关的 CVE 编号如下:

CVE-2018-20250, CVE-2018-20251, CVE-2018-20252, CVE-2018-20253

该漏洞是由于 WinRAR 所使用的一个陈旧的动态链接库UNACEV2.dll所造成的,该动态链接库在 2006 年被编译,没有任何的基础保护机制(ASLR, DEP 等)。该动态链接库的作用是处理 ACE 格式文件。而在解压处理过程中存在一处目录穿越漏洞,允许解压过程写入文件至开机启动项,导致代码执行。

0x02 漏洞影响

WinRAR < 5.70 Beta 1
Bandizip    < = 6.2.0.0
好压(2345压缩)    < = 5.9.8.10907
360压缩    < = 4.0.0.1170

0x03 漏洞利用及危害

  1. 通过这个漏洞黑客可以将恶意程序放入用户启动项目录,当目标电脑重新启动时获取目标主机的权限。

  2. 在拥有system权限下可以放入c:/windows/system32/wbem/mof/nullevt.mof,直接在获取目标主机的权限。

  3. 可以投放恶意dll文件进行dll劫持获取到目标主机的权限,或者覆盖用户主机上的文件等方式获取目标主机的权限。

0x04 漏洞复现

所需工具:WinACE、010Editor、acefile.py;

acefile.py脚本:https://raw.githubusercontent.com/backlion/acefile/master/acefile.py

复现过程:使用MSF生成一个木马文件,准备一些诱人的鱼饵(比如福利图包),然后使用WinACE进行压缩并且取一个诱人的文件名,这里注意选择"store full path"。

这里有个坑,必须进入需要压缩的文件夹里进行压缩;

使用010Editor进行编辑

我们先要修改filename,把木马文件的路径改成我们想要它解压到的地方,比如启动文件项目录

C:\C:C:../AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\test.exe

然后我们继续勾选Hex,选中整个filename,查看底部的十六进制是多少更改filename的长度(filename的00前一个值)

然后修改 hdr_size,如图所示,改完别忘记保存。

再然后我们就需要借助一个脚本acefile.py,通过报错信息来得到需要修改的hdr_crc值

命令:python3 acefile.py --headers 可爱猫咪在线卖萌.ace

修改hdr_crc值,分别修改hdr_size的前两个值为“98”、“BE” (跟结果倒着修改,记得保存)

然后使用脚本acefile.py查看是否正常输出信息

前几步因为是直接选择需要压缩的文件夹右键压缩的,导致有一点问题,但懒得改前面几步的截图了,所以这里的hdr_crc的值与上面更改的有所出入,但不影响其步骤;

将“可爱猫咪在线卖萌.ace”改成.rar的后缀,然后在虚拟机下的windows 7系统中新建一个账号,最后在桌面解压该压缩包

然后将目标系统重新启动,木马程序就可运行

0x05 修复建议

有两种方式

  1. 升级到最新版本,WinRAR 目前版本是 5.70 Beta 1

  2. 删除UNACEV2.dll文件

0x06 实战の坑

基本上杀软都会拦截启动项目录的异常更改,容易暴露目的。

有空试试其他几个利用方法。

参考资料

  1. https://mp.weixin.qq.com/s/G7UQe_5yoCJhCEgIRmRU5g

  2. https://mp.weixin.qq.com/s/j8G9Tjq2NPg0CFhXl_sQGQ

  3. https://www.cnblogs.com/backlion/p/10417985.html