[C++] 纯文本查看 复制代码 [/align]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属性值的: [C++] 纯文本查看 复制代码 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值的函数: [Asm] 纯文本查看 复制代码 0:005> g[/align]Breakpoint 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=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
msado15!CRecordset::put_CacheSize:
6e6ac957 8bff mov edi,edi
[Asm] 纯文本查看 复制代码
0:005> dd esp
01fbeb58 6e62f3ec 04bdcfd8 40000358 00000000
01fbeb68 01fbf074 04bdcfd8 11000011 00000000
01fbeb78 03570ae8 004ad070 00538a30 00000088
01fbeb88 00470000 00000002 03570760 01fbec84
01fbeb98 76fc3193 00470138 76fc316f 764736b8
01fbeba8 00000000 00470000 03570768 00518a78
01fbebb8 004767b8 004768e4 00559258 00476db8
01fbebc8 76f8d74d 0051d968 00472a98 01fbedc0
说明 localxmlid1.CacheSize = 0x40000358 这行设置CacheSize的JS代码对应调用的就是CRecordset::put_CacheSize函数。采用同类方法也很容易确认 document.getElementById('xmlid1').recordset 调用的是CGenericElement::get_recordset函数,各位朋友可以自己动手试下。
|