CVE-2018-20250 WinRAR目錄穿越漏洞

From PwnWiki

漏洞原理

該漏洞是由於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,進行彈窗演示:

1266243-20190308101249378-2013483925.png

然後打開WinAce,選中我們創建的文件,右鍵,點擊Add to...

1266243-20190308124414993-1147235497.png

利用WinACE進行壓縮,這裡選擇store full path

1266243-20190308144027681-585501340.png

生成之後我們利用腳本檢查一下我們生成的文件1.ace的header信息:

1266243-20190308133050691-1223667359.png

這裡幾個是我們需要修改的參數。

在010Edit工具中打開剛才生成的1.ace文件,將文件路徑替換為啟動項路徑如下,然後可以看到新的完整的文件路徑長度為93,轉換為16進制後為:5D。

1266243-20190310222141566-376777695.png

修改完这两个地方之后点击保存,接着还需要修改hdr_size

1266243-20190310222410019-46466160.png

1266243-20190310222513809-688780836.png

這三個地方修改完成之後點擊保存。

最後利用acefile.py重新查看文件header信息。修改acefile.py,在3061行處添加以下語句,輸出文件hdr_crc。

1266243-20190308150606052-328146804.png

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)))

1266243-20190310222732970-1725311033.png

可以看到当前的hdr_crc为:16 9A,我们要把它改为E4 A3,保存之后重新查看文件header信息。


1266243-20190310222933918-1700514051.png


修改完成,將文件另存為1.rar。

1266243-20190308155112326-854060047.png

選擇解壓到當前文件夾或解壓到文件夾1都可以,可以看到bat文件成功解壓到開機啟動項裡。

1266243-20190309111018388-35896760.png

重啟電腦查看效果

1266243-20190309112143784-391653487.png

复现成功,自动运行bat文件弹窗。