WinRAR多是目前全球用戶最多的解壓縮軟件,近日安全團隊發現並公佈了WinRAR中存在長達19年的嚴重安全漏洞,這意味着有可能超過5億用戶面臨安全風險。shell
該漏洞存在於全部WinRAR版本中包含的UNACEV2.DLL庫中,該庫負責以ACE格式解壓縮檔案,而自2005年起WinRAR已經中止更新UNACEV2.DLL,並決定放棄ACE歸檔格式支持。安全
研究人員在其中發現了一個路徑遍歷漏洞,能夠把被壓縮文件的文件提取到任意文件夾。攻擊者經過利用惡意ACE檔案假裝成RAR文件,用戶在解壓惡意的壓縮文檔時,WinRAR軟件將惡意代碼解壓至系統自啓動目錄,當用戶下次登錄電腦時系統將自動運行釋放的惡意代碼。數據結構
漏洞在CVE-2018-20250、CVE-2018-2025一、CVE-2018-20252和CVE-2018-20253標識下進行跟蹤。該漏洞影響WinRAR 5.61及之前的版本,目前最新版本已經放棄了對ACE格式的支持,從而消除該漏洞。函數
小夥伴們快檢查一下本身的電腦,若是安裝了WinRAR,安全起見必定要立刻更新至最新版本。
說到安全漏洞,網安的朋友們必定不陌生,甚至有不少人是挖洞高手。那麼棧溢出漏洞你們是否瞭解呢?學習
今天i春秋就爲你們介紹一個在國內的CTF比賽中,PWN題最多見考點——緩衝區溢出漏洞,而緩衝區溢出表明就是棧溢出漏洞,咱們一塊兒來學習一下吧。spa
基礎知識指針
棧是一種先進後出的數據結構,從高地址向低地址增加的內存結構。code
函數調用棧是指程序運行時內存一段連續的區域,用來保存函數運行時的狀態信息,包括函數參數與局部變量等,是系統棧的一部分。圖片
在一次函數調用中,函數調用棧中將被依次壓入:函數實參、返回地址、EBP。若是函數有局部變量,那就在棧中開闢相應的空間以構造變量。內存
ESP 稱爲棧頂指針,用來指示當前棧幀的頂部。
EBP 稱爲棧基址指針,用來指示當前棧幀的底部。
漏洞原理
棧溢出漏洞是因爲使用了不安全的函數,如C中的 read(fd, buf, nbytes)、gets(s)等,經過構造特定的數據使得棧溢出,從而致使程序的執行流程被控制。
當程序代碼以下時:
當構造變量char s[12]時,系統就在棧中給s開闢棧空間,可gets(s)函數未限制輸入字符長度,能夠構造大量的數據來超出變量的空間從而形成溢出,覆蓋到s以上的棧空間。
解題步驟
例舉一道棧溢出的PWN題,根據解題步驟來解答。
一、逆向工程:
將PWN題拖入IDA,點擊程序入口函數。按F5逆向main函數,查看對應的C僞代碼。
main函數調用vulnerable()函數。
點擊進入vulnerable()函數並F5逆向。
vulnerable()函數中調用了gets()和puts()函數,而程序的邏輯就運行main函數和vulnerable函數。
vulnerable函數功能:輸入字符串,輸出字符串
程序中主要函數有:
內置行數:gets、puts、system
自定義函數:main、test、success
二、分析代碼:
進行逆向工程拿到C僞代碼,代碼大體以下:
gets() 是一個危險函數,由於它不檢查輸入字符串的長度,而是以回車來判斷是否輸入結束,因此很容易致使棧溢出。
三、漏洞利用:
查看程序的保護機制:
程序在無任何保護的狀況下進行解題:
輸入s的值溢出到返回地址,將返回地址替換成text函數的起始地址。
查看text函數的起始地址。
EBP與EBP的距離14H,而棧中的EBP佔棧內存4H,因此要覆蓋到放回地址須要18H。
編寫腳本以下:
利用腳本後的棧結構以下:
因此當函數調用完畢後,執行返回地址時將執行text函數。
運行腳本,成功運行text函數:
四、getshell:
分析代碼發現程序中有getshell函數,這時就不須要構造shellcode,直接溢出返回地址,讓程序執行此函數。
查看success函數地址:
腳本以下:
運行腳本,成功拿到shell:
以上就是今天的所有內容,你們對棧溢出漏洞都瞭解了吧,相信對於新手小白來講也是一個學習的知識點,要好好掌握哦!