CVE-2012-0158这个洞我之前分析过,漏洞战争这本书里也写过,但是都是用poc分析的,我这次找了一个弹计算器的exp来分析,感觉用poc和用exp还是不一样的,从exp分析要比从poc分析更复杂一些,或者说是要使用一些独特的小技巧。顺带补齐漏洞利用的内容,上次没有写这个,看了一下漏洞分析这本书也没有写怎么利用的这个漏洞。

0x0.分析漏洞

0x2.漏洞本质成因

0x3.漏洞利用

0x0.分析漏洞

首先是用windbg挂载word2003进程,F5继续执行之后加载exp文件,会发现中断在了如图所示的地方。

可以由图看出来这是进程退出了,由此推测是shellcode执行完成并且安全顺利的退出了进程。我们要做的就是定位shellcode在内存中的位置。kp一下,如图。可以看到是刚刚调用了ExitProcess函数。

通过对ExitProcess函数下断就可以顺藤摸瓜找到shellcode的位置,如图我们可以看到ExitProcess的调用位置是0x12165C,这个地址明显是在栈上的。

我们来看下0x12165C这个地址到底是有什么东西,如图可以看到确实是shellcode。

然后就是最重要的问题了,我们知道栈溢出是函数向栈上写入数据导致的。我们现在已经知道了栈上的写入位置了,那么怎么找出是在哪个函数中进行写入的呢?这里就是一个技巧了,也是从仙果版主那里学到的。

方法是:对这块栈下写入记录断点,根据断点输出情况来分析。

但是这个断点会影响效率,所以我们尽可能晚的去下记录断点。我们在准备打开文件时Ctrl+Break抛出一个断点。然后下断ba w 4 0x12165C "r eip;gc",输出如图。

可以看到了,最后一个非栈上eip既是漏洞的触发点。如果对这个地方下断的话可以看到0x275c87cb这个地方的是执行过多次的,我们反复调试可以找到最后触发漏洞的那一次,也可以对ecx即复制的大小下条件断点进行输出来看一下什么情况。

如图所示我使用了 ba e 1 MSCOMCTL!DllGetClassObject+0x41a84 "r ecx;gc"来下条件记录断点,输出可以看到有一个超大的ecx=0x8282而我们知道ecx就是复制的次数也就是复制的字节数,这里我们就找到了是第4次调用到memcpy时发生了溢出。

在第四次调用时断下来,看一下前面。我们可以看到以下一些语句

 275c878a 8b7d10      mov    edi,dword ptr [ebp+10h]
275c87c1 8bcf mov ecx,edi
275c87c8 c1e902 shr ecx,
275c87cb f3a5 rep movs dword ptr es:[edi],dword ptr [esi]

可以看出所谓的复制的字节数其实是来自上层传递过来的参数3。来kv看一下,的确如此。

我们在IDA里看一下到底是怎么导致的漏洞

可以看到参数都是从上面传过来的,0x8282这么大的导致溢出的值也是上层出现的问题,我们继续往上跟踪。我们知道栈溢出是属于一个函数的栈,我们的目的就是找出是那个函数的局部变量缓冲区被溢出了,所以我们要明确向上跟踪的目标,就是找出是某个函数的局部变量我们的目的就达到了。

根据00121458 275e701a 06b5ce6c 07a70810 00000000 MSCOMCTL!DllGetClassObject+0x41cc6这个栈回溯来看,我们继续跟到了这个函数位置。如下图

根据上图我们明显的看到了漏洞的造成,目的地址是栈中的一个8字节的局部缓冲区,但是在复制的时候判断复制尺寸的大小使用cmp [ebp+dwBytes],8 jb loc_275d3085时却是大于8时跳转到复制路径(注意那根红色的线),所以就造成了明显的溢出。

至此,漏洞分析完毕。

0x2.漏洞本质成因

如果是根据网上的资料来看的话,样本的分析应该很简单,只是一个OLE对象而已。但是我手里只有一个经过加密的exp(而且还是excel的)。这就给分析工作增大了难度

