CVE-2015-1701漏洞分析

0x00漏洞信息

漏洞影响:本地提权

漏洞文件:win32k.sys

漏洞函数:xxxCreateWindowEx

漏洞原因:释放重引用

漏洞日期:2015年 5月12号

【漏洞分析合集】

0x01漏洞分析

漏洞函数流程就是

user32!CreateWindowExW

user32!NtUserCreateWindowEx

进内核

win32k!NtUserCreateWindowEx+0x2a8

win32k!xxxCreateWindowEx+0x4a8

win32k!xxxCreateClassSmIcon+0x7f

win32k!xxxClientCopyImage

KeUserModeCallback  用户回调 这里

 

xxxCreateClassSmIcon该窗口类的图标创建小图标缓存  会回到用户层 这时可以hook ClientCopyImage 函数 实现权限提升

权限提权函数调用

win32k!xxxCreateWindowEx+0xcec  

win32k!xxxClientCopyImage   

win32k!xxxAdjustSize+0x24

win32k!xxxInitSendValidateMinMaxInfo+0x14

win32k!xxxInitSendValidateMinMaxInfoEx+0x281

win32k!xxxSendMessage+0x28

win32k!xxxSendMessageTimeout+0x1ac  call esi 到3环地址 执行shellcode

 

完成利用流程就是

1.先注册一个RegisterClassEx  窗口类 注册时  自定义字段lpfnWndProc一个窗口过程函数

2.InterlockedExchangePointer  hook  User32_ClientCopyImage 3环函数

3. 调用CreateWindowEx   执行到xxxCreateClassSmIcon  会回到3环 User32_ClientCopyImage  函数 已经被hook

4. hook 函数 调用 SetWindowLongPtr 重新设置lpfnWndProc窗口过程函数  为默认的系统内核函数DefWindowProc

5.SetWindowLongPtr,当index(GWLP_WNDPROC(-4) ) <0,会调用SetWindowData来完成最终的设置。

6.User32_ClientCopyImage   返回 进行执行CreateWindowEx 内核 的MapClientNeuterToClientPfn转化当前窗口类函数的默认WindowProc(也就是用户模式可控的函数),再将窗口对象的WindowProc设置为用户自己的窗口对象

SetWindowData修改窗口的WindowProc为DefWindowProc是无效的,窗口的WindowProc还是被修改为用户模式应用程序设置的WindowProc,窗口过程处理函数也变成了用户的窗口函数。而此时,这个窗口的标志已经被设置为是需要在内核模式执行WindowProc,那么接下来再遇到SendMessage等函数对这个窗口发送消息时,就会在内核模式下直接跳转、调用实际在用户模式的函数来进行处理,从而直接导致内核模式代码执行

7.xxxAdjustSize  里面有xxxSendMessage  会发送消息 默认调用到前面3环的函数 就是shellcode 完成提权

 0x02参考链接

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-1701

posted @ 2022-05-22 15:08  紅人  阅读(168)  评论(0编辑  收藏  举报