MS10-081漏洞分析

漏洞模块:comctl32.dll

 

漏洞原因:comctl32:SBGetText函数返回值的验证问题。

 

详细内容:comctl32:SBGetText函数会被调用两次,第一次用于确认IE浏览器状态栏(status bar)中的字符串长度,第二次是复制状态栏中的字符串到刚刚申请的堆空间中。由于分配堆空间的大小是通过第一次调用comctl32:SBGetText函数来决定的,如果返回值(长度)小于0xfffe(包括空字符),就会处理正常。代码分析如下:

 

773de357 ff1524123d77    call    comctl32!_imp__lstrlenW

773de35d 8bf0            mov     esi,eax ; (0x10022) eax是statusbar中字符串的长度

...

773de3ca 0fb7ce          movzx   ecx,si  ; ecx = 0x22 取字符串长度的低4位,如果长度大于0xffff,长度就会被截断,导致后面堆空间分配不足。

773de3cd c1e010          shl     eax,10h ; eax was always 0 for me

773de3d0 0bc1            or      eax,ecx ; eax = 0x22

...

773de3d6 5f              pop     edi

773de3d7 5e              pop     esi

773de3d8 5d              pop     ebp

773de3d9 c21400          ret     14h

 

当字符串长度被截断了,堆空间分配不足,第二次调用comctl32:SBGetText函数拷贝字符串的时候,就会发生堆溢出。

 

 

微软补丁的作用:在comctl32:SBGetText函数中对statusbar长度返回值进行了验证,保证了返回的长度不会超过0xfffe

 

 

参考文献:http://breakingpointsystems.com/community/blog/microsoft-vulnerability-proof-of-concept

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值