Use Basic Way To BypassUAC


前言

铺垫于注册表、dll劫持利用的BypassUAC知识,使得基本原理更加简单易懂,具备手动尝试发现思路

UAC简介

UAC(User Account Control)是微软在 Windows Vista 以后版本引入的一种安全机制,通过 UAC,应用程序和任务可始终在非管理员帐户的安全上下文中运行,除非管理员特别授予管理员级别的系统访问权限。UAC 可以阻止未经授权的应用程序自动进行安装,并防止无意中更改系统设置

UAC需要授权的动作包括:配置Windows Update;增加或删除用户账户;改变用户的账户类型;改变UAC设置;安装ActiveX;安装或移除程序;安装设备驱动程序;设置家长控制;将文件移动或复制到Program Files或Windows目录;查看其他用户文件夹等。

在触发 UAC 时,系统会创建一个consent.exe进程,该进程通过白名单程序和用户选择来判断是否创建管理员权限进程。请求进程将要请求的进程cmdline和进程路径通过LPC接口传递给appinfo的RAiLuanchAdminProcess函数,该函数首先验证路径是否在白名单中,并将结果传递给consent.exe进程,该进程验证被请求的进程签名以及发起者的权限是否符合要求,然后决定是否弹出UAC框让用户进行确认。这个UAC框会创建新的安全桌面,屏蔽之前的界面。同时这个UAC框进程是SYSTEM权限进程,其他普通进程也无法和其进行通信交互。用户确认之后,会调用CreateProcessAsUser函数以管理员权限启动请求的进程

权限区别:

具体将表现弹窗如下

实际利用

这里主要以寻找白名单为主,主要原因一些白名单程序是会直接获取管理员权限同时不弹出UAC弹窗,这些程序拥有autoElevate属性的值为true,会在启动时就静默提升权限

可考虑的关注点:
程序的manifest标识的配置属性autoElevate为true
程序不弹出UAC弹窗
从注册表里查询Shell\Open\command键值(先前注册表bypass使用,当然不仅限于这一个值)

实际搜索后,可能的部分白名单程序如下

C:\Windows\System32\BitLockerWizardElev.exe:       <autoElevate xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
C:\Windows\System32\bthudtask.exe:           <autoElevate>true</autoElevate>
C:\Windows\System32\changepk.exe:             <autoElevate>true</autoElevate>
C:\Windows\System32\chkntfs.exe:         <autoElevate>false</autoElevate>
C:\Windows\System32\cleanmgr.exe:         <autoElevate xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
C:\Windows\System32\cliconfg.exe:         <autoElevate>false</autoElevate>
C:\Windows\System32\CompMgmtLauncher.exe:             <autoElevate>false</autoElevate>
C:\Windows\System32\ComputerDefaults.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\dccw.exe:       <autoElevate>true</autoElevate>
C:\Windows\System32\dcomcnfg.exe:           <autoElevate>true</autoElevate>
C:\Windows\System32\DeviceEject.exe:             <autoElevate>true</autoElevate>
C:\Windows\System32\DeviceProperties.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\dfrgui.exe:         <autoElevate  xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
C:\Windows\System32\djoin.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\easinvoker.exe:       <autoElevate>true</autoElevate>
C:\Windows\System32\EASPolicyManagerBrokerHost.exe:       <autoElevate>true</autoElevate>
C:\Windows\System32\eudcedit.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\eventvwr.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\fodhelper.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\fsavailux.exe:         <autoElevate xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
C:\Windows\System32\fsquirt.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\FXSUNATD.exe:           <autoElevate>true</autoElevate>
C:\Windows\System32\immersivetpmvscmgrsvr.exe:       <autoElevate>true</autoElevate>
C:\Windows\System32\iscsicli.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\iscsicpl.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\lpksetup.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\MdSched.exe:             <autoElevate xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
C:\Windows\System32\MSchedExe.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\msconfig.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\msdt.exe:       <autoElevate xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
C:\Windows\System32\msra.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\MultiDigiMon.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\Netplwiz.exe:         <autoElevate  xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
C:\Windows\System32\newdev.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\odbcad32.exe:             <autoElevate>true</autoElevate>
C:\Windows\System32\OptionalFeatures.exe:         <autoElevate  xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
C:\Windows\System32\PasswordOnWakeSettingFlyout.exe:          <autoElevate>true</autoElevate>
C:\Windows\System32\perfmon.exe: <autoElevate xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
C:\Windows\System32\printui.exe:             <autoElevate  xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
C:\Windows\System32\pwcreator.exe:             <autoElevate>true</autoElevate>
C:\Windows\System32\rdpshell.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\recdisc.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\rrinstaller.exe:             <autoElevate>true</autoElevate>
C:\Windows\System32\rstrui.exe:         <autoElevate  xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
C:\Windows\System32\sdclt.exe:         <autoElevate  xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
FINDSTR: 行 3165251 太长。
FINDSTR: 行 3165251 太长。
FINDSTR: 行 3165251 太长。
FINDSTR: 行 3165251 太长。
FINDSTR: 行 3165251 太长。
FINDSTR: 行 3165251 太长。
C:\Windows\System32\shrpubw.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\slui.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\SndVol.exe:             <autoElevate xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
C:\Windows\System32\SystemPropertiesAdvanced.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\SystemPropertiesComputerName.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\SystemPropertiesDataExecutionPrevention.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\SystemPropertiesHardware.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\SystemPropertiesPerformance.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\SystemPropertiesProtection.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\SystemPropertiesRemote.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\systemreset.exe:             <autoElevate  xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
C:\Windows\System32\SystemSettingsAdminFlows.exe:          <autoElevate>true</autoElevate>
C:\Windows\System32\SystemSettingsRemoveDevice.exe:          <autoElevate>true</autoElevate>
C:\Windows\System32\Taskmgr.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\tcmsetup.exe:         <autoElevate>true</autoElevate>
C:\Windows\System32\TpmInit.exe:             <autoElevate>true</autoElevate>
C:\Windows\System32\WindowsUpdateElevatedInstaller.exe:          <autoElevate>true</autoElevate>
C:\Windows\System32\wusa.exe:             <autoElevate>true</autoElevate>
C:\Windows\System32\Sysprep\sysprep.exe:       <autoElevate>true</autoElevate>

进步再手动寻找不触发uac弹窗的程序即可

关于manifest

本质为XML文件,用于表示当前应用程序的配置属性

关于requestedExecutionLevel

asInvoker:默认权限,运行权限与父进程相同
requireAdministrator:管理员权限运行
highestAvailable:当前用户能获取到的最高权限运行,是管理员账户则会要求权限提升并弹UAC窗,普通用户则按照该账户的最高权限运行

通过先前寻找的白名单程序,进步查看权限

如下运行后powershell权限如下

调用后不是powershell权限,并没有继承父进程

那么也就是说如果Netplwiz存在相关dll劫持,或能够修改注册表实现命令执行,则能够绕过uac,从而高权限执行代码

手动尝试中的绕过发现

一张图简单易懂


Author: Yangsir
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Yangsir !
  TOC