CVE-2012-0158基于exp分析的更多相关文章

  1. Hibernate一级缓存(基于查询分析)

    首先我们应该弄清什么是hibernate缓存:hibernate缓存是指为了降低应用程序对物理数据源的访问频次,从而提高应用程序的运行性能的一种策略.我们要将这个跟计算机内存或者cpu的缓存区分开. ...

  2. x86CPU 实模式 保护模式 傻傻分不清楚? 基于Xv6-OS 分析CR0 寄存器

    基于Xv6-OS 分析CR0 寄存器 之前一直认为晕乎乎的...啥?什么时候切换real model,怎么切换,为什么要切换? ------------------------------------ ...

  3. 基于CAS分析对ABA问题的一点思考

    基于CAS分析对ABA问题的一点思考 什么是CAS? 背景 synchronized加锁消耗太大 volatile只保证可见性,不保证原子性 基础 用CPU提供的特殊指令,可以: 自动更新共享数据; ...

  4. 微软BI 之SSAS 系列 - 在 SQL Server 2012 下查看 SSAS 分析服务的模型以及几个模型的简单介绍

    在SSDT中部署一个 SSAS 项目到本地服务器上出现错误. You cannot deploy the model because the localhost deployment server i ...

  5. SQL Server 2012 列存储索引分析(翻译)

    一.概述 列存储索引是SQL Server 2012中为提高数据查询的性能而引入的一个新特性,顾名思义,数据以列的方式存储在页中,不同于聚集索引.非聚集索引及堆表等以行为单位的方式存储.因为它并不要求 ...

  6. windwos下基于exp的提权

    00x1: 本文是基于windwos 补丁的漏洞提权. 其实是一件很简单的工作:如果看成数据库的3张表分别是: 未打补丁表, 补丁漏洞表, 漏洞利用提权程序表. 为一一对应关系,所以就是资源的掌握,以 ...

  7. SQL Server 2012 列存储索引分析(转载)

    一.概述 列存储索引是SQL Server 2012中为提高数据查询的性能而引入的一个新特性,顾名思义,数据以列的方式存储在页中,不同于聚集索引.非聚集索引及堆表等以行为单位的方式存储.因为它并不要求 ...

  8. 【Python量化投资】基于技术分析研究股票市场

    一 金融专业人士以及对金融感兴趣的业余人士感兴趣的一类就是历史价格进行的技术分析.维基百科中定义如下,金融学中,技术分析是通过对过去市场数据(主要是价格和成交量)的研究预测价格方向的证券分析方法. 下 ...

  9. bcc 基于bpf 分析linux 系统性能的强大工具包

    bcc 是一个基于bpf 的强大linux io,网络监控分析工具集(当然也可以分析java,ruby,python...) 一张工具图 说明 bcc 好多工具是需要kernel 4.1 的,但是大部 ...

随机推荐

  1. SVN报错:Node remains in conflict显示冲突的解决办法

    如果是提示文件冲突: svn revert --depth=infinity 有冲突的文件名 如果提示目录有冲突: svn revert --depth=infinity 目录名 搞定.

  2. 科学计算三维可视化---Traits(Event和button属性)

    Event和button属性 是两个专门用于处理事件的change属性 Event属性和其他Trait属性不一样 Button属性是由Event属性继承而来的 Event监听 from traits. ...

  3. Dubbo学习笔记3:Dubbo管理控制台与监控中心的搭建

    Dubbo源码下载与编译 本文来讲下如何在Dubbo源码编译后,得到用于搭建管理控制台的war包和监控平台的jar包. 首先需要到Github上下载Dubbo的源码,解压后如下: 在dubbo-2.5 ...

  4. numpy基础整理

    记笔记用jupyter实在太方便了,懒得再重新写到博客园上,直接放个链接吧→_→ numpy(一):https://douzujun.github.io/page/%E6%95%B0%E6%8D%AE ...

  5. Python入门系列教程(六)面向对象

    1.self 所谓的self,可以理解为自己,可以把它当做C++中类里面的this指针一样理解,就是对象自身的意思,在用某个对象调用该方法时,就将该对象作为第一个参数传递给self. 2.class ...

  6. div+css+jQuery简单实现投票功能

    昨天看到C#群里有人问一个投票功能如何实现... 我对此很感兴趣,为了练习一下,就有了以下代码. 投票功能使用jQuery实现..纯html代码...数据通过json字符串传递,通过 eval转换为j ...

  7. 8、String练习题

    String练习   1.字符串反转,例如将"abc"变成"cba" 2.统计一个字符串里面另一个字符串出现的次数,例如统计"monkey" ...

  8. C# FileStream MemoryStream BufferedStream StreamReader StreamWriter

    FileStream读取文件 , array.Length);//读取流中数据把它写到字节数组中file.Close();//关闭流string str =Encoding.Default.GetSt ...

  9. margin-bottom无效问题以及div里内容动态居中样式!

    最近调前端样式时候,遇到一个需求,在中间文字不对等的情况下想让下面的操作文字距离底部对齐,如图: , 刚开始觉得使用margin-bottom就可以,后来发现只有margin-top是管用的,查了资料 ...

  10. C# WebClient进行FTP服务上传文件和下载文件

    定义WebClient使用的操作类: 操作类名称WebUpDown WebClient上传文件至Ftp服务: //// <summary> /// WebClient上传文件至Ftp服务 ...