MS10_087漏洞學習研究

類別:棧溢出,fileformat類別漏洞windows

描述: This module exploits a stack-based buffer overflow in the handling of the 'pFragments' shape property within the Microsoft Word RTF parser.函數

參考資料:《Metasploit魔鬼訓練營》p276-p286測試

 

利用的是exploit/windows/fileformat/ms10_087_rtf_pfragments_bof模塊,它會生成一個.rtf文件,在靶機中打開後會執行payload。orm

我這裏的payload是彈出計算器,成功實現!進程

 

MS10_087漏洞原理分析內存

用OllyDbg打開winword.exe,按f9運行。在word中打開測試文件ms10087.rtf,OllyDbg捕獲異常:it

出錯的緣由是什麼呢?此處訪問內存中0x00130000地址處,而經過alt+m可知0x00104000到0x0012ffff纔是當前進程的棧空間,可知這次內存訪問越界了。form

根據經驗,越界通常是想觸發異常,讓程序執行seh,那麼seh應該在以前被覆蓋了。module

 

在OllyDbg標題欄能夠看到此處的模塊是mso,用IDA打開mso.dll分析。原理

可是ida反彙編彷佛要花很久時間,我一個午覺睡醒了還卡卡的在分析,就先不弄這個ida的了。並且這一步的目的也只是分析出錯處所在的函數入口,以查看棧中對應此函數的參數。

 

這裏咱們只要在函數入口處0x30ED4406(這裏的地址爲何又固定了?並且還有很詭異的一點就是:經過ctrl+g能夠來到0x30ED4406處,可是一移動這個地址就消失,原本push edi的機器碼57和其餘機器碼組成了這裏的add指令,不知道爲何兩邊的兄弟要這麼強勢。。)

 

 

源地址爲0x1A54000C,目的地址爲0x00123E98,長度爲0x322b*4=0xC8AC個字節。目的地址離棧底0x0012ffff的距離0xC167少於複製長度,形成溢出,引起異常。

 

異常以後天然就是執行SEH,但是我這裏被覆蓋的SEH倒是指向0xBDB98B85,但是這個地址並不能訪問!

在這裏,我是先在OllyDbg中打開winword.exe,而後再在word中打開ms10087.rtf。因此我想會不會是這裏出問題,就另外不經過ollydbg直接打開winword.exe,而後打開ms10087.rtf,結果出乎意料,程序並沒溢出計算器,而是直接關閉了。

可是直接雙擊打開ms10087.rtf仍是能成功溢出的。

從新看了看書,說的挺模糊的。說是讓修改下mso.dll,設置軟斷點。重啓word,ollydbg就會加載進去。(未完待續。。)

相關文章
相關標籤/搜索