首页
论坛
课程
招聘
[原创]对CVE-2016-0199的简单分析
2016-8-6 09:08 4440

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

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

[培训] 优秀毕业生寄语:恭喜id:一颗金柚子获得阿里offer《安卓高级研修班》火热招生!!!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (14)
雪    币: 203
活跃值: 活跃值 (12)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wyfe 活跃值 2016-8-6 09:53
2
0
思路清晰,学习一下
雪    币: 31
活跃值: 活跃值 (228)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
靴子 活跃值 2016-8-6 11:44
3
0
非常好~
雪    币: 285
活跃值: 活跃值 (170)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
Keoyo 活跃值 2 2016-8-6 19:16
4
0
赞啊,写的特别好!忍不住要跟着调试一下了,感谢楼主!
雪    币: 11
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
IThacker 活跃值 2016-8-6 21:35
5
0
继续努力吧~!
雪    币: 86
活跃值: 活跃值 (96)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
fneig 活跃值 1 2016-8-7 19:34
6
0
楼主你好,请问poc是在哪找的,还是自己写的?
雪    币: 285
活跃值: 活跃值 (170)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
Keoyo 活跃值 2 2016-8-10 08:19
7
0
忍不住跟着楼主调试了一下,发现一些位置其实可以简化调试的,分享一些我的调试细节欢迎大家互相交流~:
首先是回溯部分,在漏洞触发层函数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,善用硬件断点可以一定程度上简化调试过程,希望多交流学习~
雪    币: 500
活跃值: 活跃值 (55)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
坐北朝南 活跃值 4 2016-8-10 09:31
8
0
兄弟你说的很对,其实俺在反复调试过程中也使用了ba,但是为了更好的面向我这种刚刚接触漏洞的新手,还是采用比较麻烦的方法,从头一步一步说,看着就非常冗余了,兄弟你绝对是认真看了我写的东西的。
以后还是多学习
雪    币: 285
活跃值: 活跃值 (170)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
Keoyo 活跃值 2 2016-8-10 10:00
9
0
互相学习~我刚开始的时候也是不断的回溯,但是对于一些结构不是很复杂的应用来说比较好用,但是CVE上回溯就很麻烦了,这时候楼主利用对函数猜测功能下断点跟踪,和利用alert区分函数执行过程真的是一个非常好的方法,另外我比较喜欢用javascript中的math方法tan(0),sin(0),cos(0)这种方法,在POC正常语句中加上math.tan(0),这样的话,通过windbg下jscript!tan,jscript!sin,jscript!cos,也可以正常命中,再通过kb回溯可以看到之前执行的PoC语句调用的函数
雪    币: 500
活跃值: 活跃值 (55)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
坐北朝南 活跃值 4 2016-8-13 08:32
10
0
兄弟我在你这又学了一招cos!!!!!!
雪    币: 780
活跃值: 活跃值 (143)
能力值: ( LV12,RANK:280 )
在线值:
发帖
回帖
粉丝
Ox9A82 活跃值 3 2016-8-20 01:16
11
0
调试过程很详细,学习了。创建函数都是CreateElement是因为继承自CElement
雪    币: 51
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
howlbsb 活跃值 2016-8-21 11:23
12
0
http://blog.skylined.nl/20160617001.html   这里有一篇外文的相关文章
雪    币: 178
活跃值: 活跃值 (44)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
luobobo 活跃值 2018-4-27 01:20
13
0
学习了。
雪    币: 1326
活跃值: 活跃值 (49)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wx_Strider 活跃值 2018-5-2 10:07
14
0
mark.
雪    币: 259
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
我的熊猫 活跃值 2018-5-30 13:43
15
0
楼主,请教一下,我的Ie崩溃后没有调试程序那个选项。。。,怎该怎样调试呢。。我每次attach上ie,但程序崩溃后windbg不中断呀
游客
登录 | 注册 方可回帖
返回