免费、自由、人人可编辑的漏洞库--pwnwiki.com
,
漏洞原理
该漏洞是由于WinRAR 所使用的一个陈旧的动态链接库UNACEV2.dll所造成的,该动态链接库在2006 年被编译,没有任何的基础保护机制(ASLR,DEP 等)。该动态链接库的作用是处理ACE 格式文件。而在解压处理过程中存在一处目录穿越漏洞,允许解压过程写入文件至开机启动项,导致代码执行。
漏洞影响
WinRAR < 5.70 Beta 1 Bandizip < = 6.2.0.0 好压(2345压缩) < = 5.9.8.10907 360压缩 < = 4.0.0.1170
利用条件
攻击不能跨盘符,即受害者进行解压文件触发漏洞时,必须在系统盘,且在不知道计算机主机名的情况下,只能在主浏览器的默认下载路径下(C:\Users\Administrator \Downloads)或者桌面进行解压,或者多猜几个启动项路径。产生漏洞的DLL文件:UNACEV2.DLL,不能识别相对路径,文件名部分必须为绝对路径。
以下是几种机器的开机启动项路径,可以看到在个人PC上受用户名影响,无法猜测到准确的路径,而服务器上一般不会修改用户名,所以这个漏洞在服务器上利用度比较高。
漏洞利用
这里我们写一个bat,进行弹窗演示:
然后打开WinAce,选中我们创建的文件,右键,点击Add to...
利用WinACE进行压缩,这里选择store full path
生成之后我们利用脚本检查一下我们生成的文件1.ace的header信息:
这里几个是我们需要修改的参数。
在010Edit工具中打开刚才生成的1.ace文件,将文件路径替换为启动项路径如下,然后可以看到新的完整的文件路径长度为93,转换为16进制后为:5D。
修改完这两个地方之后点击保存,接着还需要修改hdr_size
这三个地方修改完成之后点击保存。
最后利用acefile.py重新查看文件header信息。修改acefile.py,在3061行处添加以下语句,输出文件hdr_crc。
print("+ right_hdr_crc : {} | struct {} ".format(hex(ace_crc16(buf)),struct.pack('<H', ace_crc16(buf)))) print("* current_hdr_crc : {} | struct {}".format(hex(hcrc),struct.pack('<H', hcrc)))
可以看到当前的hdr_crc为:16 9A,我们要把它改为E4 A3,保存之后重新查看文件header信息。
修改完成,将文件另存为1.rar。
选择解压到当前文件夹或解压到文件夹1都可以,可以看到bat文件成功解压到开机启动项里。
重启电脑查看效果
复现成功,自动运行bat文件弹窗。
PWNWIK.COM