0x00 CVE-2012-0158 调试过程
首先给WinExec下断点
其中WinExec的定义如下:
此时的栈帧
低地址
WinExec的返回地址
lpCmdLine
uCmdShow
FunA调用 WinExec
高地址
|
|
0012189a 是WinExec的返回地址
08d9f0a8 是lpCmdLine
00000000 是uCmdShow
0:000> db 08d9f0a8
08d9f0a8 43 3a 5c 44 6f 63 75 6d-65 6e 74 73 20 61 6e 64 C:\Documents and
08d9f0b8 20 53 65 74 74 69 6e 67-73 5c 41 64 6d 69 6e 69 Settings\Admini
08d9f0c8 73 74 72 61 74 6f 72 5c-61 2e 65 78 65 00 00 00 strator\a.exe…
|
|
kb命令可以显示放在栈上的前三个参数
kp命令可以根据符号文件中的函数原型信息来自动
0:000> kv
ChildEBP RetAddr Args to Child
001215cc 0012189a 08d9f0a8 00000000 08d9f0a8 kernel32!WinExec (FPO: [Non-Fpo])
WARNING: Frame IP not in any known module. Following frames may be wrong.
001215fc 275c8a0a 08d9ffe8 0d403db0 0001c000 0x12189a
00121638 001216b1 1005c48b c7000001 4d032400 MSCOMCTL!DllGetClassObject+0x41cc6
00000000 00000000 00000000 00000000 00000000 0x1216b1
通过IDA逆向MSCOMCTL.OCX,发现其导出函数DllGetClassObject的起始地址为0x27586d44
0x27586D44 + 0x41cc6 = 0x275c8a0a
0x275c8a0a 位于函数sub_275c89c7(int a1,BSTR bstrString)中
即函数sub_275c89c7就是包含漏洞的函数
首先看内存地址为275c89c7处的代码
sxe ld:MSCOMCTL.OCX
|
|
未完、待续