打開Word 2003而且附加到x32dbg中,並用Word 03打開目標文件(此處是Crack.rtf),發現日誌中有異常記錄,異常點位於30E9KB88處(位於MSO.dll中)html
此處從0x11040004處複製到0x00123DC0處,次數爲0x322B次(0xACC8/4),具體狀況咱們回溯到0x30F4CC96處上面查看到Crack處的函數調用了來自0x30F4CC93處的Call dword ptr [eax+1C] //call sub_30E9EB62()。在IDA Pro中查看30E9EB62(),發現就是簡單的調用qmemcpy(dst,src,count)shell
再次斷點到0x30F4CC93處來查看,發現dst是0x00123DC0,src是0x1104000C([0x014D10F0+0x10]),count是0xACC8([0x014D10F0+0x8]),而sub_30F4CC5D()中只有0x14字節的空間(sub_30E9EB62()不開闢新的棧空間),0xACC8早就溢出當前函數的棧空間了,因此此處未對qmemcpy()中的count進行檢查而致使棧溢出。windows
跟蹤內存發現,咱們複製的內容是Crack.rtf中acc8後的文本(此處文本轉成了十六進制,即「41」=》0x41),而前面的「acc8」也恰好對應以前的qmemcpy()的count。函數
最後,構造POC,第一時間我想到SEH exploit,剛好經過Mona檢測到MSO.dll的SafeSEH是關閉的而且找到0x30CA50A9處做爲ROP鏈首,溢出的SEH處的內容在Crack.rtf中的0x176C0偏移處。工具
最終得出shellcode。日誌
shellcode={ \xeb,\x0a,\x90,\x90,\xa9,\x50,\xca,\x30,\x90,\x90,\x90,\x90, \x6A,\x00,\x68,\x46,\x75,\x63,\x6B,\x89,\xE0,\x6A,\x00,\x68,\x43,\x61,\x70,\x00, \x89,\xE3,\x6A,\x00,\x53,\x50,\x6A,\x00,\xBA,\x30,\x1C,\xC9,\x30,\x8B,\x12,\xFF,\xD2,\xC3, } //shellcode=jmp 0A+\x90*2+ROP address+\x90*4+payload
效果如圖所示:code
PS:RTF文件格式說明orm