WinRAR漏洞详细复现过程
把写在公司社区里的文章在简书里再发一遍 :)
漏洞描述:
2019年2月20日,Check Point团队爆出了一个关于WinRAR存在19年的漏洞, 该漏洞是由于 WinRAR 所使用的一个陈旧的动态链接库UNACEV2.dll所造成的,即在解压一个恶意ACE文件时,解压目录会被设置为Startup文件夹,这个文件夹可在电脑重新启动时自动运行文件夹内的程序,从而造成任意代码执行的效果。
漏洞影响版本:
WinRAR < 5.70 Beta 1
Bandizip < = 6.2.0.0
好压(2345压缩) < = 5.9.8.10907
360压缩 < = 4.0.0.1170
PS:目前我在WinRAR上复现成功,但是在Bandzip上失败,看来有些软件的行动还是蛮快的。
漏洞验证:
首先,我下载并安装了唯一允许创建ACE存档的软件 WinACE
然后在桌面创建了一个txt的文本,并用它作为最后存入Startup文件夹的文件
用把txt拖入WinACE的方式打开WinACE
点击Create,再次把txt拖入新出现的弹框内,再把下方的store full path设置好,最后点击Add创建。
这时桌面上就出现了创建好的ACE文件,接下来我们需要一个python脚本:acefile.py
https://github.com/droe/acefile
运行这个py脚本,我们可以看到新创建的ACE文件的头信息
红框中的内容即为解压时的目录,我们需要做的便是手动修改它,Check Point团队为我们准备好了最终的向量:
C:\C:C:../AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\test.txt
下来,因为CRC的保护,如何手动修改就成为了关键的一步:
你需要有一个编辑工具如WinHex等,这里我个人习惯使用HEdit
用十六进制的方法打开ACE文件后,我们需要修改四个地方
首先,将预设的解压目录修改为我们的最终向量
第二,修改路径长度为新向量长度
第三,修改hdr_size,我的长度为111,十六进制为6f
第四,用编辑器打开acefile.py
寻找CRC failed,找到下面这一行
将代码中输出的CRC failed改为变量的值
再次执行python脚本
将这个值转换为16进制后即为我们最后一处用来修改的内容
63686,转换为16进制为f8c6,我们使用的时候要颠倒一下即为c6f8
将红圈中的内容修改为新内容后即可完成操作。
解压做好的ACE文件,发现我们的目录及其中的文件已经创建完毕。
重启电脑,发现txt文件执行成功!
修复方案:
建议删除压缩程序目录下的如图的文件
或者下载最新版本的WinRAR。
参考文章:https://www.anquanke.com/post/id/171403