您的位置:首页 > 其它

CVE-2012-0158分析

2017-12-15 14:39 405 查看

这个实验参考了漏洞战争和http://blog.csdn.net/qq_35519254/article/details/53103931。

本来想按照漏洞战争上的步骤来实现的,但是不知道为啥在275c89c7那里老断不下来,我已经把MSCOMCTL.ocx下了断点之后才打开poc.doc的,唉,也不知道为啥。
实验写的有点乱,但是按照我想的思路从头做到了尾,总算是把这个入门级的漏洞给分析完了。下一次分析cve-2010-2883。

1       基本信息

rtf文件的开头如下

{\rtf1

{\fonttbl{\f0\fnil\fcharset0 Verdana;}}

\viewkind4\uc1\pard\sb100\sa100\lang9\f0\fs22\par

\pard\sa200\sl276\slmult1\lang9\fs22\par

{\object\objocx

{\*\objdata

01050000020000001B0000004D53436F6D63746C4C69622E4C697374566965774374726C2E32000000000000000000000E0000

D0CF11E0A1B11AE1000000000000000000000000000000003E000300FEFF09000600000

导致漏洞的是\object标签内容,其中的\objocx代表在OLE容器中嵌入OCX控件,后面的\objdata包含对象数据,OLE对象采用OLESaveToStream结构,后面的D0CF11E0是OLE签名,代表DOCFILE,从此处开始就是OLE数据。

对OLE对象进行提取和分析,发现覆盖返回地址的0x41414141位于EleName=Contents的Data字段。



覆盖返回地址的0x41414141存放在EleName=Content的data字段中

2       详细分析

1.       用windbg附加WINWORD.exe,打开poc.doc,程序断下,EIP指向41414141



EIP指向41414141
2.       查看栈回溯,栈回溯已经被破坏掉了



栈回溯
3.       查看栈中信息,离41414141最近的返回地址位于0x275c8a0a,位于MSCOMCTL.ocx模块

 


4.       从0x275c8a0a开始向前反汇编20条指令。看到0x275c8a0a位于函数sub_275c89c7中。



5.       重新加载poc.doc,在MSCOMCTL.ocx刚加载时下断点,单步运行到0x275c89cd时,对esp+4(下一栈帧的栈顶,即返回地址)下内存写断点,发现程序断在了sub_275c876d函数里面。



单步执行到0x275c89cd



在返回地址下断点



对返回地址进行写操作发生在函数sub_275c876d中
6.       在0x275c87cb处进行复制的时候发生了栈溢出,导致返回地址被覆盖。查看代码,确定栈溢出原因。



发生栈溢出
3 总结
发生栈溢出的原因就是只分配了0x14字节的空间,第一次用掉了0xC,只剩下了0x8,但是第二次复制的数据远远大于0x8,复制的时候也没有做长度检验,导致多出的数据溢出到了返回地址,把函数的返回地址给覆盖了。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: