首页
社区
课程
招聘
未解决 [原创]CVE-2012-0158小白入门分析
发表于: 2018-12-19 20:12 2177

未解决 [原创]CVE-2012-0158小白入门分析

2018-12-19 20:12
2177

CVE-2012-0158分析

前前言:

我的分析也是看着别人已经分析好的文档来的,所以总感觉有点抄袭的感觉,不过学习不就是形而上学的过程么(完美甩锅),其实本来不想发这篇文章的,奈何没有52的账号,又不想付钱,所以只能在那里发一篇了,看看能不能浑水摸个鱼(那里都发了,这里怎能不发),不过看前辈们的分析文章,总感觉我这有点儿狗尾续貂的意思,大家凑活着看吧O(∩_∩)O哈哈~


前言:

之前在geekpwn上买了本加密与解密(主要是现场买能有段刚本尊的签名^_^),最近看到漏洞篇(事实上是两周前就看到了),最后的实例调试的是CVE-2012-0158,于是在看雪查了下这个漏洞,果然清一色的都是简单的栈溢出、新手练手、熟悉软件的用法什么的。。。不知道我现在才做算不算晚,总之这两周确实是一直在搞这个,另外插一句,本来想用加密与解密给的POC,但是调试了一下,发现跟着书上的方法有点儿麻烦,于是就参考了http://bbs.pediy.com/showthread.php?t=152407;

在此感谢作者的文章给出的思路,不过作者只给出了POC的分析过程,没有给出MSCOMCTL.OCX的问题所在位置的分析(即使问题成因很快就能找到),不过因为本人就是初学者,所以多少明白点初学者的困难之处,所以尽可能的把分析过程写的详细一些,以供初学者(云玩家)学习(通关)。


分析环境:

VMware Workstation 15.0.2

Windows XP PRO SP3(MSDN里下载的)

Office 2007 pro(MSDN里下载的)

Windbg 6.11 x86(看雪工具库下载的)


分析过程:

拿到POC,先在虚拟机里运行一下,结果是直接弹出系统自带的计算器程序(calc.exe)

其实在cmd里输入calc.exe也是可以直接打开计算器的,所以可以大致确定shellcode可能调用了winexec函数;先打开windbg和Word2007(注意此处不是直接打开POC程序),然后按F6附加到winWord.exe,然后下断点“dp kernel32!winexec”,然后按F5运行程序


运行到断点位置后输入“dd esp”查看一下栈中的内容,然后再看一下传入winexec函数的第一个参数“da 00223340”(winexec函数的第一个参数就是cmd命令,不知道的可以自行百度,这里注意这个地址每次调试都是不一样的,所以和我的不一样没关系),结果是"C:\Documents and Settings\Administrator\a.exe",不知道为什么是a.exe,不过这确实是计算器


由于刚进入Winexec,那么栈顶内容指向的是返回地址,对返回地址进行反汇编,可以

观察到eb226a01 这样的机器码


用UE打开POC文件,搜索eb226a01,这里注意用UE搜索的时候必须是没有在调试的情况下,不然右边就是中文的乱码(搜索不到),


鼠标向上滚动,就惊奇的发现(其实早就知道了)1245fa7f,这是jmp esp的一个万能地址的逆序,如果不知道jmp esp是什么意思,可以去看《0day安全 软件漏洞分析技术》(这是一条安利^_^)可见此处并没有开DEP,因为栈是可执行的(不知道DEP的同学可以去看加密与解密第四版(这又是一条安利^_^))


这里要在7ffa4512(就是之前找到的1245fa7f)下一个执行断点“ba e1 7ffa4512”,注意我用的POC文件每次只能触发一次漏洞,第二次打开就不行了,所以每次都要覆盖一下,POC文件要做好备份


然后按F5运行程序,并加载POC文件,程序会断在7ffa4512处


然后查看栈信息,要仔细看,最后是在“dd esp-20”的位置看到了7ffa4512,因为栈是反着来的,所以是-20(如果不知道栈为什么是反着来的,可以去看……实在是安利不了了)


这说明7ffa4512这个地址覆盖了0011abfc的位置(不同的系统版本地址不一样),所以要在0011abfc这个地方下一个写入断点“ba w1 0011abfc”,并且继续在7ffa4512的位置下执行断点“ba e1 7ffa4512”,最后还要做一个异常通知

sxn -c ”r eip;dd 0011abfc |1” sse;在做这些之前记得重新加载POC文件,然后按F5运行


因为在0011abfc下的是写入断点,所以会断很多次,具体要看的是加载了POC文件以后的事情,所以之前选文件的过程就一直按着F5就行了,即使是加载到了POC文件,离7ffa4512出现的位置还是很远,我的经验是如果0011abfc的位置出现了以2开头的数据,就离出现不远了,这个时候就要仔细看,不要错过了



明显这里没有返回,前面也没有call,所以jmp esp覆盖的不是这个位置,再次重新载入POC之前在275c87cb的位置下一个执行断点,然后F5运行,看0011abfc的位置,是否会出现7ffa4512


明显是顺序执行了,所以这个位置不对,继续在7ffa4512处下执行断点,0011abfc处下写入断点


继续F5执行,看0011abfc的位置何时会出现7ffa4512(其实不远了,所以过的不要太快)


程序在到7ffa4512之前会卡一下(至少我的是这样)卡住的一瞬间CV大法一下,就能复制到shellcode覆盖的代码位置275e701a,从callstack窗口可以看到调用的位置是在MSCOMCTL.OCX文件里,把文件复制出来(我的IDA不能再XP里打开)用IDA加载,然后按g,输入之前得到的地址275e701a(不同系统的值也不一样,至少我的是275e701a)






总结:

发现了分析CVE还是一个进步比较快的方法,所以希望大佬们发一些不同类型的CVE以供小白们分析,多谢


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

上传的附件:
收藏
免费 2
支持
分享
最新回复 (1)
雪    币: 14653
活跃值: (17749)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
2
忘了这类分析的标准开头了:这是我第一次分析CVE(皮一下,开森了O(∩_∩)O哈哈~)
2018-12-19 21:26
0
游客
登录 | 注册 方可回帖
返回
//