1. 程式人生 > >WinRAR存在嚴重的安全漏洞影響5億用戶

WinRAR存在嚴重的安全漏洞影響5億用戶

知識 自啟 大量 當前 全部 地址 限制 掌握 根據

WinRAR可能是目前全球用戶最多的解壓縮軟件,近日安全團隊發現並公布了WinRAR中存在長達19年的嚴重安全漏洞,這意味著有可能超過5億用戶面臨安全風險。

技術分享圖片

該漏洞存在於所有WinRAR版本中包含的UNACEV2.DLL庫中,該庫負責以ACE格式解壓縮檔案,而自2005年起WinRAR已經停止更新UNACEV2.DLL,並決定放棄ACE歸檔格式支持。

研究人員在其中發現了一個路徑遍歷漏洞,可以把被壓縮文件的文件提取到任意文件夾。攻擊者通過利用惡意ACE檔案偽裝成RAR文件,用戶在解壓惡意的壓縮文檔時,WinRAR軟件將惡意代碼解壓至系統自啟動目錄,當用戶下次登陸電腦時系統將自動運行釋放的惡意代碼。

漏洞在CVE-2018-20250、CVE-2018-20251、CVE-2018-20252和CVE-2018-20253標識下進行跟蹤。該漏洞影響WinRAR 5.61及以前的版本,目前最新版本已經放棄了對ACE格式的支持,從而消除該漏洞。

小夥伴們快檢查一下自己的電腦,如果安裝了WinRAR,安全起見一定要馬上更新至最新版本。

說到安全漏洞,網安的朋友們一定不陌生,甚至有很多人是挖洞高手。那麽棧溢出漏洞大家是否了解呢?

今天i春秋就為大家介紹一個在國內的CTF比賽中,PWN題最常見考點——緩沖區溢出漏洞,而緩沖區溢出代表就是棧溢出漏洞,我們一起來學習一下吧。

基礎知識

棧是一種先進後出的數據結構,從高地址向低地址增長的內存結構。

函數調用棧是指程序運行時內存一段連續的區域,用來保存函數運行時的狀態信息,包括函數參數與局部變量等,是系統棧的一部分。

在一次函數調用中,函數調用棧中將被依次壓入:函數實參、返回地址、EBP。如果函數有局部變量,那就在棧中開辟相應的空間以構造變量。

技術分享圖片

ESP 稱為棧頂指針,用來指示當前棧幀的頂部。

EBP 稱為棧基址指針,用來指示當前棧幀的底部。

漏洞原理

棧溢出漏洞是由於使用了不安全的函數,如C中的 read(fd, buf, nbytes)、gets(s)等,通過構造特定的數據使得棧溢出,從而導致程序的執行流程被控制。

當程序代碼如下時:

技術分享圖片

當構造變量char s[12]時,系統就在棧中給s開辟棧空間,可gets(s)函數未限制輸入字符長度,可以構造大量的數據來超出變量的空間從而造成溢出,覆蓋到s以上的棧空間。

技術分享圖片

解題步驟

技術分享圖片

例舉一道棧溢出的PWN題,根據解題步驟來解答。

1、逆向工程:

將PWN題拖入IDA,點擊程序入口函數。按F5逆向main函數,查看對應的C偽代碼。

main函數調用vulnerable()函數。

技術分享圖片

點擊進入vulnerable()函數並F5逆向。

技術分享圖片

vulnerable()函數中調用了gets()和puts()函數,而程序的邏輯就運行main函數和vulnerable函數。

vulnerable函數功能:輸入字符串,輸出字符串

程序中主要函數有:

內置行數:gets、puts、system

自定義函數:main、test、success

2、分析代碼:

進行逆向工程拿到C偽代碼,代碼大致如下:

技術分享圖片

gets() 是一個危險函數,因為它不檢查輸入字符串的長度,而是以回車來判斷是否輸入結束,所以很容易導致棧溢出。

3、漏洞利用:

查看程序的保護機制:

技術分享圖片

程序在無任何保護的情況下進行解題:

技術分享圖片

輸入s的值溢出到返回地址,將返回地址替換成text函數的起始地址。

查看text函數的起始地址。

技術分享圖片

EBP與EBP的距離14H,而棧中的EBP占棧內存4H,所以要覆蓋到放回地址需要18H。

技術分享圖片

編寫腳本如下:

技術分享圖片

利用腳本後的棧結構如下:

技術分享圖片

所以當函數調用完畢後,執行返回地址時將執行text函數。

運行腳本,成功運行text函數:

技術分享圖片

4、getshell:

分析代碼發現程序中有getshell函數,這時就不需要構造shellcode,直接溢出返回地址,讓程序執行此函數。

技術分享圖片

查看success函數地址:

技術分享圖片

腳本如下:

技術分享圖片

運行腳本,成功拿到shell:

技術分享圖片

以上就是今天的全部內容,大家對棧溢出漏洞都了解了吧,相信對於新手小白來說也是一個學習的知識點,要好好掌握哦!

WinRAR存在嚴重的安全漏洞影響5億用戶