阅读:2687回复:0
cve-2014-0569 漏洞利用分析
0×00 简述
来自CVE的漏洞描述: 图片:2014112602095919304.jpg 测试环境: Win7 SP1 + Flash ActiveX 15.0.0.167 0×01 漏洞利用分析 介绍有关漏洞关键代码前,先看一下heap spray后的内存布局: 图片:2014112602095919304.jpg 简单描述为: 图片:2014112602095919304.jpg 漏洞致使Uint Vector的length字段被改写。 漏洞关键代码: 图片:2014112602095919304.jpg 红线标注的部分其操作流程: 取预定大小0×1000的ByteArray对象_loc3,赋值给domainMemory,以便casi32函数操作此内存 预置大小0×1000的ByteArray对象: 图片:2014112602095919304.jpg 通过函数atomicCompareAndSwapLength将_loc3长度置0 casi32函数内由于整数溢出造成执行流改变,致使向_loc3偏移0×1000处成功写入0×40000001 上述过程细节: 图片:2014112602095919304.jpg 图片:2014112602095919304.jpg 图片:2014112602095919304.jpg 图片:2014112602095919304.jpg 这样就可以以超长的Uint Vector为起点,读取预置的对象数据。 利用关键点: 搜索预置的sound对象进而计算出flash控件基址 预置的sound对象包含于喷射的少量Vector Object里,这里称之为vec_3。 具体的喷射代码: 图片:2014112602095919304.jpg 通过特征比对遍历以获取vec_3中元素: 图片:2014112602095919304.jpg 搜索到的其中一项: 计算flash控件基址: 图片:2014112602095919304.jpg 在flash控件基址基础上获取rop链所需指令,用VirtualAlloc分配可执行内存过DEP。 图片:2014112602095919304.jpg 图片:2014112602095919304.jpg 构造rop链(部分): 图片:2014112602095919304.jpg 修改sound对象虚表指针,并调用修改后的虚表函数将执行流导向stack pivot。 图片:2014112602095919304.jpg sound对象虚表指针修改前后: 图片:2014112602095919304.jpg 图片:2014112602095919304.jpg 修改后的虚表指针指向内容: 图片:2014112602095919304.jpg 调用虚函数触发利用。 图片:2014112602095919304.jpg 0×02 分析总结 完整的利用至少由两部分组成(html + swf),其中swf并不能独立执行,需要html传入的参数(shellcode),只拿到swf并不能获知攻击者的意图。 0×03 参考文章 [*]CVE-2014-0569漏洞分析 [*]Cracking the CVE-2014-0569 nutshell |
|