首页
社区
课程
招聘
[原创]CVE-2012-1876漏洞分析
发表于: 2018-8-23 20:54 4431

[原创]CVE-2012-1876漏洞分析

2018-8-23 20:54
4431



table标签中col元素的span值被重新设置时未正确检查需要分配的缓冲区大小,并向堆中进行写入操作,若用户访问攻击者精心构造的页面,可能导致任意代码执行。

       先用gflag给IE加上hpa,然后运行IE,用Windbg附加,开启子进程调试(.childdbg 1),打开POC, +42F167处崩溃,如下图所示:



       可看到edi被污染,反汇编看下该函数,edi由esi赋值,而esi又由上层函数CalculateMinMax传递过来。



       重新附加IE,,通过sxe ld:mshtml命令让子进程在加载mshtml模块时断下,然后再通过命令bp mshtml!CTableLayout::CalculateMinMax对漏洞函数下断。



       断下来后进行跟踪分析,可看到该函数的第一个参数为CTableLayout对象。



       继续跟踪,代码取出了col元素中的span值,我们这里称之为spannum,在后面的指令经常会用到。



       后面的指令非常多,单步跟踪太耗时,这里结合IDA进行分析,导入windbg下载的pdb文件后,找到CalculateMinMax函数。跳过部分指令,找到负责分配内存的函数,在分配前会取出一个值(为0)用于和spannum比较,我们称之为spancmp。



       跟进该函数,计算分配内存大小时为spannum*0x1C,至少为4*0x1C,分配后的内存地址位于CTableLayout+0x9C(ebx+0x9C)。



       分配完内存后,运行,允许加载控件,再次在CalculateMinMax断下,再运行,断下来后才执行poc中的over_trigger函数,而《漏洞战争》一书中第二次运行就执行over_trigger函数,猜测是本地允许加载控件后重新解析poc的原因。

       第二次断在CalculateMinMax后,spannum不变,spancmp为4,所以不再分配内存。



       在mshtml!CTableCol::GetAAspan下断点,使其在第二次获取span值时断下,然后用gu命令执行到返回后断下,获取的值为0x3e8(1000)。



       继续执行,会计算width*100的结果0x414114作为循环复制的内容。



       然后将取出的span值0x3e8作为复制操作的计数器,书上写的计数器则为0x3e8*1C,通过调试分析,0x3e8*1C为拷贝的最大偏移地址,一开始还没拷贝时偏移为0*1C,每次拷贝后偏移地址加0x1C,所以计数器为0x3e8,复制大小为0x3e8*0x1C。



[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-2-1 13:30 被kanxue编辑 ,原因:
上传的附件:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//