zusheng 发表于 2014-12-13 20:08

快速定位JS代码调用的IE类成员函数


CVE-2011-0027Microsoft Data Access组件整数溢出漏洞是Pwn2Own 2010黑客大赛中被用来攻破IE8浏览器的漏洞,其中关键的漏洞触发代码如下:

localxmlid1 = document.getElementById('xmlid1').recordset;// 获取xml元素xmlid1的recordset,即数据库表的记录集
localxmlid1.CacheSize = 0x40000358; // 设置能够被保存的记录条数,此值最终造成整数溢出 现在我们就介绍一种快速定位上述两行代码将对应调用的IE类成员函数,首先用IDA加载漏洞文件msado15.dll,并允许加载微软符号表,然后选中“Function name”一栏,按“Alt + T”快捷键弹出搜索框,输入搜索关键字“cachesize”:通过按“Ctrl+T”可继续搜索下一个,最后找到两个相关函数:
根据函数名猜测下面的函数可能就是用于设置和获取cachesize属性值的: CRecordset::put_CacheSize(long *)
CRocordset::get_CacheSize(long) 我们对CRecordset::put_CacheSize下断点验证下前面的猜测,用Windbg附加IE进程运行后打开poc.html,确实断在put_CacheSize,通过查看参数可以看到poc.html中设置的CacheSize值0x40000358,说明CRecordset::put_CacheSize确实是设置CacheSize值的函数: 0:005> gBreakpoint 1 hit
eax=40000358 ebx=04bdcfd8 ecx=6e61d340 edx=00000000 esi=01fbf144 edi=00000000
eip=6e6ac957 esp=01fbeb58 ebp=01fbf040 iopl=0         nv up ei pl zr na pe nc
cs=001bss=0023ds=0023es=0023fs=003bgs=0000             efl=00000246
msado15!CRecordset::put_CacheSize:
6e6ac957 8bff            mov   edi,edi



0:005> dd esp
01fbeb586e62f3ec 04bdcfd8 40000358 00000000
01fbeb6801fbf074 04bdcfd8 11000011 00000000
01fbeb7803570ae8 004ad070 00538a30 00000088
01fbeb8800470000 00000002 03570760 01fbec84
01fbeb9876fc3193 00470138 76fc316f 764736b8
01fbeba800000000 00470000 03570768 00518a78
01fbebb8004767b8 004768e4 00559258 00476db8
01fbebc876f8d74d 0051d968 00472a98 01fbedc0



说明 localxmlid1.CacheSize = 0x40000358 这行设置CacheSize的JS代码对应调用的就是CRecordset::put_CacheSize函数。采用同类方法也很容易确认 document.getElementById('xmlid1').recordset 调用的是CGenericElement::get_recordset函数,各位朋友可以自己动手试下。

ablack 发表于 2014-12-13 20:33

虽然看不懂,但是还要支持一下

dong0945 发表于 2014-12-14 01:34

支持一下
页: [1]
查看完整版本: 快速定位JS代码调用的IE类成员函数