首页
社区
课程
招聘
[原创][分享]CVE-2012-0158分析调试
发表于: 2018-11-13 17:44 4046

[原创][分享]CVE-2012-0158分析调试

2018-11-13 17:44
4046

环境: win7 32 sp3, office2010

工具: winDbg, IDA

- 样本来源《漏洞战争》

环境搭建好后开始分析:

0x01 寻找漏洞函数

  • 1.打开world, 用winDbg附加world
    图片描述
  • 2.输入'g'运行,然后用world打开poc
    图片描述
  • 3.触发了崩溃
    图片描述
    从崩溃点我们可以看到漏洞模块的信息和触发异常的地址,关于漏洞模块可以使用猜测和验证去确定哪个是漏洞模块
  • 4.接下来查看一下函数的堆栈调用情况,发现堆栈地址已经被破坏掉了
    图片描述
  • 5.用dd ESP-100 L60查看前面的堆栈
    图片描述
    又看到了41414141这个地址,往上找一下找到了漏洞模块的返回地址(还记得刚开始我们看到的MSCOMCTL模块的加载地址吗)
  • 6.用IDA加载漏洞模块,按‘g’在IDA里面搜索模块函数的返回地址
    图片描述

    0x02验证漏洞函数

  • 然后我们需要来验证一下这个函数是不是漏洞函数
    1.重新打开office - 附加 - 下模块断点 - ‘g’
    图片描述
    2.断下来之后再下bp断点
    图片描述
    3.断下来之后,需要分析一下堆栈里面的内容
    图片描述
    发现了MSCOMCTL模块内的一个地址,用IDA查看一下是不是外层函数的返回地址
    3.1.往上找一下,找到这整个函数的起始再找这个函数的调用函数
    图片描述
    图片描述
    发现这个地址确实是外层函数的返回地址
    4.‘F10’单步走一下,再查看ESP
    图片描述
    发现这个返回地址已经被修改了,验证了这个就是漏洞函数

    0x03 缩小漏洞范围

  1. 用IDA静态看一下这个函数内部,同过猜测加验证得出这个memcpy是漏洞函数
    图片描述
    1.1.鼠标选中memcpy按‘tab’键,到这个函数的汇编代码处
    图片描述
    发现这个函数的汇编代码不是很多,可以通过单步走碰到赋值的地方就查看一下堆栈信息来确定修改返回地址的位置

    - 0x04

  • 重新打开office - 附加 - 下模块断点 - ‘g’
  1. 断下来之后,在memcpy函数处下bp断点
    图片描述
  2. 运行到memcpy处,‘F10’单步走,遇到有赋值的地方就查看一下函数返回地址,确定是在什么地方发生了溢出
    图片描述
    在这行275d6c3a这行汇编代码执行完成后发生了溢出
  3. 我们来分析一下这块汇编指令
    图片描述
    这样我们就确定了溢出点
    感悟:对栈的结构要有一个清晰的认识,才会知道该去什么地方找什么内容

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-11-14 12:52 被从黎明到衰落编辑 ,原因:
上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 292
活跃值: (805)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
CVE2012-0158之所以经典不是因为它是一个栈溢出,而是一个很典型的由于程序员代码逻辑的失误导致的栈溢出,你再往前回溯应该可以看到一处if语句,我记得if语句里的变量应该是控制memcpy的大小的,本来这个大小应该if(size<=8),但是程序员写成了>=8,因此导致了后面的memcpy可以拷贝超过栈开辟空间大小的内容,这个代码的失误现在的角度来看可以说是很低级了,我个人认为漏洞分析还是应该分析到最本质的漏洞成因,如果只分析漏洞发生时的情况是不太完整的。楼主如果再往外回溯一层函数的话应该就能看到那处经典且低级的逻辑失误了。
感谢楼主的分享
2018-11-14 07:56
0
游客
登录 | 注册 方可回帖
返回
//