天天看點

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

Yale 合天智彙

01漏洞背景

2019 年2 月 20日 @NadavGrossman 發表了一篇關于他如何發現一個在WinRAR 中存在19 年的邏輯問題以至成功實作代碼執行的文章。

WinRAR 代碼執行相關的CVE 編号如下:

CVE-2018-20250,CVE-2018-20251, CVE-2018-20252, CVE-2018-20253

該漏洞是由于WinRAR 所使用的一個陳舊的動态連結庫UNACEV2.dll所造成的,該動态連結庫在2006 年被編譯,沒有任何的基礎保護機制(ASLR,DEP 等)。該動态連結庫的作用是處理ACE 格式檔案。而在解壓處理過程中存在一處目錄穿越漏洞,允許解壓過程寫入檔案至開機啟動項,導緻代碼執行。

02準備工作

下載下傳安裝winace,一路預設安裝即可

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

建立一個demo檔案夾,建立名為test的文本文檔,内容如下

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

使用winace打開

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

點選右上角file->create

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

陰影部分下拉框選擇storefull path

點選add即可

此時在demo檔案夾下生成了test.ace

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

03熟悉ACE格式

接下來使用16進制編輯器打開(winhex,010Editor也行),此處使用010Editor進行

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

待會兒需要在這兒修改一些資料

接下啦先gitclone https://github.com/droe/acefile

我們需要使用acefile.py來進行校驗等操作,這是python3寫的,它的功能是

1、可以提取ACE檔案。

2、包含有關ACE檔案格式的簡要說明。

3、有一個非常有用的功能,列印檔案格式标題和解釋

win上沒有3的環境,是以我使用kali來進行

首先下載下傳test.ace

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

然後檢視檔案頭資訊

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

回顯如下

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

關鍵參數詳細說明:

·hdr_crc:

兩個CRC字段存在于2個标頭中。如果CRC與資料不比對,則中斷提取。

·檔案名:

檔案名包含檔案的相對路徑。在提取過程中(包括檔案)建立相對路徑中指定的所有目錄。檔案名的大小由十六進制轉儲中的2個位元組(小端)定義。

·advert:

如果使用未注冊版本的WinACE建立存檔,則在建立ACE存檔期間,WinACE會自動添加廣告字段。

·檔案内容:

“origsize” -内容的大小。

“hdr_size” –頭部大小。

上圖可以看到crc為0xc5e9,size為63,這個63是十進制,轉換為16進制為

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

而在010Editor中看到的是相反的(小端序),如c5e9,在下圖則是e9c5,003f在下圖則是3f00

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

另外還有個參數就是檔案名長度,使用acefile沒檢測,我們可以手動檢視

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

陰影部分即檔案名,長度在最下面的選區中可以看到是20h,即對應陰影選中前的2000

04構造惡意檔案

很明顯,crc受限于檔案内容,size受限于檔案内容,檔案名長度受限于檔案檔案名,是以需要從檔案内容、檔案名開始修改

(使用010Editor的好處就是可以直接在左側進行修改)

下圖橙色的就是我們修改的内容

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

把helloworld改成byeworld,檔案名改成了evil.txt

之後按照上面的分析,我們需要修改檔案名長度這個參數

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

長度為1bh,是以将2000改為1b00即可

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

然後修改size

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

大小為3ah,将陰影前的3f00(原size)修改為3a00(現在的size)

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

接下來修改CRC,crc怎麼修改呢?crc是循環備援校驗,根據檔案自有的算法得出,那麼我們怎麼才能得到修改後的檔案的CRC呢?

别忘了我們之前的acefile.py,這個腳本為了擷取ace檔案資訊,肯定會先對ace檔案進行校驗,檢視它的代碼找到校驗邏輯不就好了?

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

代碼很長,通讀不顯示,不如把剛才修改後的檔案先校驗一下,看看會出什麼提示,然後根據關鍵字去定位代碼段

重新在kali下載下傳修改後的ace

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

然後檢測

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

果然提示檔案頭CRC校驗出錯

根據關鍵字定位到代碼片段

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

根據邏輯,3060行的判斷成立時則會抛出crc校驗出錯的提示,為此,我們可以列印出if判斷的對象,即ace_crc16(buf)

在3061行插入一句代碼即可

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

再次運作

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

36050便是我們的crc了

同樣轉成16進制

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

将相應位置資料修改為D28C即可

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

儲存後再次校驗

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

沒有出錯,并且顯示了頭資訊

到這一步,我們的惡意檔案就制作完成了。

05執行攻擊

受害者如果按照平時的情況解壓

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考
winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

則會在我們設定好的路徑下解壓出惡意檔案

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

06修複

1.盡快更新到最新版本的WinRAR

下載下傳位址如下

32位:http://win-rar.com/fileadmin/winrar-versions/wrar57b1.exe

64位:http://win-rar.com/fileadmin/winrar-versions/winrar-x64-57b1.exe

2.删除UNACEV2.dll

找到所使用的壓縮檔案,右鍵打開檔案所在位置

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

在打開的檔案夾下删除該檔案即可

winrar 去廣告_WinRAR目錄穿越漏洞複現及防禦01漏洞背景02準備工作03熟悉ACE格式04構造惡意檔案05執行攻擊06修複07參考

07參考

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

本文為合天原創,未經允許,嚴禁轉載