Abusing Tokens

支持 HackTricks

令牌

如果你不知道 Windows 访问令牌是什么,请在继续之前阅读此页面:

Access Tokens

也许你可以通过滥用你已经拥有的令牌来提升权限

SeImpersonatePrivilege

这是任何进程持有的特权,允许对任何令牌进行模拟(但不创建),前提是可以获得其句柄。可以通过诱使 Windows 服务(DCOM)对一个漏洞执行 NTLM 认证来获取特权令牌,从而启用以 SYSTEM 权限执行进程。可以使用各种工具利用此漏洞,例如 juicy-potatoRogueWinRM(需要禁用 winrm)、SweetPotatoPrintSpoofer

RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotatoJuicyPotato

SeAssignPrimaryPrivilege

它与 SeImpersonatePrivilege 非常相似,将使用 相同的方法 来获取特权令牌。 然后,此特权允许将主令牌分配给一个新的/挂起的进程。使用特权模拟令牌可以派生出主令牌(DuplicateTokenEx)。 使用该令牌,可以通过 'CreateProcessAsUser' 创建一个 新进程 或创建一个挂起的进程并 设置令牌(一般来说,不能修改正在运行的进程的主令牌)。

SeTcbPrivilege

如果你启用了此令牌,可以使用 KERB_S4U_LOGON 为任何其他用户获取 模拟令牌,而无需知道凭据,向令牌添加任意组(管理员),将令牌的 完整性级别 设置为 "中等",并将此令牌分配给 当前线程(SetThreadToken)。

SeBackupPrivilege

此特权使系统能够授予对任何文件的所有读取访问控制(仅限读取操作)。它用于从注册表中读取本地管理员帐户的密码哈希,随后可以使用像 "psexec" 或 "wmiexec" 这样的工具与哈希一起使用(Pass-the-Hash 技术)。然而,在以下两种情况下,此技术会失败:当本地管理员帐户被禁用时,或当有政策限制本地管理员远程连接的管理权限时。 你可以通过以下方式滥用此特权

Privileged Groups

SeRestorePrivilege

此特权提供对任何系统文件的 写访问 权限,无论文件的访问控制列表(ACL)如何。它为提升权限打开了许多可能性,包括修改服务、执行 DLL 劫持以及通过图像文件执行选项设置 调试器 等多种技术。

SeCreateTokenPrivilege

SeCreateTokenPrivilege 是一种强大的权限,特别是在用户具备模拟令牌的能力时,但在缺乏 SeImpersonatePrivilege 的情况下也很有用。此能力依赖于能够模拟一个代表同一用户的令牌,并且其完整性级别不超过当前进程的完整性级别。

关键点:

  • 在没有 SeImpersonatePrivilege 的情况下进行模拟: 可以利用 SeCreateTokenPrivilege 在特定条件下通过模拟令牌进行权限提升。

  • 令牌模拟的条件: 成功的模拟要求目标令牌属于同一用户,并且其完整性级别小于或等于尝试模拟的进程的完整性级别。

  • 创建和修改模拟令牌: 用户可以创建一个模拟令牌,并通过添加特权组的 SID(安全标识符)来增强它。

SeLoadDriverPrivilege

此特权允许加载和卸载设备驱动程序,通过创建具有特定值的注册表项 ImagePathType。由于对 HKLM(HKEY_LOCAL_MACHINE)的直接写访问受到限制,因此必须使用 HKCU(HKEY_CURRENT_USER)。然而,为了使 HKCU 对内核可识别以进行驱动程序配置,必须遵循特定路径。

此路径为 \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName,其中 <RID> 是当前用户的相对标识符。在 HKCU 中,必须创建整个路径,并设置两个值:

  • ImagePath,即要执行的二进制文件的路径

  • Type,值为 SERVICE_KERNEL_DRIVER (0x00000001)。

遵循的步骤:

  1. 由于写访问受限,访问 HKCU 而不是 HKLM

  2. HKCU 中创建路径 \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName,其中 <RID> 代表当前用户的相对标识符。

  3. ImagePath 设置为二进制文件的执行路径。

  4. 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)

更多滥用此权限的方法请参见 https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege

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

您可以使用来自SysInternals SuiteProcDump捕获进程的内存。具体来说,这可以应用于本地安全授权子系统服务(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

The 显示为禁用的令牌可以被启用,您实际上可以利用_启用_和_禁用_令牌。

启用所有令牌

如果您有禁用的令牌,可以使用脚本 EnableAllTokenPrivs.ps1 来启用所有令牌:

.\EnableAllTokenPrivs.ps1
whoami /priv

Or the script embed in this post.

Table

Full token privileges cheatsheet at https://github.com/gtworek/Priv2Admin, summary below will only list direct ways to exploit the privilege to obtain an admin session or read sensitive files.

PrivilegeImpactToolExecution pathRemarks

SeAssignPrimaryToken

Admin

3rd party tool

"这将允许用户模拟令牌并使用工具如 potato.exe、rottenpotato.exe 和 juicypotato.exe 提升到 nt 系统"

Thank you Aurélien Chalot for the update. I will try to re-phrase it to something more recipe-like soon.

SeBackup

Threat

Built-in commands

使用 robocopy /b 读取敏感文件

- 如果您可以读取 %WINDIR%\MEMORY.DMP,可能会更有趣 - SeBackupPrivilege(和 robocopy)在打开文件时没有帮助。 - Robocopy 需要同时具有 SeBackup 和 SeRestore 才能使用 /b 参数。

SeCreateToken

Admin

3rd party tool

使用 NtCreateToken 创建任意令牌,包括本地管理员权限。

SeDebug

Admin

PowerShell

复制 lsass.exe 令牌。

Script to be found at FuzzySecurity

SeLoadDriver

Admin

3rd party tool

1. 加载有缺陷的内核驱动程序,如 szkg64.sys 2. 利用驱动程序漏洞 或者,该权限可用于卸载与安全相关的驱动程序,使用 ftlMC 内置命令。即:fltMC sysmondrv

1. szkg64 漏洞被列为 CVE-2018-15732 2. szkg64 利用代码 是由 Parvez Anwar 创建的

SeRestore

Admin

PowerShell

1. 启动 PowerShell/ISE,并具有 SeRestore 权限。 2. 使用 Enable-SeRestorePrivilege 启用该权限。 3. 将 utilman.exe 重命名为 utilman.old 4. 将 cmd.exe 重命名为 utilman.exe 5. 锁定控制台并按 Win+U

攻击可能会被某些 AV 软件检测到。

替代方法依赖于使用相同权限替换存储在 "Program Files" 中的服务二进制文件

SeTakeOwnership

Admin

Built-in commands

1. takeown.exe /f "%windir%\system32" 2. icalcs.exe "%windir%\system32" /grant "%username%":F 3. 将 cmd.exe 重命名为 utilman.exe 4. 锁定控制台并按 Win+U

攻击可能会被某些 AV 软件检测到。

替代方法依赖于使用相同权限替换存储在 "Program Files" 中的服务二进制文件。

SeTcb

Admin

3rd party tool

操纵令牌以包含本地管理员权限。可能需要 SeImpersonate。

待验证。

Reference

Support HackTricks

Last updated