Yale 合天智汇

01漏洞背景

2019 年2 月 20日 @NadavGrossman 发表了一篇关于他如何发现一个在WinRAR 中存在19 年的逻辑问题以至成功实现代码执行的文章。

WinRAR 代码执行相关的CVE 编号如下:

CVE-2018-20250,CVE-2018-20251, CVE-2018-20252, CVE-2018-20253

该漏洞是由于WinRAR 所使用的一个陈旧的动态链接库UNACEV2.dll所造成的,该动态链接库在2006 年被编译,没有任何的基础保护机制(ASLR,DEP 等)。该动态链接库的作用是处理ACE 格式文件。而在解压处理过程中存在一处目录穿越漏洞,允许解压过程写入文件至开机启动项,导致代码执行。

02准备工作

下载安装winace,一路默认安装即可

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(1)

新建一个demo文件夹,创建名为test的文本文档,内容如下

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(2)

使用winace打开

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(3)

点击右上角file->create

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(4)

阴影部分下拉框选择storefull path

点击add即可

此时在demo文件夹下生成了test.ace

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(5)

03熟悉ACE格式

接下来使用16进制编辑器打开(winhex,010Editor也行),此处使用010Editor进行

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(6)

待会儿需要在这儿修改一些数据

接下啦先gitclone https://github.com/droe/acefile

我们需要使用acefile.py来进行校验等操作,这是python3写的,它的功能是

1、可以提取ACE档案。

2、包含有关ACE文件格式的简要说明。

3、有一个非常有用的功能,打印文件格式标题和解释

win上没有3的环境,所以我使用kali来进行

首先下载test.ace

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(7)

然后查看文件头信息

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(8)

回显如下

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(9)

关键参数详细说明:

·hdr_crc:

两个CRC字段存在于2个标头中。如果CRC与数据不匹配,则中断提取。

·文件名:

文件名包含文件的相对路径。在提取过程中(包括文件)创建相对路径中指定的所有目录。文件名的大小由十六进制转储中的2个字节(小端)定义。

·advert:

如果使用未注册版本的WinACE创建存档,则在创建ACE存档期间,WinACE会自动添加广告字段。

·文件内容:

“origsize” -内容的大小。

“hdr_size” –头部大小。

上图可以看到crc为0xc5e9,size为63,这个63是十进制,转换为16进制为

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(10)

而在010Editor中看到的是相反的(小端序),如c5e9,在下图则是e9c5,003f在下图则是3f00

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(11)

另外还有个参数就是文件名长度,使用acefile没检测,我们可以手动查看

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(12)

阴影部分即文件名,长度在最下面的选区中可以看到是20h,即对应阴影选中前的2000

04构造恶意文件

很明显,crc受限于文件内容,size受限于文件内容,文件名长度受限于文件文件名,所以需要从文件内容、文件名开始修改

(使用010Editor的好处就是可以直接在左侧进行修改)

下图橙色的就是我们修改的内容

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(13)

把helloworld改成byeworld,文件名改成了evil.txt

之后按照上面的分析,我们需要修改文件名长度这个参数

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(14)

长度为1bh,所以将2000改为1b00即可

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(15)

然后修改size

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(16)

大小为3ah,将阴影前的3f00(原size)修改为3a00(现在的size)

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(17)

接下来修改CRC,crc怎么修改呢?crc是循环冗余校验,根据文件自有的算法得出,那么我们怎么才能得到修改后的文件的CRC呢?

别忘了我们之前的acefile.py,这个脚本为了获取ace文件信息,肯定会先对ace文件进行校验,查看它的代码找到校验逻辑不就好了?

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(18)

代码很长,通读不显示,不如把刚才修改后的文件先校验一下,看看会出什么提示,然后根据关键字去定位代码段

重新在kali下载修改后的ace

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(19)

然后检测

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(20)

果然提示文件头CRC校验出错

根据关键字定位到代码片段

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(21)

根据逻辑,3060行的判断成立时则会抛出crc校验出错的提示,为此,我们可以打印出if判断的对象,即ace_crc16(buf)

在3061行插入一句代码即可

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(22)

再次运行

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(23)

36050便是我们的crc了

同样转成16进制

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(24)

将相应位置数据修改为D28C即可

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(25)

保存后再次校验

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(26)

没有出错,并且显示了头信息

到这一步,我们的恶意文件就制作完成了。

05执行攻击

受害者如果按照平时的情况解压

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(27)

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(28)

则会在我们设置好的路径下解压出恶意文件

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(29)

06修复

1.尽快升级到最新版本的WinRAR

下载地址如下

32位:http://win-rar.com/fileadmin/winrar-versions/wrar57b1.exe

64位:http://win-rar.com/fileadmin/winrar-versions/winrar-x64-57b1.exe

2.删除UNACEV2.dll

找到所使用的压缩文件,右键打开文件所在位置

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(30)

在打开的文件夹下删除该文件即可

winrar工具有哪些功能(WinRAR目录穿越漏洞复现及防御)(31)

07参考

https://research.checkpoint.com/extracting-code-execution-from-winrar/

本文为合天原创,未经允许,严禁转载

,