CVE-2012-0158浅析-word栈溢出漏洞
来源:互联网 发布:迪联软件 编辑:程序博客网 时间:2024/06/07 02:15
本文转载自CVE-2012-0158漏洞分析
mscomctl.ocx是Windows公用的ActiveX插件控制模块。Microsoft Office多个版本中的MSCOMCTL.OCX的ListView、ListView2、TreeView和TreeView2 ActiveX控件中存在漏洞,远程攻击者可利用该漏洞借助触发系统状态内存破坏的特制web站点、Office文档或.rtf文件。用IDA Pro打开C:\WINDOWS\system32目录下的MSCOMCTL.OCX,双击左侧的Function Name窗口中的sub_275C89C7函数和sub_275C876D函数,按下F5键查看它们反汇编出的C代码。
sub_275C876D中依次调用了HeapAlloc、qmemcpy和HeapFree,关键在于 qmemcpy((void *)a1, lpMema, dwBytes);
它的作用就是将dwBytes指定的字节数从lpMema中复制到a1中。sub_275C89C7第一次调用sub_275C876D读取了12个字节,如果读取的这12个字节前4个字节是0x6A626F43h(也就是图中以十进制方式显示的1784835907)并且需要继续读取的字节数大于8则继续读取。这里本来应该是小于8才继续读取,但是却错写成大于8才继续读取。这个字节大小是可以控制的,所以当传递比如0x8282时,那么程序就会读取样本相应位置可控的0x8282字节到堆空间,复制到栈上时进而覆盖掉函数的返回地址,执行shellcode。这是从网上找到的POC。操作系统版本为XP SP3,Office版本为Standard Edition 2003。
打开POC,word立即闪退并弹出计算器。
再一次打开这个样本,发现程序报错。所以在测试前记得先备份,因为下面我们多次要打开这个样本。
用Windbg附加word调试。因为程序弹出了计算器,所以肯定会调用WinExec函数,使用bp kernel32!WinExec命令下断点。
现在把样本拖到word中打开,程序断在WinExec入口点。使用dd esp命令查看堆栈情况,再使用da xxxxxxx命令查看WinExec的参数。
到这个目录看一下,发现a.exe其实就是一个计算器,shellcode把系统的calc复制到这个目录再运行它。
WinExec的返回地址是00127dca。使用kb命令打印堆栈信息。
重新调试,再次载入样本,在MSCOMCTL!DllGetClassObject+0x41cc0处下断点。
使用u命令查看附近的命令。
断在call的上一句,kb发现这一层函数的返回地址是0x275e701a。
再次使用u命令查看附近的命令。
执行两次p命令,p命令的含义是单步步过,不进入函数的调用。
为了确认这个时候溢出是否已经发生,在内存中搜索shellcode使用的万能跳转指令0x7FFA4512。在经典的栈溢出模型中,通过覆盖函数的返回地址来控制程序执行流程时通常会将返回地址覆盖为0x7FFA4512,这个地址是一条JMP ESP指令,在函数返回时就会跳转到这个地址去执行,也就是执行JMP ESP,而此时ESP刚好指向栈上布置的shellcode,于是就执行了shellcode。
windbg中使用s -a 00000000 001fffff xxxxxxxx命令在内存中00000000~001fffff的范围内搜索ASCII字符串xxxxxxxx。E�是十六进制1245FA7F的ASCII表示方式,可以在UltraEdit中利用十六进制模式进行转换。
在00127b64 和00129c3e处找到了万能跳转指令。
在memory窗口中输入00127b64,发现了万能跳转和shellcode。
在call调用MSCOMCTL!DllGetClassObject+0x41a29之前这里还没有被shellcode覆盖,那么溢出就发生在这里。一直用p命令单步执行下去,来到了jmp esp指令处,接下来就会跳转到shellcode。
继续单步执行,弹出了计算器。
- CVE-2012-0158浅析-word栈溢出漏洞
- CVE-2010-3333浅析-word栈溢出漏洞
- CVE-2012-1876浅析-Internet Explorer堆溢出漏洞
- CVE-2017-7269浅析-IIS6.0栈溢出漏洞
- CVE-2010-5301浅析-Kolibri栈溢出漏洞
- CVE-2010-2883浅析-Adobe Reader栈溢出漏洞
- CVE-2011-0104浅析-excel栈溢出漏洞
- CVE-2017-6008浅析-HitmanPro内核池溢出漏洞(Win7)
- CVE-2016-10190浅析-FFmpeg堆溢出漏洞
- CVE-2014-6332浅析-Internet Explorer整数溢出漏洞
- CVE-2015-1641浅析-word类型混淆漏洞
- CVE-2015-2545浅析-word释放重引用漏洞
- CVE-2017-11826浅析-word类型混淆漏洞
- CVE-2014-3791浅析-Easy File Sharing Web Server栈溢出漏洞(从fuzzing到0day)
- cve-2012-0158漏洞分析
- CVE-2013-4694 WinAmp 5.63 栈溢出漏洞分析
- 漏洞分析之CVE-2010-2883(栈溢出)
- CVE-2012-4792浅析-Internet Explorer释放重引用漏洞
- 微信企业号会议助手---一个简单的SSM实例
- 快速选择排序(quickselect)--基于quicksort
- MySQL数据库出现The server quit without updating PID file.
- 推荐算法学习2-MXNET 实现movielen 融合个性化推荐-续-加入CNN文本处理
- Cg Programming/Unity
- CVE-2012-0158浅析-word栈溢出漏洞
- 解决MDK5在调试中崩溃,提示“IDE已停止工作”的一种方法
- Java双缓冲队列实现
- Android异步下载图片并且缓存图片到本地
- Handler
- ICE的使用
- UITableView拖动时计算页码 & 往上拖拉时自动加载
- MySQL提示:The server quit without updating PID file问题的解决办法
- nyoj 104最大和