Abusing Tokens

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

令牌

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

Access Tokens

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

SeImpersonatePrivilege

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

RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotatoJuicyPotato

SeAssignPrimaryPrivilege

它与SeImpersonatePrivilege非常相似,将使用相同的方法获取特权令牌。 然后,此特权允许为新/挂起的进程分配主令牌。使用特权模拟令牌,您可以派生主令牌(DuplicateTokenEx)。 有了令牌,您可以使用'CreateProcessAsUser'创建新进程,或创建一个挂起的进程并设置令牌(通常情况下,无法修改正在运行进程的主令牌)。

SeTcbPrivilege

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

SeBackupPrivilege

通过此特权,系统被迫授予对任何文件的所有读取访问权限(仅限读取操作)。它用于从注册表中读取本地管理员帐户的密码哈希,随后可以使用像“psexec”或“wmicexec”这样的工具与哈希一起使用(哈希传递技术)。但是,此技术在两种情况下失败:当本地管理员帐户被禁用时,或者当存在一个策略,从远程连接的本地管理员中删除管理权限。 您可以使用以下方式滥用此特权

Privileged Groups

SeRestorePrivilege

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

SeCreateTokenPrivilege

SeCreateTokenPrivilege是一种强大的权限,特别在用户具有模拟令牌的能力时非常有用,但在没有SeImpersonatePrivilege的情况下也很有用。此功能取决于能够模拟代表同一用户且完整性级别不超过当前进程的令牌。

关键点:

  • 无需SeImpersonatePrivilege即可模拟: 可以在特定条件下利用SeCreateTokenPrivilege进行EoP,通过模拟令牌。

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

  • 创建和修改模拟令牌: 用户可以创建模拟令牌,并通过添加特权组的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_DRIVER0x00000001)。

操作步骤:

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

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

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

  4. Type分配为SERVICE_KERNEL_DRIVER0x00000001)。

# 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

此特权允许调试其他进程,包括读写内存。可以利用此特权采用各种内存注入策略,能够规避大多数防病毒软件和主机入侵防护解决方案。

转储内存

您可以使用ProcDump捕获进程的内存。具体而言,这可以应用于**本地安全性子系统服务(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可能更有趣 - 当涉及到打开文件时,SeBackupPrivilege(以及robocopy)并不有用。 - Robocopy需要同时具备SeBackup和SeRestore才能使用/b参数。

SeCreateToken

管理员

第三方工具

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

SeDebug

管理员

PowerShell

复制lsass.exe的令牌。

脚本可在FuzzySecurity找到

SeLoadDriver

管理员

第三方工具

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

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

SeRestore

管理员

PowerShell

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

某些杀毒软件可能会检测到攻击。

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

SeTakeOwnership

管理员

内置命令

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

某些杀毒软件可能会检测到攻击。

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

SeTcb

管理员

第三方工具

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

待验证。

参考

最后更新于