CVE-2014-0282

poc来自exploit-db

win7 x86平台下,开启UST HPA,IE打开POC,crash在WINDBG如图

引用的对象已经被释放,应该是UAF漏洞。分析对象在哪里创建,哪里释放,才导致了在这个位置UAF。

这里ESI是对象指针,查看ESI的堆栈回溯记录

发现释放对象的函数是CTextArea对象的析构函数。

在POC中也看到有TextArea标签,应该就是创建这个标签时创建的对象。

如下图,在IDA中可以通过函数名筛选到TextArea对象的构造函数为CTextArea::CreateElement

那我们就知道在这个构造函数时创建了对象。IDA里查看函数

可以看到在堆中申请了60bytes成功后,对象指针保存在地址671DCE1A(mshtml!CTextArea::CreateElement+0x36)的esi,在mshtml!CTextArea::CreateElement+0x36下断,确认这点。

重新运行POC,断下来2次,因为POC中有2个TextArea标签。如图:

析构函数对象(07c09fa0)释放了

在接着就到了crash的地方

现在对象的创建,析构过程分析好了,那再来看此时重用导致的crash的时机。

看到第二个的doreset函数,在POC中正好对应了document.getElementById("testfm").reset();

总结这次UAF,一开始所有对象都创建好,当调用document.getElementById("testfm").reset();时,child2的onpropertychange方法被触发,changer函数中所有对象被清空,当这些动作完成之后,doreset函数又来清空CTextArea对象,导致UAF发生。

原文地址:https://www.cnblogs.com/Lnju/p/5289351.html