CVE-2011-0104分析

正文

關於office的漏洞。先把進程attach上去然後打開exploit的文件。查看程序崩潰在這裏:

查看一下棧回溯,發現此處函數地址的入口處爲:0x300ce252

在此處下斷點,重新運行程序。

查看esp的內容,此處爲該函數的返回地址。

返回地址:0x13aa90。

在此處下內存訪問斷點。繼續運行程序。發現程序斷在了此處:

與此同時,esi所指向的字符串爲:

這時候edi與ebp之間的偏移爲:0x54,而所覆蓋的字符串爲0x300,遠大於棧空間的大小,發生棧溢出。

再查看一下惡意文檔的十六進制內容:

發現剛好與位於偏移0x670地址處的內容一樣。

棧回溯一下:

查看調用情況:

0x306df0dc處調用了溢出函數。之後在此處下斷點,然後查看一下該函數的參數:

三個參數依次爲:0x13AA3B、0x300、0xFFFFEFE1。

我們可以根據前面所出現到的ebp:0x13AA3B大致猜測一下該函數的具體功能:第一參數爲複製的目的地址,第二參數爲複製的字節數,第三個參數爲最大複製字節數。

現在再來理清一下程序執行的思路:

經過反覆查看調用,發現整個程序執行流程是這樣的:

從最開始crash的函數入口開始:

經跳轉:

後調用函數:

後調用:

後就進入了溢出地址了。進入溢出地址後跳轉到了最開始crash函數崩潰的地址了,我們在崩潰地址前下一個斷點,執行:

eax的值爲eax:0x51453844,ecx:0x00000006,此時的eax的地址是不存在的,所以會崩潰。因爲poc樣本是爲2007所寫的,2003並不適用,所以這裏我們可以自己手動修改樣本內容,達到shellcode的目的,此處我們可以擡高shellcode的位置,並把eax處的值修改爲一個存在且可寫的地址:

修改爲如下:

其中0x308d5d8b爲內存中一處call esp的地址,所以能夠成功執行shellcode。

還有個後話,就是觀察一下IDA中的僞代碼:

Excel中的文件格式就不多說了,跟着上面所註釋的地方可以看見兩個格式類起着重要作用:TOOLBARDEF[0xA7]、CONTINUE[0x3C]。其中CONTINUE中的Len值0x300作爲複製字節數。TOOLBARDEF中記錄的Len值與cbtn字段控制着複製的目標地址。

修復

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章