CVE-2012-0158基于exp分析
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分析的更多相关文章
- Hibernate一级缓存(基于查询分析)
首先我们应该弄清什么是hibernate缓存:hibernate缓存是指为了降低应用程序对物理数据源的访问频次,从而提高应用程序的运行性能的一种策略.我们要将这个跟计算机内存或者cpu的缓存区分开. ...
- x86CPU 实模式 保护模式 傻傻分不清楚? 基于Xv6-OS 分析CR0 寄存器
基于Xv6-OS 分析CR0 寄存器 之前一直认为晕乎乎的...啥?什么时候切换real model,怎么切换,为什么要切换? ------------------------------------ ...
- 基于CAS分析对ABA问题的一点思考
基于CAS分析对ABA问题的一点思考 什么是CAS? 背景 synchronized加锁消耗太大 volatile只保证可见性,不保证原子性 基础 用CPU提供的特殊指令,可以: 自动更新共享数据; ...
- 微软BI 之SSAS 系列 - 在 SQL Server 2012 下查看 SSAS 分析服务的模型以及几个模型的简单介绍
在SSDT中部署一个 SSAS 项目到本地服务器上出现错误. You cannot deploy the model because the localhost deployment server i ...
- SQL Server 2012 列存储索引分析(翻译)
一.概述 列存储索引是SQL Server 2012中为提高数据查询的性能而引入的一个新特性,顾名思义,数据以列的方式存储在页中,不同于聚集索引.非聚集索引及堆表等以行为单位的方式存储.因为它并不要求 ...
- windwos下基于exp的提权
00x1: 本文是基于windwos 补丁的漏洞提权. 其实是一件很简单的工作:如果看成数据库的3张表分别是: 未打补丁表, 补丁漏洞表, 漏洞利用提权程序表. 为一一对应关系,所以就是资源的掌握,以 ...
- SQL Server 2012 列存储索引分析(转载)
一.概述 列存储索引是SQL Server 2012中为提高数据查询的性能而引入的一个新特性,顾名思义,数据以列的方式存储在页中,不同于聚集索引.非聚集索引及堆表等以行为单位的方式存储.因为它并不要求 ...
- 【Python量化投资】基于技术分析研究股票市场
一 金融专业人士以及对金融感兴趣的业余人士感兴趣的一类就是历史价格进行的技术分析.维基百科中定义如下,金融学中,技术分析是通过对过去市场数据(主要是价格和成交量)的研究预测价格方向的证券分析方法. 下 ...
- bcc 基于bpf 分析linux 系统性能的强大工具包
bcc 是一个基于bpf 的强大linux io,网络监控分析工具集(当然也可以分析java,ruby,python...) 一张工具图 说明 bcc 好多工具是需要kernel 4.1 的,但是大部 ...
随机推荐
- config配置中心之自动刷新
自动刷新(自动刷新是基于springcloudbus来实现的,springcloud bus是基于rabbitMQ或者Kafka来实现的) Spring Cloud Bus 将分布式的节点用轻量的消息 ...
- Java基础-字符串(String)常用方法
Java基础-字符串(String)常用方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.java的API概念 Java的API(API:Application(应用) Pr ...
- np.argsort函数
np.argsort函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me numpy.argsort(a, axis=-1, kind='quicksort', order=None) 功能: ...
- Windows下php,mysql,apache相关安装与配置,完善中…
PHP 的安装 由于php是一个zip文件(非install版),安装较为简单解压就行.把解压的 php5.2.1-Win32重命名为 php5.并复制到安装盘目录下.例如安装路径为 c:\php5 ...
- [Apio2012]dispatching 主席树做法
bzoj 2809: [Apio2012]dispatching http://www.lydsy.com/JudgeOnline/problem.php?id=2809 Description 在一 ...
- 我购买byd的几点逻辑
1.伯克希尔哈撒韦长期看好byd不是无道理的,每次转型都是那么的成功,说明管理层很好. 2.2015年6月员工持股计划均价55元,目前48元. 3.新能源汽车龙头. 4.云轨解决了小城市建设地铁过于浪 ...
- Openssh版本升级(Centos6.7)
实现前提公司服务器需要进行安全测评,扫描漏洞的设备扫出了关于 openssh 漏洞,主要是因为 openssh的当前版本为5.3,版本低了,而yum最新的openssh也只是5.3,没办法只能到 rp ...
- 华为mate 10 pro安装失败,提示没有未包含任何证书
原因: Android 7.0 引入一项新的应用签名方案 APK Signature Scheme v2,它能提供更快的应用安装时间和更多针对未授权 APK 文件更改的保护.在默认情况下,Androi ...
- Python核心编程——Chapter9
好久没写过Python了,前一阵子忙这忙那的,都几乎把Python给丢掉了,话不多说,马上开始. 9.1.文件过滤.显示一个文件的所有行,并且忽略以井号开头的行. 其实这个题目比较基础,用shell语 ...
- asp.net 练习 js 调用webservice
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...