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 漏洞利用及危害
-
通过这个漏洞黑客可以将恶意程序放入用户启动项目录,当目标电脑重新启动时获取目标主机的权限。
-
在拥有system权限下可以放入c:/windows/system32/wbem/mof/nullevt.mof,直接在获取目标主机的权限。
-
可以投放恶意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 修复建议
有两种方式
-
升级到最新版本,WinRAR 目前版本是 5.70 Beta 1
-
删除UNACEV2.dll文件
0x06 实战の坑
基本上杀软都会拦截启动项目录的异常更改,容易暴露目的。
有空试试其他几个利用方法。
参考资料