首页
社区
课程
招聘
[原创]对CVE-2016-0199的简单分析
发表于: 2016-8-6 09:08 7655

[原创]对CVE-2016-0199的简单分析

2016-8-6 09:08
7655

第一次分析漏洞,轻拍!感觉自己还是很罗嗦,和我一样的新手如果没耐心看完,就直接跳到最后看看红体字我的心得体会,对新手应该有一点点帮助


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (14)
雪    币: 2575
活跃值: (502)
能力值: ( LV2,RANK:85 )
在线值:
发帖
回帖
粉丝
2
思路清晰,学习一下
2016-8-6 09:53
0
雪    币: 22
活跃值: (453)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
非常好~
2016-8-6 11:44
0
雪    币: 292
活跃值: (815)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
赞啊,写的特别好!忍不住要跟着调试一下了,感谢楼主!
2016-8-6 19:16
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
继续努力吧~!
2016-8-6 21:35
0
雪    币: 90
活跃值: (173)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
楼主你好,请问poc是在哪找的,还是自己写的?
2016-8-7 19:34
0
雪    币: 292
活跃值: (815)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
忍不住跟着楼主调试了一下,发现一些位置其实可以简化调试的,分享一些我的调试细节欢迎大家互相交流~:
首先是回溯部分,在漏洞触发层函数JavascriptThreadService::EnumerateTrackingClient中通过观察可以发现出现问题的是该函数第三个参数,这里IDA因为只加载了jscript一个dll,所以第三个参数是一个IUnknown型的结构体,但这不重要,在这个函数调用前,可以发现push了一个esi,这个IU结构体就是esi传入的,在外层函数MSHTML!CAttribute::EnumerateTrackedObjects下断点,进入时可以发现esi就是CAttribute类的虚表,而其中偏移30h位置的值被改成了41424344,其实只需要跟踪这个值在什么时候改变的就可以了。
利用!heap -p -a跟踪虚表起始地址,可以发现在之前一个位置调用了639968e3 MSHTML!CDocument::createAttribute+0x00000016,在这个函数入口下断点,通过gu直接执行到返回,可以看到edx寄存器保存的就是这个CAttribute类的虚表指针,通过dps查看可以发现偏移30位置还是正常的值,那么实际上这个时候,利用ba w1在偏移30位置下写入断点,跟踪它第一次被覆盖的是什么就行了,通过g执行会命中断点,这时候利用!heap -p -a [vftable+30h addr] 可以发现这个地方覆盖的值是MSHTML!CImgElement::`vftable',而之前MSHTML!CImgElement::CreateElement就是创建的部分,接下来跟踪什么时候被41424344覆盖就很清晰了(可以再次利用内存写入断点),这样省去了一些通过x来猜类成员函数作用的过程,另外楼主最后红字总结的部分写的很好,其实应该加上一个6,善用硬件断点可以一定程度上简化调试过程,希望多交流学习~
2016-8-10 08:19
0
雪    币: 506
活跃值: (156)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
8
兄弟你说的很对,其实俺在反复调试过程中也使用了ba,但是为了更好的面向我这种刚刚接触漏洞的新手,还是采用比较麻烦的方法,从头一步一步说,看着就非常冗余了,兄弟你绝对是认真看了我写的东西的。
以后还是多学习
2016-8-10 09:31
0
雪    币: 292
活跃值: (815)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
互相学习~我刚开始的时候也是不断的回溯,但是对于一些结构不是很复杂的应用来说比较好用,但是CVE上回溯就很麻烦了,这时候楼主利用对函数猜测功能下断点跟踪,和利用alert区分函数执行过程真的是一个非常好的方法,另外我比较喜欢用javascript中的math方法tan(0),sin(0),cos(0)这种方法,在POC正常语句中加上math.tan(0),这样的话,通过windbg下jscript!tan,jscript!sin,jscript!cos,也可以正常命中,再通过kb回溯可以看到之前执行的PoC语句调用的函数
2016-8-10 10:00
0
雪    币: 506
活跃值: (156)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
10
兄弟我在你这又学了一招cos!!!!!!
2016-8-13 08:32
0
雪    币: 799
活跃值: (457)
能力值: ( LV12,RANK:280 )
在线值:
发帖
回帖
粉丝
11
调试过程很详细,学习了。创建函数都是CreateElement是因为继承自CElement
2016-8-20 01:16
0
雪    币: 51
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
http://blog.skylined.nl/20160617001.html   这里有一篇外文的相关文章
2016-8-21 11:23
0
雪    币: 184
活跃值: (161)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
13
学习了。
2018-4-27 01:20
0
雪    币: 1327
活跃值: (64)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
mark.
2018-5-2 10:07
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
楼主,请教一下,我的Ie崩溃后没有调试程序那个选项。。。,怎该怎样调试呢。。我每次attach上ie,但程序崩溃后windbg不中断呀
2018-5-30 13:43
0
游客
登录 | 注册 方可回帖
返回
//