滥用令牌
Reading time: 14 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
令牌
如果你不知道什么是Windows访问令牌,请在继续之前阅读此页面:
也许你可以通过滥用你已经拥有的令牌来提升权限
SeImpersonatePrivilege
这是任何进程持有的特权,允许对任何令牌进行 impersonation(但不允许创建),前提是可以获得其句柄。可以通过诱使Windows服务(DCOM)对一个漏洞执行NTLM身份验证来获取特权令牌,从而启用以SYSTEM权限执行进程。可以使用各种工具利用此漏洞,例如 juicy-potato、RogueWinRM(需要禁用winrm)、SweetPotato 和 PrintSpoofer。
RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato
SeAssignPrimaryPrivilege
它与SeImpersonatePrivilege非常相似,将使用相同的方法来获取特权令牌。
然后,此特权允许将主令牌分配给新的/挂起的进程。使用特权的impersonation令牌可以派生出主令牌(DuplicateTokenEx)。
使用该令牌,可以通过'CreateProcessAsUser'创建一个新进程,或创建一个挂起的进程并设置令牌(通常,无法修改正在运行的进程的主令牌)。
SeTcbPrivilege
如果你启用了此令牌,可以使用KERB_S4U_LOGON为任何其他用户获取impersonation令牌而无需知道凭据,向令牌添加任意组(管理员),将令牌的完整性级别设置为“中等”,并将此令牌分配给当前线程(SetThreadToken)。
SeBackupPrivilege
此特权使系统授予对任何文件的所有读取访问控制(仅限读取操作)。它用于从注册表中读取本地管理员帐户的密码哈希,随后可以使用“psexec”或“wmiexec”与哈希一起使用(Pass-the-Hash技术)。但是,在两种情况下,此技术会失败:当本地管理员帐户被禁用时,或当有政策规定从远程连接的本地管理员中移除管理权限时。
你可以通过以下方式滥用此特权:
- https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1
- https://github.com/giuliano108/SeBackupPrivilege/tree/master/SeBackupPrivilegeCmdLets/bin/Debug
- 关注IppSec在 https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610&ab_channel=IppSec
- 或如在以下内容中所述的使用备份操作员提升权限部分:
SeRestorePrivilege
此特权提供对任何系统文件的写访问权限,无论文件的访问控制列表(ACL)如何。它为提升权限打开了许多可能性,包括修改服务、执行DLL劫持和通过图像文件执行选项设置调试器等各种其他技术。
SeCreateTokenPrivilege
SeCreateTokenPrivilege是一个强大的权限,特别是在用户具备impersonate令牌的能力时,但在没有SeImpersonatePrivilege的情况下也很有用。此能力依赖于能够impersonate一个代表同一用户的令牌,并且其完整性级别不超过当前进程的完整性级别。
关键点:
- 在没有SeImpersonatePrivilege的情况下进行impersonation: 可以利用SeCreateTokenPrivilege在特定条件下通过impersonate令牌来实现EoP。
- 令牌impersonation的条件: 成功的impersonation要求目标令牌属于同一用户,并且其完整性级别小于或等于尝试impersonation的进程的完整性级别。
- 创建和修改impersonation令牌: 用户可以创建一个impersonation令牌,并通过添加特权组的SID(安全标识符)来增强它。
SeLoadDriverPrivilege
此特权允许加载和卸载设备驱动程序,通过创建具有特定值的注册表项ImagePath
和Type
。由于对HKLM
(HKEY_LOCAL_MACHINE)的直接写访问受到限制,因此必须使用HKCU
(HKEY_CURRENT_USER)。但是,为了使HKCU
对内核可识别以进行驱动程序配置,必须遵循特定路径。
此路径为\Registry\User\<RID>\System\CurrentControlSet\Services\DriverName
,其中<RID>
是当前用户的相对标识符。在HKCU
中,必须创建整个路径,并设置两个值:
ImagePath
,即要执行的二进制文件的路径Type
,值为SERVICE_KERNEL_DRIVER
(0x00000001
)。
遵循的步骤:
- 由于写访问受限,访问
HKCU
而不是HKLM
。 - 在
HKCU
中创建路径\Registry\User\<RID>\System\CurrentControlSet\Services\DriverName
,其中<RID>
表示当前用户的相对标识符。 - 将
ImagePath
设置为二进制文件的执行路径。 - 将
Type
分配为SERVICE_KERNEL_DRIVER
(0x00000001
)。
# Example Python code to set the registry values
import winreg as reg
# Define the path and values
path = r'Software\YourPath\System\CurrentControlSet\Services\DriverName' # Adjust 'YourPath' as needed
key = reg.OpenKey(reg.HKEY_CURRENT_USER, path, 0, reg.KEY_WRITE)
reg.SetValueEx(key, "ImagePath", 0, reg.REG_SZ, "path_to_binary")
reg.SetValueEx(key, "Type", 0, reg.REG_DWORD, 0x00000001)
reg.CloseKey(key)
SeTakeOwnershipPrivilege
这与 SeRestorePrivilege 类似。其主要功能允许一个进程 假定对象的所有权,绕过通过提供 WRITE_OWNER 访问权限的明确自由裁量访问要求。该过程首先确保获得所需注册表项的所有权以进行写入,然后更改 DACL 以启用写入操作。
takeown /f 'C:\some\file.txt' #Now the file is owned by you
icacls 'C:\some\file.txt' /grant <your_username>:F #Now you have full access
# Use this with files that might contain credentials such as
%WINDIR%\repair\sam
%WINDIR%\repair\system
%WINDIR%\repair\software
%WINDIR%\repair\security
%WINDIR%\system32\config\security.sav
%WINDIR%\system32\config\software.sav
%WINDIR%\system32\config\system.sav
%WINDIR%\system32\config\SecEvent.Evt
%WINDIR%\system32\config\default.sav
c:\inetpub\wwwwroot\web.config
SeDebugPrivilege
此权限允许调试其他进程,包括读取和写入内存。可以使用此权限采用各种内存注入策略,能够规避大多数防病毒和主机入侵防御解决方案。
Dump memory
您可以使用 ProcDump 来自 SysInternals Suite 捕获进程的内存。具体来说,这可以应用于本地安全授权子系统服务(LSASS**)**进程,该进程负责在用户成功登录系统后存储用户凭据。
然后,您可以在 mimikatz 中加载此转储以获取密码:
mimikatz.exe
mimikatz # log
mimikatz # sekurlsa::minidump lsass.dmp
mimikatz # sekurlsa::logonpasswords
RCE
如果你想获得一个 NT SYSTEM
shell,你可以使用:
# Get the PID of a process running as NT SYSTEM
import-module psgetsys.ps1; [MyProcess]::CreateProcessFromParent(<system_pid>,<command_to_execute>)
检查权限
whoami /priv
显示为禁用的令牌可以被启用,实际上你可以利用_启用_和_禁用_令牌。
启用所有令牌
如果你有禁用的令牌,你可以使用脚本 EnableAllTokenPrivs.ps1 来启用所有令牌:
.\EnableAllTokenPrivs.ps1
whoami /priv
或在这个 帖子 中嵌入的 脚本。
表格
完整的令牌权限备忘单在 https://github.com/gtworek/Priv2Admin,下面的摘要将仅列出直接利用该权限以获得管理员会话或读取敏感文件的方法。
权限 | 影响 | 工具 | 执行路径 | 备注 |
---|---|---|---|---|
SeAssignPrimaryToken | 管理员 | 第三方工具 | "这将允许用户模拟令牌并使用诸如 potato.exe、rottenpotato.exe 和 juicypotato.exe 等工具提升到 nt 系统" | 感谢 Aurélien Chalot 的更新。我会尽快尝试将其重新表述为更像食谱的内容。 |
SeBackup | 威胁 | 内置命令 | 使用 robocopy /b 读取敏感文件 | - 如果您可以读取 %WINDIR%\MEMORY.DMP,可能会更有趣 |
SeCreateToken | 管理员 | 第三方工具 | 使用 NtCreateToken 创建任意令牌,包括本地管理员权限。 | |
SeDebug | 管理员 | PowerShell | 复制 lsass.exe 令牌。 | 脚本可以在 FuzzySecurity 找到 |
SeLoadDriver | 管理员 | 第三方工具 | 1. 加载有缺陷的内核驱动程序,例如 | 1. |
SeRestore | 管理员 | PowerShell | 1. 启动 PowerShell/ISE,并具有 SeRestore 权限。 | 攻击可能会被某些 AV 软件检测到。 替代方法依赖于使用相同权限替换存储在 "Program Files" 中的服务二进制文件 |
SeTakeOwnership | 管理员 | 内置命令 | 1. | 攻击可能会被某些 AV 软件检测到。 替代方法依赖于使用相同权限替换存储在 "Program Files" 中的服务二进制文件。 |
SeTcb | 管理员 | 第三方工具 | 操纵令牌以包含本地管理员权限。可能需要 SeImpersonate。 待验证。 |
参考
- 查看定义 Windows 令牌的此表: https://github.com/gtworek/Priv2Admin
- 查看 这篇论文 关于使用令牌的权限提升。
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。