正文
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=51453844 ebx=00000002 ecx=00000006 edx=3161feb0 esi=00000000 edi=00000400
eip=300ce361 esp=0013aa24 ebp=0013aa8c iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010206
***
ERROR: Symbol file could not be found. Defaulted to export symbols
for C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE -
EXCEL!Ordinal41+0xce361:
300ce361 8908 mov dword ptr [eax],ecx ds:0023:51453844=????????
0:000> kb
ChildEBP RetAddr Args to Child
WARNING: Stack unwind information not available. Following frames may be wrong.
0013aa8c 30424232 42414242 41385058 494a7542 EXCEL!Ordinal41+0xce361
0013aa90 42414242 41385058 494a7542 584b4c4b EXCEL!Ordinal41+0x424232
0013aa94 41385058 494a7542 584b4c4b 30435451 0x42414242
0013aa98 494a7542 584b4c4b 30435451 50453043 0x41385058
运行excel.exe,然后用Immunity Debugger附加excel2003进程,按F9,使excel2003运行出现打开后的界面,打开exploit.xlb样本文件,打开后触发异常:
通过向上进行代码回溯分析,崩溃地址位于函数sub_300CE252:
然后,在0x300CE252下断点,并对栈顶下内存写入断点(此处的栈顶就是调用sub_300CE252函数时将返回地址压栈时的ESP值,即0x0013AA90):
按F9执行到0x300CE3C8,此处进行循环复制数据到栈上,导致溢出:
此时中断,查看寄存器值发现EBP=0013AA3B,EDI=0013AA9B,复制了0x60个字节:
根据《漏洞战争》P53和P54的分析,REP MOVS 操作的目的地址由ebp提供,由此得知,当复制0x60个字节时edi的值由于递增覆盖到了栈顶(0x0013AA90,此处在漏洞利用中应为“跳板地址”)。
单步执行到该段程序的末尾处Retn 0c处时,此时栈如图:
此时ESP值为0x001379EC。
通过向上回溯代码,发现该段函数开始于0x300CE380,因此定义该函数为sub_300CE380:
从Call Stack中可以看出,函数sub_300CE380被函数sub_306DF0DC调用: