HT Flash 0day漏洞分析(CVE-2015-5122)

HT Flash 0day漏洞分析(CVE-2015-5122)

 

  1. 漏洞成因:

漏洞成因是在设置TextLine的opaqueBackground属性时,可以通过valueof回调来释放TextLine对象,从而造成use after free。

 

  1. expliot源码调试分析

测试环境:flash cs6+flash player 18.0.0.160 debug

运行测试:

CVE-2015-5122 expliot简单分析183关键部分分析:

首先申请长度为126的数组:CVE-2015-5122 expliot简单分析210CVE-2015-5122 expliot简单分析212

填充前30个为长度为98的向量

CVE-2015-5122 expliot简单分析231CVE-2015-5122 expliot简单分析233

这里每个向量填充的长度是400/4-2。长度是0x62(98)这就使向量在内存中占用的字节数为98*sizeof(uint)+8=400字节。打开od,在flash调试变量窗口获取_ar[0]中向量对象的地址为0x4e70101,关于最后一位值为1的解释如图:

CVE-2015-5122 expliot简单分析367

代表为Object属性,所以该对象真实地址为0x4e70101-1=0x4e70100,在od查看如下:

CVE-2015-5122 expliot简单分析422

经过查看分析,该对象+1c偏移处的值就是向量所在内存偏移。此处为04B651B0,

CVE-2015-5122 expliot简单分析466

 

可以看出选中的400字节就是向量所占内存,其中首部的值0x62就是向量的长度,而且每个向量所占内存是紧挨着的。

接着申请80个容量8的向量,是从_ar[45]开始的

CVE-2015-5122 expliot简单分析553

最后在30-45之间创建TextLine对象

CVE-2015-5122 expliot简单分析578

CVE-2015-5122 expliot简单分析580

 

到这里漏洞利用环境就算是配置好了,下面就是关键利用过程,

CVE-2015-5122 expliot简单分析611

先定义自己的valueof回调,这个回调会在重新设置opaqueBackground属性时值被调用。

CVE-2015-5122 expliot简单分析666

整个回调过程是先将TextLine对象释放,然后立刻改变那些大小为8的向量的容量为0x62,这时刚从TextLine释放的内存将被重新利用,每个向量将重新获得400字节内存,并且向量数据之间是紧挨着的。最后这个valueof回调返回,又会重新去对已经被释放的TextLine对象的opaqueBackground属性进行设置,而恰巧opaqueBackground属性在这个对象的偏移为0x320,也就是800字节处。

CVE-2015-5122 expliot简单分析880

每个向量占用400字节,而这第800字节将是下一个向量的首地址,也就是储存该向量的长度的地方,这时valueof返回0x62+8填充到了这个向量的长度处,导致这个向量有了32字节的增长。UaF漏洞的关键就是这里了。

接下来就是遍历找出那个被改变了长度的向量了

CVE-2015-5122 expliot简单分析1013

CVE-2015-5122 expliot简单分析1022

找出后就能设置下一个向量的长度为任意值了,因为多出的32字节就是下一个向量首部(包含储存长度的地址)。这里将它改成0x40000000。

 

 

  1. UaF利用图解:
  • 申请TextLine对象

CVE-2015-5122 expliot简单分析1118

  • 释放TextLine对象

CVE-2015-5122 expliot简单分析1120

  • vector填充

CVE-2015-5122 expliot简单分析1145

  • 重新设置opaqueBackground后vector3长度覆盖后一个vector的length

CVE-2015-5122 expliot简单分析1196

 

  1. 漏洞利用:

当有了一个超长的向量后,就能利用这个向量来制造一个任意内存(至少是相当长的内存)的get、set。

CVE-2015-5122 expliot简单分析1257

内存可控之后就通过搜索PE头,在导入表中找到kernel32.dll,然后再搜索获取VirtualProtect的地址,然后替换 Payload.call.apply为VirtualProtect,调用VirtualProtect将Payload内存数据变为可执行,最后执行shellcode弹出计算器。

makings:

CVE-2015-5122.zip

 OoWoodOne

2015.7.16

3 thoughts on “HT Flash 0day漏洞分析(CVE-2015-5122)

发表评论

电子邮件地址不会被公开。 必填项已用*标注