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