正文
關於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字段控制着複製的目標地址。
修復