VISTA+IE7环境下,该漏洞并不会触发
接着,在0x59F0D6B1处构造SAFEARRAYBOUND结构(将之前读取的个数存入该结构),并调用SafeArrayCreate创建出SAFEARRAY结构。
接下来,使用SafeArrayAccessData获得SAFEARRAY的数据区域,并将该指针保存到局部变量pvData(ebp+8)中。
在0x59F0D6EB处,代码错误地将pvData的地址作为IStream::Read (0x59F0D6F0)的参数,而不是pvData的值,而该值指向的内存才是真正用于存放从流中读取数据的缓冲区。
这样就导致了以下情况:试图将任意长度的数据放入原本4字节长度的内存中,导致了缓冲区溢出。
攻击者可随意覆盖SEH或者RET,将EIP设置成任意数值。结合JS堆喷射,"挂马"利用成功率将相当高,风险很大。
注:
在6.5.6000.16386版本的MSVidCtl.dll中,也存在类似代码:
但是在VISTA+IE7环境下,该漏洞并不会触发,因为导致漏洞的代码不会被调用到。
网友评论