1. 程式人生 > >[漏洞分析]對CVE-2012-0158的分析

[漏洞分析]對CVE-2012-0158的分析

對CVE-2012-0158的分析

漏洞分析環境與工具

漏洞分析環境:Window 7 專業版(32位)
帶有漏洞的軟體:office 2003 sp3
工具:OllyDbg、IDA Pro

漏洞復現

開啟office2003使用OllyDbg進行附加,執行測試檔案觸發漏洞如圖所示。可以看見,EIP指向了0X41414141處,發生了緩衝區溢位漏洞。
在這裡插入圖片描述

分析漏洞

通過分析溢位點附近的堆疊,我們可以找到一個地址0X275C8A0A,可以看出這個地址是MSCOMCTL模組中的地址。因為溢位點附近的堆疊中儲存了這個地址,所以我們可以判斷漏洞的溢位點就在這附近。

對函式下斷點,再次執行OllyDbg,單步除錯。當單步步過0X275C876D這個函式的時候,堆疊發生了變化,返回地址被0X41414141覆蓋。
在這裡插入圖片描述


用IDA Pro開啟MSCOMCTL.ocx,定位到0X275C876D這個地址,利用F5檢視原碼。
在這裡插入圖片描述
可以發現當程式呼叫MSCOMCTL.275C876D這個函式的時候傳遞的第三個引數,和函式內部的區域性變數進行比較,如果相等,那麼進行記憶體空間的拷貝。從上面的圖中可以看出,區域性變數通過呼叫一個函式進行賦值,猜想比較的應該是word檔案的大小是否匹配。開啟010Editor匯入測試樣本,利用搜索功能搜尋傳進來的引數(具體的值可以通過OllyDbg動態除錯的時候獲取)。發現有兩個一樣的值,通過改變其中某個值得大小進行驗證。最終可以得出第一個是傳進來的函式引數,第二個是區域性變數。
在這裡插入圖片描述

漏洞成因

綜上可以得出漏洞成因是在讀取資料的時候,讀取的長度和驗證的長度都在檔案中,且可以人為修改,進而出發緩衝區溢位。

漏洞利用

編寫shellcode,執行結果如下圖所示。
在這裡插入圖片描述