CVE-2010-0806较安定操纵办法[网络技术]
本文“CVE-2010-0806较安定操纵办法[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
CVE-2010-0806较安定操纵办法
文章录入:浣花溪 责任编辑:snow 27
【字体:小 大】
for (i=0; i<10; i++) {
x.setAttribute('s',window);
}
window.status += '';
这种操纵方法有点无意性,我们无法切确的掌握虚函数指针的值.我们但愿可以像MS09-002大概极光漏洞一样,通过向已经被释放的对象写入完好可控的数据来改写虚表指针.
为此,我们首先需求懂得,传入x.setAttribute函数的第二个参数只要为dispatch对象便可以了,要成立这种对象很简单,比方document.createElement.
第二个需求注意的是,引用计数被非预期减小的对象为一个tear_off对象,而不是我们传入的那个对象.关于tear_off,拜见[tear-off相关技术文档].当对象的引用计数被减小时,将调用mshtml的PlainRelease函数,在该函数内有以下指令:
.text:7E90A43C push esi ; Value
.text:7E90A43D mov esi, ds:InterlockedExchange(x,x)
.text:7E90A443 push offset lpMem ; Target
.text:7E90A448 call esi ; InterlockedExchange(x,x)
.text:7E90A44A test eax, eax
.text:7E90A44C jnz loc_7E8C0881
......
.text:7E8C0881 push eax ; Value
.text:7E8C0882 push offset dword_7EB36098 ; Target
.text:7E8C0887 call esi ; InterlockedExchange(x,x)
.text:7E8C0889 test eax, eax
.text:7E8C088B jz loc_7E90A452
.text:7E8C0891 push eax ; lpMem
.text:7E8C0892 call _MemFree(x)
.text:7E8C0897 jmp loc_7E90A452
当一个对象的引用计数减到0时,PlainRelease函数会首先缓存该对象,缓存分为二级,辨别存储在两个全局变量中.当第二个缓存不为0时,PlainRelease函数会调用_MemFree将对象所占用的内存释放.当_MemFree函数被调用,我们便可以用近似于ms09-002的办法,向该内存区写入恶意的数据,然后再次调用这个已经释放的对象,这样便可以切确的跳入堆喷射代码了.
由上可知,我们需求至少2个tear_off对象.然后顺次调用x.setAttribute函数,将缓存填满.随后再成立并且释放一些tear_off对象,这样前面的tear_off对象将被挤出缓存,从而内存被回收.这时,我们再填充数据,这些数据便能精确的覆盖到前面的tear_off对象了.最后要做的就是调用这些对象的虚函数,走向堆喷射代码.
以上是“CVE-2010-0806较安定操纵办法[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |