WinRAR漏洞復現過程

0x01 漏洞描述

近日Check Point團隊爆出了一個關於WinRAR存在19年的漏洞,用它來能夠得到受害者計算機的控制。攻擊者只需利用此漏洞構造惡意的壓縮文件,當受害者使用WinRAR解壓該惡意文件時便會觸發漏洞。python

該漏洞是因爲 WinRAR 所使用的一個陳舊的動態連接庫UNACEV2.dll所形成的,該動態連接庫在 2006 年被編譯,沒有任何的基礎保護機制(ASLR, DEP 等)。動態連接庫的做用是處理 ACE 格式文件。而WinRAR解壓ACE文件時,因爲沒有對文件名進行充分過濾,致使其可實現目錄穿越,將惡意文件寫入任意目錄,甚至能夠寫入文件至開機啓動項,致使代碼執行。git

0x02 漏洞影響

影響軟件:github

WinRAR < 5.70 Beta 1web

Bandizip < = 6.2.0.0工具

好壓(2345壓縮) < = 5.9.8.10907測試

360壓縮 < = 4.0.0.1170code

等等…ip

0x03 漏洞復現

該漏洞的實現過程:首先新建一個任意文件,而後利用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文件

0x04 修復建議

有兩種方式

  1. 升級到最新版本,WinRAR 目前版本是 5.70 Beta 1

  2. 刪除UNACEV2.dll文件

此時再次解壓惡意文件會提示以下錯誤:

0x05 參考

https://research.checkpoint.com/extracting-code-execution-from-winrar/

相關文章
相關標籤/搜索