CVE-2019-0808

一、 漏洞信息CVE-2019-0808是发生在win32k中的一个空指针解引用漏洞,根据网上的blog介绍该漏洞在win32k!xxxMNMouseMove中产生。二、 测试环境及漏洞复现。
摘要由CSDN通过智能技术生成

一、 漏洞信息

CVE-2019-0808是发生在win32k中的一个空指针解引用漏洞,根据网上的blog介绍该漏洞在win32k!xxxMNMouseMove中产生。

二、 测试环境及漏洞复现

测试环境

POC:[https://github.com/ze0r/cve-2019-0808-poc](https://www.sec-
in.com/outLinkPage/?target=https://github.com/ze0r/cve-2019-0808-poc)

靶机: win10 x86 SP1

漏洞复现

wKg0C2I0PpCAAkfvAACZSGfv9w448.png

三、 漏洞成因分析

补丁分析

通过bindiff对xxxMNMouseMove函数进行对比,发现win32k!xxxMNFindWindowFromPoint函数新增对菜单窗口对象的校验。

wKg0C2I0PpAM3ZAAA6nQmOih8069.png

对win32k!xxxMNFindWindowFromPoint进行详细分析时,可以看到xxxSendMessage成功获取到菜单窗口对象句柄后,通过HMValidateHandleNoSecure获取对应的菜单窗口对象,随后直接返回。

wKg0C2I0PuKAWp2UAAA3rdyuPtw522.png

而在补丁文件中,HMValidateHandleNoSecure成功获取菜单窗口对象后会进行一系列的安全检查后(保证tagWndMenu、tagWnd、tagPopuMenu、tagMenu这四个对象均存在且不为NULL)才会返回。此时也猜测到这个漏洞产生的原因大概率是空指针解引用。

wKg0C2I0PuyAYQC3AABOk5cNEBo965.png

成因分析

在补丁分析中,我们猜测这是一个空指针解引用的洞,这里结合POC去印证。下图为执行POC后windbg抓到的cash现场,从堆栈中可以看到蓝屏触发点在win32!MNGetItem函数。

wKg0C2I0PvqANW5PAACDCFaFaow114.png

此时进行精准定位后,就是对ecx+0x20的poi操作发生错误。

wKg0C2I0PweAEpbJAAAtQcgR1Us440.png

进一步调试后,我们发现ecx的值居然也为空!!!

wKg0C2I0PxCAEVkAAAPyrqVFmk117.png

结合IDA对ecx的值进行溯源, 发现其存储的值是ptagMenu。

wKg0C2I0PxmAIbCnAABNkeRmmiM437.png

而ptagMenu的值是由菜单弹出对象tagPopuMenu+0x14提供的。

wKg0C2I0PyKASHRJAAAOX8S8dUQ423.png

最终,我们溯源完成后知道ptagPopuMenu的值正是由通过xxxMNFindWindowFromPoint函数中HMValidateHandleNoSecure返回的菜单窗口对象tagMenuWnd+0xb0得到的。

wKg0C2I0PyqAcfH5AAAPWBeNryo915.png

至此,空指针解引用产生的原因已然明了。

四、 漏洞利用分析

漏洞利用分析部分是结合EXP,对其漏洞构造、提权利用进行详细阐述,方式为Q-A模式。

问题一,如何构造空的菜单对象(ptagPopupMenu->spmenu=NULL)

在漏洞成因过程中知道,tagMenu是由tagPopuMenu+0x14提供的,而tagPopuMenu是由tagMenuWnd+0xb0提供的。tagMenuWnd是在xxxMNFindWindowFromPoint在xxxSendMessage获取的弹出菜单句柄后通过HMValidateHandleNoSecure得到的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值