吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7686|回复: 7
收起左侧

[漏洞分析] CVE-2011-1985漏洞分析与修复

[复制链接]
riusksk 发表于 2011-12-3 20:08
本帖最后由 riusksk 于 2011-12-3 20:13 编辑

【标题】:CVE-2011-1985漏洞分析与修复
【作者】:riusksk(泉哥)
【主页】:http://riusksk.blogbus.com
【时间】:2011/12/3

漏洞描述

Windows系统中的win32k.sys由于缺乏对用户输入的验证,导致空指针引用,可导致本地提权或者拒绝服务攻击。Poc代码及其崩溃时的栈情况可参考这里:http://www.exploit-db.com/exploits/18024/

漏洞分析

下面是系统崩溃时的栈情况:
0: kd> kp
ChildEBP RetAddr
ee21fd08 bf80ef2b win32k!NtUserfnINCBOXSTRING+0x8
ee21fd40 8054261c win32k!NtUserMessageCall+0xae
ee21fd40 7c92e4f4 nt!KiFastCallEntry+0xfc
0012ff2c 77d194be ntdll!KiFastSystemCallRet
0012ff5c 00401015 USER32!NtUserMessageCall+0xc
……


由上我们可以知道漏洞主要发生在 win32k!NtUserfnINCBOXSTRING这个函数里面。直接IDA加载win32k.sys进行分析,先跟进NtUserMessageCall函数:

1.jpg

消息号在0x400以内的,NtUserMessageCall函数就会去索引gapfnMessageCall函数数组中的对应函数,通过将消息号与0x3F相与运算获得函数数组索引值:
2.jpg
漏洞函数NtUserfnINCBOXSTRING位于函数数组索引值为0x19win32k.sys版本不同,索引值可能会有所不同),与0x3F相与后仍为0x19,即:MessageTable[0x19] & 0x3F == 0x19 (NtUserfnINCBOXSTRING)。跟进NtUserfnINCBOXSTRING函数发现,传递的HWND参数未检测其有效性就直接引用了,导致空指针被引用:
3.jpg
因此当我们传递一个0xFFFFFFFF的句柄时,即可导致蓝屏:

#include
void main()
{


SendMessageCallback((HWND)-1,CB_ADDSTRING,0,0,0,0);
}


其它消息所导致的蓝屏,原因与此一样。

漏洞修复

通过分析打补丁后的win32k.sys,可以发现它在漏洞函数中添加了对0xFFFFFFFF参数的判断,若存在则调用UserSetLastError() 返回 -1

4.jpg

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zxqwe 发表于 2011-12-3 20:35
膜拜大牛....
coolfire1983 发表于 2011-12-3 20:58
pclaoren 发表于 2011-12-4 16:59
studioreg 发表于 2011-12-6 22:36
好久没有看这些了。都有点看不懂了。
dodohua 发表于 2011-12-7 00:28
好厉害。。。看不懂
头像被屏蔽
阿顺 发表于 2013-12-18 18:22
提示: 作者被禁止或删除 内容自动屏蔽
bnxf00000 发表于 2013-12-30 13:04
学习学习 新手上路
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-24 14:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表