数据结构论坛

首页 » 分类 » 问答 » 网络安全之内核提权漏洞深入分析
TUhjnbcbe - 2023/8/14 19:36:00
治疗白癜风的专科医院 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/

背景知识

本节内容描述了创建窗口时需要用到的结构体及函数:

用户态的窗口数据结构体:WNDCLASSEXW。

窗口数据保存在内核态时使用:tagWND和tagWNDK结构体。

用户态调用SetWindowLong可以设置窗口扩展内存数据,逆向分析SetWindowLong如何设置窗口扩展内存数据。

窗口类拥有如下属性结构,此处仅列出比较重要的结构:

typedefstructtagWNDCLASSEXW{UINTcbSize;//结构体的大小…UINTstyle;//窗口的风格WNDPROClpfnWndProc;//处理窗口消息的回调函数地址intcbClsExtra;//属于此类窗口所有实例共同占用的内存大小intcbWndExtra;//窗口实例扩展内存大小LPCWSTRlpszClassName;//类名…}WNDCLASSEXW

在用户态创建窗口时,需要调用RegisterClass注册窗口类,每个窗口类有自己的名字,调用CreateWindow创建窗口时传入类的名字,即可创建对应的窗口实例。当cbWndExtra不为0时,系统会申请一段对应大小的空间,如果回调到用户态申请空间时,可能会触发漏洞。内核中使用两个结构体来保存窗口数据tagWND和tagWNDK:

ptagWND//内核中调用ValidateHwnd传入用户态窗口句柄可返回此数据指针0x18unknown0x80kerneldesktopheapbase//内核桌面堆基址0x28ptagWNDk//需要重点

1
查看完整版本: 网络安全之内核提权漏洞深入分析