本地权限提升(LPE)及UAC Bypass

最近在bytecode77上看到了一些关于UAC Bypass的技巧,经过实验确认有效,在此整理分享出来,亦作为知识沉淀。

一、漏洞原理

该技术主要思路在于利用自动提权(auto-elevated)的Windows白程序,部分白程序会加载位于%systemroot%\system32路径下的dll,或者连带执行该路径下的可执行文件。因此易受环境变量注入的影响。

二、利用思路

组装任意路径,然后在HKEY_CURRENT_USER\Volatile Environment注册表项中创建键%systemroot%,值为组装好的路径。例如

然后将伪造的被劫持dll或者exe放入我们自己的%systemroot%\system32(注意需要子文件夹system32)

三、实例

1.1)利用性能监视器白程序(perfmon.exe)

漏洞信息
影响版本 Windows 7-10, x86/x64 independent
修复版本 Windows 10 RS3 (16299)

perfmon.exe(性能监视器)会连带执行%systemroot%\system32\mmc.exe,如图

因此,在环境变量注入之后,将payload命名为mmc.exe放入自己构造的%systemroot%\system32目录下,执行perfmon.exe,payload会以管理员权限执行并且不会有UAC弹窗。

POC目录:Performance Monitor Volatile Environment LPE

1.2)利用系统准备工具白程序(Sysprep.exe)

漏洞信息
影响版本 Windows 8-10, x86 and x64
修复版本 Windows 10 RS3 (16299)

Sysprep清单如下

1
2
3
4
5
6
7
8
9
10
11
12
<!--
Specifically load these DLLs from the specified path. This
is done as a defence-in-depth approach to closing a known UAC
exploit related to sysprep.exe being auto-elevated. The list
need not contain KnownDlls since those are always loaded
by the loader from the system directory.
-->
<file
loadFrom="%systemroot%\system32\actionqueue.dll"
name="actionqueue.dll"
/>
[...]

因此actionqueue.dll可以被劫持,方法同上,需要注意的是,对于Windows 8/8.1和Windows 10,有不同的DLL。对于Windows 10,它是“dbgcore.dll”,在Windows 8上,“cryptbase.dll”起作用。同时其他DLL也必须复制过去(另外需要的dll详见POC),因为它们也是从那里加载的。

POC链接:Sysprep Volatile Environment LPE (2017)

1.3)利用Windows远程协助白程序(msra.exe)

漏洞信息
影响版本 Windows 7-10, x86 and x64
修复版本 Windows 10 RS3 (16299)

在msra.exe(Windows远程协助)中,它将加载%systemroot%\system32\mswsock.dll。以同样的方法进行劫持,不同的是,还需要将C:\Windows\Registration目录下的.clb文件全部复制到自己构造的%systemroot%\Registration目录中。在执行Sysprep.exe时还需要指定lpOperation参数为”runas”,因为可执行文件的requestedExecutionLevel为asInvoker。

POC链接:Remote Assistance Volatile Environment LPE

1.4)利用显示语言白程序(lpksetup.exe)

漏洞信息
影响版本 Windows 7-10, x86 and x64
修复版本 Windows 10 RS3 (16299)

lpksetup.exe会加载%systemroot%\system32\rsaenh.dll或者%systemroot%\system32\comsvcs.dll(取决于操作系统版本),因此可以进行dll劫持,同样注意.clb文件和执行参数runas。

POC链接:Display Languages Volatile Environment LPE

1.5)利用组件服务白程序(dcomcnfg.exe)

漏洞信息
影响版本 Windows 7-10, x86 and x64
修复版本 Windows 10 RS3 (16299)

dcomcnfg.exe会加载%systemroot%\system32\mmcndmgr.dll,因此可以进行dll劫持,同样注意.clb文件和执行参数runas。

POC链接:Component Services Volatile Environment LPE

1.6)利用输入产品密钥白程序(SystemSettingsAdminFlows.exe)

漏洞信息
影响版本 Windows 10, x86 and x64
修复版本 Windows 10 RS3 (16299)

Windows 10引入了全新的“设置”应用程序,它为我们提供了新的自动提升权限的二进制文件。此应用程序的入口点是SystemSettings.exe,而输入产品密钥对话框位于SystemSettingsAdminFlows.exe中,该对话框也是自动提升权限的二进制文件,它会尝试加载%systemroot%\ system32 \ msctf.dll,因此也受环境变量注入的影响。

执行SystemSettingsAdminFlows.exe依赖于SystemSettings.exe的运行。因此这次我们首先启动设置应用程序,然后再注入环境变量,然后使用“EnterProductKey”参数执行SystemSettingsAdminFlows.exe。它将加载我们的DLL。

这个白程序的利用比之前的稍显复杂,更多的细节详见POC

POC链接:Enter Product Key Volatile Environment LPE

1.7)利用任务管理器白程序(taskmgr.exe)

漏洞信息
影响版本 Windows 8-10, x86 and x64
修复版本 Windows 10 RS3 (16299)

taskmgr.exe会加载%systemroot%\system32\srumapi.dll(win10)或者%systemroot%\system32\shell32.dll(win8),因此可以进行dll劫持。

POC链接:TaskMgr Volatile Environment LPE

1.8)利用 slui.exe 的文件 Handler 劫持漏洞实现 UAC 绕过和本地提权

漏洞信息
影响版本 Windows 8-10, x86 and x64
修复版本 未修复

这个白程序的利用方式与前面不同,不再是利用环境变量注入。

slui.exe是一个自动提权的二进制文件,注册表项HKEY_CURRENT_USER\Software\Classes\exefile\shell\open会在其执行时被访问。由于普通权限可以修改此注册表项,因此可以写入任意可执行文件实现提权运行。

例如将cmd.exe写入上述注册表项,执行slui即可得到管理员权限的cmd窗口。

参考链接:Slui File Handler Hijack UAC Bypass Local Privilege Escalation

文章作者: TechOtaku
文章链接: http://techotaku.me/2018/04/13/本地权限提升(LPE)及UAC-Bypass/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 徒然の博客