前言
铺垫于注册表、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,从而高权限执行代码
手动尝试中的绕过发现
一张图简单易懂