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指向41414141EIP指向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,复制的时候也没有做长度检验,导致多出的数据溢出到了返回地址,把函数的返回地址给覆盖了。
相关文章推荐
- CVE-2012-0158个人分析
- 分析CVE-2012-0158完善静态检测工具
- CVE-2012-0158 MSCOMCTL控件漏洞分析
- CVE-2012-0158 MSCOMCTL控件漏洞分析
- cve-2012-0158漏洞分析
- CVE-2012-0158基于exp分析
- CVE-2012-1535分析报告
- CVE-2012-1876漏洞分析
- cve-2012-1876漏洞分析
- CVE-2012-0003 Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞 分析
- CVE-2012-1876Microsoft Internet Explorer Col元素远程代码执行漏洞分析
- 漏洞分析之CVE-2012-4792(UAF)
- 老漏洞easy击:CVE-2012 0158占顶!
- 【漏洞分析】CVE2012-0002漏洞分析过程详述
- Adobe Flash Player CVE-2012-0779漏洞技术分析
- MS12-043(CVE-2012-1889)漏洞分析报告
- IE UAF 漏洞(CVE-2012-4969)漏洞分析与利用
- Linux>=2.6.39 Mempodipper本地提权分析和EXP利用(CVE-2012-0056)
- Adobe Flash Player CVE-2012-0779漏洞技术分析
- 旧漏洞也容易被攻击:CVE-2012 0158占榜首!