0x01 漏洞描述
近日Check Point团队爆出了一个关于WinRAR存在19年的漏洞,用它来可以获得受害者计算机的控制。攻击者只需利用此漏洞构造恶意的压缩文件,当受害者使用WinRAR解压该恶意文件时便会触发漏洞。
该漏洞是由于 WinRAR 所使用的一个陈旧的动态链接库UNACEV2.dll所造成的,该动态链接库在 2006 年被编译,没有任何的基础保护机制(ASLR, DEP 等)。动态链接库的作用是处理 ACE 格式文件。而WinRAR解压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 漏洞细节
漏洞主要是由Winrar用来解压ACE压缩包采用的动态链接库unacev2.dll这个dll引起的。unacev2.dll中处理filename时只校验了CRC,黑客可以通过更改压缩包的CRC校验码来修改解压时候的filename来触发这个Path Traversal漏洞。但是Winrar本身检测了filename,有一些限制并且普通用户解压RAR文件时候不能将我们恶意的Payload解压到需要System权限的文件夹。当用户将文件下载到默认的C:UsersAdministratorDownloads目录下时,我们通过构造
C:C:C:../AppDataRoamingMicrosoftWindowsStartMenuProgramsStartup est.exe
经过Winrar的CleanPath函数处理会变成
C:../AppDataRoamingMicrosoftWindowsStartMenuProgramsStartup est.exe
其中C:会被转换成当前路径,如果用Winrar打开那么当前路径就是C:Program FilesWinRAR,要是在文件夹中右键解压到xxx那么当前路径就是压缩包所在的路径。
当用户在文件夹中直接右键解压到xx那么我们恶意的payload解压地址就会变成
C:UsersAdministratorDownloads../AppDataRoamingMicrosoftWindowsStartMenuProgramsStartup est.exe
就是当前用户的启动项。这样一个利用完成了从一个Path Traversal到任意命令执行的过程。
0x05 漏洞复现
该漏洞的实现过程:首先新建一个任意文件(也可以指定一个后门exe文件都可以),然后利用WinACE进行压缩,修改filename来实现目录穿越漏洞,可以将文件解压到任意目录中。
主要所需工具WinACE
、010Editor,下载地址为:
http://d3gkuj25u7yvfk.cloudfront.net/97m4@s345u2a5/Installer_winace_2.69.exe
https://download.sweetscape.com/010EditorWin64Installer901.exe
1.下载WinACE并安装,安装完成后,新建一个文本文件,名字可以任意,这里为backlion.txt。
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222135626472-812401147.png)
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222135627083-770686729.jpg)
python acefile.py --headers backlion.ace
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222135627621-84252807.png)
hdr_crc
hdr_size
filename的长度
filename
4.我们开始修改,要把他放置在启动项
C:ProgramDataMicrosoftWindowsStart MenuProgramsacklion.txt。这里修改如下:
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222135628949-1632310084.png)
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222135629495-486730981.png)
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222135630039-1776574970.png)
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222135630783-138457960.png)
hdr_size的值,这里选择如下位置,可以看到其长度为96(十进制,这里需要转换成十六进制)。
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222135631637-1008137176.png)
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222135632482-2144211076.png)
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222135633299-1789700702.png)
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222135633820-602046182.png)
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222135634785-1819558445.png)
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222135635232-1441859962.png)
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222135635883-934710.png)
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222163715187-134007242.png)
![](file:///C:/Users/haigang.wen/Documents/My%20Knowledge/temp/51739767-ade5-4a52-b281-35ef9fe47aa7/128/index_files/b99a1d66-c657-4e19-bbff-f30bafbbf5d1.png)
![](https://img2018.cnblogs.com/blog/1049983/201902/1049983-20190222163731688-2104134663.png)
![](file:///C:/Users/haigang.wen/Documents/My%20Knowledge/temp/51739767-ade5-4a52-b281-35ef9fe47aa7/128/index_files/e1af9314-992c-4e9f-8a5b-2471fe939aaf.png)
0x06 修复建议
有两种方式
-
升级到最新版本,WinRAR 目前版本是 5.70 Beta 1
-
删除其安装目录下的UNACEV2.dll文件
0x07 参考
https://research.checkpoint.com/extracting-code-execution-from-winrar/
https://fuping.site/2019/02/21/WinRAR-Extracting-Code-Execution-Validate/
https://mp.weixin.qq.com/s/j8G9Tjq2NPg0CFhXl_sQGQ
https://github.com/Ridter/acefile
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">