论坛格式调解比较麻烦,其具体可参考CSDN文章,望各位海涵,用户名相同
一、 概述
众所周知WinRAR是一款功能强大的压缩包管理器,作为档案工具RAR在 Windows情况下,可用于备份数据、压缩文件、解压RAR/ZIP等格式的文件、创建RAR/ZIP等格式的压缩文件,得到了较为广泛的应用。2019年2月20日,Check Point团队爆出了一个关于WinRAR存在19年的漏洞,不法分子可用使用该漏洞取得受害者计算机的控制权限。该团队经过深入研究检测相继发现了WinRAR的四个安全漏洞,分别为ACE文件验证逻辑绕过漏洞(CVE-2018-20250)、ACE文件名逻辑验证绕过漏洞(CVE-2018-20251)、ACE/RAR文件越界写入漏洞(CVE-2018-20252)以及LHA/LZH文件越界写入漏洞(CVE-2018-20253)。漏洞攻击者可使用上述漏洞,通过诱使用户使用WinRAR打开恶意构造的压缩包文件,将恶意代码写入体系启动目次大概写入恶意dll劫持其他软件举行执行,实现对用户主机的任意代码执行攻击。国家信息安全漏洞共享平台(CNVD)对上述漏洞的综合评级为“高危”,并于2019年2月21日收录该系列漏洞(CNVD-2019-04911、CNVD-2019-04912、CNVD-2019-04913和CNVD-2019-04910,分别对应CVE-2018-20250、CVE-2018-20251、CVE-2018-20252和CVE-2018-20253),同时向外界发出安全公告。
二、漏洞先容
CVE-2018-20250漏洞的发现在科技界引起了非常轩然大波,只管这个漏洞的使用条件很有限,实际危害并不是很高,然而令人恐惧的是这个漏洞已经遗留了19年,并且影响到环球5多亿的WinRAR用户。究其漏洞产生的根本缘故原由,发现问题的关键在于5.70 Beta 1之前版本的WinRAR使用了陈旧的动态链接库unacev2.dll。该动态链接库的编译时间为2005年,在处理ACE格式文件过程中发挥作用,然而却无任何的基础保护机制(ASLR, DEP 等)。以是当使用WinRAR对恶意构造的ACE文件举行解压操纵时,由于没有对文件名举行充实过滤,产生了“目次穿越”现象,其中隐藏的恶意文件可以实现被写入计算机的任意目次下,甚至可以写入开机启动项中,导致恶意文件的执行。经研究发现这种漏洞的影响非常广,其影响范围包括:
- 发布时间早于5.70 Beta 1版本的WinRAR软件;使用unacev2.dll动态共享库的解压、文件管理类工具软件。
联合腾讯玄武实验室后续的检测效果,可以发现除WinRAR软件外,还包括6.2.0.0以及之前版本的Bandizip压缩工具,5.9.8.10907以及之前版本的2345好压,早于4.0.0.1170版本的360压缩等共计38款压缩软件此漏洞影响。但幸亏相关的平台,厂商,软件提供商都在第一时间站了出来,积极应对该系列漏洞,目前网络上漏洞使用原理已公开,厂商也已发布新版本修复此漏洞。仔细品位,可发现CVE-2018-20250此种漏洞思绪比较简朴,在实际使用过程中简朴易用,因此备受病毒黑色产业的青睐。但WinRAR unacev2.dll任意代码执行漏洞使用还存在一个显着的不足,即需要受害者重启体系后恶意代码才能得以执行。在腾讯安全御见威胁情报中心对该类型漏洞攻击的后期监控中,发现攻击者对WinRAR漏洞使用的手段举行了升级创新,一定程度上减少了对受害者主动重启体系的依赖,同时确保恶意木马能在第一时间启动,如比较著名的Lime-RAT远控木马,该远控木马的功能非常强大,可通过修改设置信息大概接收C2服务器(C&C的缩写,远程命令和控制服务器)指令,以实现文件加密打单、挖矿和下载其他恶意组件等功能。此外木马还可以监视剪切板,当检测到受害者主机举行数字货币交易时,直接更换钱包地址达到抢钱目的,对比特币矿工及数字加密币交易的人群危害极大。
三、 漏洞分析
3.1 unacev2.dll任意代码执行漏洞缺陷概述
图2 ACEInitDll函数定义
图4 pACEInitDllStruc指针结构体定义
联合Check Point团队发布的漏洞原理解析文章,下面联合IDA静态分析对unacev2.dll举行深入研究,重点关注以下四个关键函数:CleanPath、GetDevicePathLen函数、WinRAR Validators/Callbacks回调函数以及触发目次遍历漏洞的sprintf函数。
3.2 CleanPath关键函数分析
下面是关于CleanPath函数的伪代码:
图6 GetDevicePathLen函数伪代码
这段伪代码的大概流程可形貌为: [table][tr][td]
1.如果Path中第1个字符为“\”,执行2;否则,执行7。
2.如果Path中第2个字符为“\”,执行3;否则,执行6。
3.如果在Path第3个字符之后没有找到“\”,返回0;否则将SlashPos指向此位置。
4.如果在SlashPos+1之后没有找到“\”,返回0;否则将SlashPos指向此位置。
5.将SlashPos指向位置减去Path指向位置再加1赋值给Result,然后执行步骤9。
6.Result赋值为1,然后执行9。
7.如果Path第2个字符为“:”,Result赋值为2。
8.如果Path第3个字符为“\”,Result值加1。
9.返回Result。
由分析可知该函数的作用为检查文件的相对路径即Path,Result将作为效果表示相对路径的长度返回。可以将Result取值有两种情况:非0和0。
例子如下:l 待检查路径为C:\some_folder\some_file.ext则函数返回值3
l 待检查路径为\some_folder\some_file.ext则函数返回值1
l 待检查路径为some_folder\some_file.ext则函数返回值0
3.4 WinRAR Validators/Callbacks回调函数分析
下面是关于WinRAR Validators/Callbacks回调函数的伪代码:
图8 宏定义常量定义
由分析可知该函数会对待提取文件的相对路径举行检查(其中伪代码里“SourceFileName”表示待提取文件的相对路径),确保路径满足以下条件:
1.第一个字符不等于“\”或“/”;
2.文件名不以字符串“..\”或“../”开头;
3.字符串中不存在“\..\”、“\../”、“/../”或“/..\”。
3.5 触发目次遍历漏洞的sprintf函数
反之,则执行:
图10 攻击向量构造思绪
通过该思绪我们可以找到一个找到了一个向量,它允许我们将文件提取到体系自启动文件夹,而无需关心用户名。下面我们正向分析它:
接着由GetDevicePathLen函数验证路径序列得到返回2,故此目的文件夹将被忽略,将触发目次遍历漏洞的sprintf函数。
接着由WinRAR的回调函数对解压目的路径举行验证:
参考3.4中的验证条件可发现上面得到最终路径可以绕过路径遍历验证。但是只能回退一个文件夹。而我们需要在不知道用户名的情况下将文件解压缩到目的体系自启文件夹。
如果从WinRAR安装目次中启动解压软件,则“当前目次”将是:
如果存档位于Desktop文件夹中,则“当前目次”路径将为:
四、漏洞实例分析与验证
对该漏洞的使用攻击不能跨盘符,即受害者举行解压文件触发漏洞时,必须在体系盘,且在不知道计算机主机名的情况下,只能在主浏览器的默认下载路径下(C:\Users\Administrator\Downloads)大概桌面举行解压,大概多猜几个启动项路径。另外产生漏洞的DLL文件即UNACEV2.DLL,不能识别相对路径,以是漏洞使用条件还包括其文件名部分必须为绝对路径。以下是几种操纵体系下的开机启动项路径,可以发现在个人PC上由于用户名的多样性故难以推测到准确的路径,而服务器上用户名一般为Administrator,以是这个漏洞在服务器上使用度比较高。
表1 不同操纵体系下的开机启动项路径[table][tr][td=1,1,94]Win2003[/td][td=1,1,459]C:\Documents and Settings\Administrator\「开始」菜单\步伐\启动 [/td][/tr][tr][td=1,1,94]Win2008[/td][td=1,1,459]C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start- Menu\Programs\Startup[/td][/tr][tr][td=1,1,94]Win2012[/td][td=1,1,459]C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start- Menu\Programs\Startup[/td][/tr][tr][td=1,1,94]Win7[/td][td=1,1,459]C:\Users\用户 \AppData\Roaming\Microsoft\Windows\Start- Menu\Programs\Startup[/td][/tr][tr][td=1,1,94]Win10[/td][td=1,1,459]C:\Users\用户\AppData\Roaming\Microsoft\Windows\Start- Menu\Programs\Startup
本次试验使用的是Win7操纵体系。
4.1 UNACEV2.dll校验CRC引发漏洞
漏洞重要是由Winrar用来解压ACE文件时使用的动态链接库UNACEV2.dll引起的,UNACEV2.dll在处理filename时只校验了CRC。故我们可以通过使用010Editor修改filename将恶意文件解压到启动目次,但是在修改完成后,CRC校验会失败,以是我们还要再去修改CRC,具体过程请见下面的分析。首先列出本次实验的工具清单:[table][tr][td=2,1,553] 工具清单 [/td][/tr][tr][td=1,1,179] 虚拟机 [/td][td=1,1,374]VMware Workstation11.0.0[/td][/tr][tr][td=1,1,179] 体系镜像 [/td][td=1,1,374]Win7家庭版[/td][/tr][tr][td=1,1,179] WinRAR 5.60简体中文版 [/td][td=1,1,374]https://www.rarlab.com/rar/winrar-x64-560sc.exe[/td][/tr][tr][td=1,1,179] Python-3.7.2-amd64.exe [/td][td=1,1,374]https://www.python.org/ftp/python/3.7.2/python-3.7.2-amd64.exe[/td][/tr][tr][td=1,1,179] 010Editor [/td][td=1,1,374]https://download.sweetscape.com/010EditorWin64Installer901.exe[/td][/tr][tr][td=1,1,179] Wace和模板文件 [/td][td=1,1,374]https://github.com/360-A-Team/CVE-2018-20250[/td][/tr][tr][td=1,1,179] EXP [/td][td=1,1,374]https://github.com/WyAtu/CVE-2018-20250一切软件安装完毕后,下面正式进入实验部分:
创建一个简朴的bat文件,最终的漏洞使用便是将该文件写入体系启动项中:
使用https://github.com/WyAtu/CVE-2018-20250中的acefile.py脚本检查文件1.ace的header信息:
第一个红色框内为:hdr_crc的值:0xC98C;第二个红色框内为:filename即文件的名字,包括其路径。前面的0x001A为filename的长度,十进制为26。
稍作修改:
修改filename的长度:
使用acefile.py解析ace文件,可以看到报错,需要修改hdr_crc:
使用acefile.py脚本检查文件1.ace的header信息:
选择解压到当前文件夹或解压到文件夹1都可以,可以看到bat文件乐成解压到开机启动项里。
4.2 msf使用
msf是一个免费的、可下载的框架,它本身附带数百个已知软件漏洞的专业级漏洞攻击工具,通过它可以很容易地获取、开辟并对计算机软件漏洞实行攻击。联合CVE-2018-20250漏洞,本小节实验将实现后门步伐的植入,从而复现一次比较有危害性的攻击,具体实验情况如下:[table][tr][td=2,1,553] 工具清单 [/td][/tr][tr][td=1,1,217] 虚拟机 [/td][td=1,1,336]VMware Workstation11.0.0[/td][/tr][tr][td=1,1,217] 体系镜像1 [/td][td=1,1,336]Win7家庭版[/td][/tr][tr][td=1,1,217] Win7 ip [/td][td=1,1,336]192.168.116.147[/td][/tr][tr][td=1,1,217] 体系镜像2 [/td][td=1,1,336]kali-linux-2018.4-amd64.iso[/td][/tr][tr][td=1,1,217] 内核版本2 [/td][td=1,1,336]4.18.0-kali2-amd64 #1 SMP Debian 4.18.10-2kali1 (2018-10-09) x86_64 GNU/Linux[/td][/tr][tr][td=1,1,217] Kali ip [/td][td=1,1,336]192.168.116.128
首先在kali情况下生成目的机器的后门步伐,需要知道目的机器ip地址:
对改造后的shell.ace文件选择解压到当前文件夹或解压到文件夹shell都可以,可以看到bat文件乐成解压到开机启动项里。
设置本地主机ip地址及监听端口,然后尝试攻击监听exploit :
重启win7,发现kali中已渗透乐成,拿到目的机器shell:
|