测试环境
Microsoft Office 2003
win xp sp3
测试样本
用metasploit生成弹计算器的样本
可以成功弹出计算器
漏洞分析
打开poc,触发崩溃
从栈顶向上回溯,看到了MSCOMCTL模块
模块是动态载入的,下断点让它载入时断下来
bp LoadLibraryExW,[UNICODE [esp+4]] == "C:\\WINDOWS\\system32\\MSCOMCTL.OCX"
在栈上ret那块跟入下断
模块载入,跟着下断就得了
然后就跑到了MSComCtl
在275C89C7下个断,然后单步
之前推断溢出发生在275C876D这个函数,现在跟进去看看
碰到了这个
41414141被复制到了当前栈上
最后
看看这段,有两个复制函数,第二个函数有复制溢出
在IDA找到了这块
从上面可以判断:
开辟了0x14的栈空间
COLLSTREAMHDR=[ebp-14],读取0xc字节
用掉了0xc,还剩0x8
判断前4个字节是否为"Cobj",cbSize是否不小于8
cbSize=[ebp-c]
v6=[ebp-8]
这里cbSize肯定大于8,复制操作后,产生栈溢出
所以这里是cbSize的问题