近日Check Point團隊爆出了一個關於WinRAR存在19年的漏洞,用它來能夠得到受害者計算機的控制。攻擊者只需利用此漏洞構造惡意的壓縮文件,當受害者使用WinRAR解壓該惡意文件時便會觸發漏洞。python
該漏洞是因爲 WinRAR 所使用的一個陳舊的動態連接庫UNACEV2.dll
所形成的,該動態連接庫在 2006 年被編譯,沒有任何的基礎保護機制(ASLR, DEP 等)。動態連接庫的做用是處理 ACE 格式文件。而WinRAR解壓ACE文件時,因爲沒有對文件名進行充分過濾,致使其可實現目錄穿越,將惡意文件寫入任意目錄,甚至能夠寫入文件至開機啓動項,致使代碼執行。git
影響軟件:github
WinRAR < 5.70 Beta 1web
Bandizip < = 6.2.0.0工具
好壓(2345壓縮) < = 5.9.8.10907測試
360壓縮 < = 4.0.0.1170code
等等…ip
該漏洞的實現過程:首先新建一個任意文件,而後利用WinACE進行壓縮,修改filename來實現目錄穿越漏洞,能夠將文件解壓到任意目錄中。get
主要所需工具WinACE
、010Editor。it
下載WinACE並安裝,安裝完成後新建一個文本文件,名字任意。
而後利用WinACE進行壓縮。
而後咱們下載acefile.py腳本。
使用命令python acefile.py --headers liehu.ace
來讀取該文件頭信息。
根據漏洞的描述,問題是出如今filename中的。那主要就看下面的header吧。
用010Editor打開該文件。
須要看選中的部分。對比acefile解析的結果,並明白各個段對應的內容。
若是要修改filename,則須要修改上面標註這幾處。第一處爲0x4e9a(hdr_crc),第二處爲0x0044(hdr_size),第三處爲0x0025(filename的長度),以及最後一處爲filename。
修改順序是由後到前。
這裏修改filename爲d:\d:\liehu.txt
長度爲15,對應的hex爲0x000f
而後修改hdr_size,長度爲46,對應的hex爲0x002E。
接下來就是修改hdr_crc了,這裏有一個取巧的方法。
咱們再次運行命令python acefile.py --headers liehu.ace
程序中斷並提示CorruptedArchiveError: header CRC failed
定位到錯誤的位置
這裏ace_crc16(buf)
的值就是ace文件0x4e9a對應的值,直接打印出該值並將該位置的值修改便可。
對應的值爲63232,轉換爲hex爲0xF700。
最後文件內容爲
再次查看,能夠正常解析,並看到filename已經修改爲功
右鍵解壓該文件,則會在D盤生成一個liehu.txt文件。
測試文件:https://fuping.site/files/liehu.ace
解壓後會在D盤生成一個liehu.txt文件
有兩種方式
升級到最新版本,WinRAR 目前版本是 5.70 Beta 1
刪除UNACEV2.dll文件
此時再次解壓惡意文件會提示以下錯誤:
https://research.checkpoint.com/extracting-code-execution-from-winrar/