Paul C's Blog

To be funny,to grow up!

0%

Windows 权限提升漏洞cve-2022-21882

Win10版本;Win32k权限提升漏洞

该漏洞是之前CVE-2021-1732漏洞补丁的绕过。CVE-2022-21882是一个本地权限提升漏洞,攻击者利用该漏洞可以在Windows 10系统上获得管理员权限、创建新的管理员账户、执行特权命令。

由dump分析入手,到漏洞原理剖析,再到漏洞的重现利用手法,最后到分析漏洞的影响函数、修补方式等,完整重现“由dump到POC”的全过程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//k  栈追踪
//b给出每个函数的前三个参数
kd> kb


//u Address1 Address2,反汇编选定范围内的代码
kd> u xxxDestroyWindow xxxDestroyWindow+34

//给出某个函数调用前的内容
kd> u xxxMNCancel la

//反汇编选定地址之前长度为Lnum的代码
kd> ub xxxMNCancel+121 L5
//展示某个数据结构data type里的某个名称的对象
0: kd> dt tagPOPUPMENU -d spwndPopupMenu
win32k!tagPOPUPMENU
+0x008 spwndPopupMenu : Ptr32 tagWND

xxxTrackPopupMenuEx的工作原理,熟悉界面编程的朋友都知道这是用于弹出一个Popup Menu的函数,那么在内核中它是如何工作的呢,这里笔者简单列出一下大概的工作的流程 :

(1). 创建Menu窗口对象: 根据HMENU等相关参数,创建最终弹出和展示的Menu窗口(通过xxxCreateWindowEx)

(2). 分配和初始化当前线程的MenuState结构(xxxMNAllocMenuState)

(3). 计算和设定Menu窗口的相关位置、属性等(通过FindBestPos/xxxSetWindowPos等)

(4). 进入菜单循环,展示Menu并进入等待菜单选择的循环(xxxMNLoop),在进入循环前,会通过xxxWindowEvent来“播放”一个EVENT_SYSTEM_MENUPOPUPSTART的窗口事件,这个细节会在后面用到

(5). 菜单被选择或取消,退出循环并销毁PopupMenu、Menu窗口对象和MenuState结构(xxxxxEndMenuLoop、xxxMNEndMenuState等)