Abusar de Tokens

Reading time: 11 minutes

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Tokens

Si no sabes qué son Windows Access Tokens lee esta página antes de continuar:

Access Tokens

Quizás puedas escalar privilegios abusando de los tokens que ya tienes

SeImpersonatePrivilege

Este privilegio, que posee cualquier proceso, permite la impersonation (pero no la creación) de cualquier token, siempre que se pueda obtener un handle del mismo. Un token privilegiado se puede adquirir desde un servicio de Windows (DCOM) induciéndolo a realizar autenticación NTLM contra un exploit, habilitando posteriormente la ejecución de un proceso con privilegios SYSTEM. Esta vulnerabilidad puede explotarse usando diversas herramientas, como juicy-potato, RogueWinRM (que requiere que winrm esté deshabilitado), SweetPotato, y PrintSpoofer.

RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato

JuicyPotato

SeAssignPrimaryPrivilege

Es muy similar a SeImpersonatePrivilege, usa el mismo método para obtener un token privilegiado.
Luego, este privilegio permite asignar un primary token a un proceso nuevo/suspendido. Con el privileged impersonation token puedes derivar un primary token (DuplicateTokenEx).
Con el token, puedes crear un nuevo proceso con 'CreateProcessAsUser' o crear un proceso suspendido y establecer el token (en general, no puedes modificar el primary token de un proceso en ejecución).

SeTcbPrivilege

Si tienes habilitado este privilegio puedes usar KERB_S4U_LOGON para obtener un impersonation token de cualquier otro usuario sin conocer las credenciales, añadir un grupo arbitrario (admins) al token, establecer el nivel de integridad del token a "medium", y asignar este token al hilo actual (SetThreadToken).

SeBackupPrivilege

Este privilegio provoca que el sistema conceda control de acceso de solo lectura a cualquier archivo (limitado a operaciones de lectura). Se utiliza para leer los hashes de contraseña de las cuentas de Administrator locales desde el registro, tras lo cual se pueden usar herramientas como "psexec" o "wmiexec" con el hash (técnica Pass-the-Hash). Sin embargo, esta técnica falla en dos condiciones: cuando la cuenta Local Administrator está deshabilitada, o cuando existe una política que elimina los derechos administrativos de los Local Administrators que se conectan de forma remota.
Puedes abusar de este privilegio con:

Privileged Groups

SeRestorePrivilege

Este privilegio otorga permiso de escritura a cualquier archivo del sistema, independientemente del Access Control List (ACL) del archivo. Abre numerosas posibilidades para la escalada, incluyendo la capacidad de modificar servicios, realizar DLL Hijacking, y establecer debuggers mediante Image File Execution Options, entre otras técnicas.

SeCreateTokenPrivilege

SeCreateTokenPrivilege es un permiso potente, especialmente útil cuando un usuario posee la capacidad de impersonate tokens, pero también útil en ausencia de SeImpersonatePrivilege. Esta capacidad depende de la habilidad para impersonate un token que represente al mismo usuario y cuyo nivel de integridad no supere el del proceso actual.

Puntos clave:

  • Impersonation sin SeImpersonatePrivilege: Es posible aprovechar SeCreateTokenPrivilege para EoP impersonando tokens bajo condiciones específicas.
  • Condiciones para la impersonation de tokens: La impersonation exitosa requiere que el token objetivo pertenezca al mismo usuario y tenga un nivel de integridad menor o igual al del proceso que intenta la impersonation.
  • Creación y modificación de impersonation tokens: Los usuarios pueden crear un impersonation token y enriquecerlo añadiendo el SID de un grupo privilegiado.

SeLoadDriverPrivilege

Este privilegio permite cargar y descargar device drivers creando una entrada en el registro con valores específicos para ImagePath y Type. Dado que el acceso de escritura directo a HKLM (HKEY_LOCAL_MACHINE) está restringido, debe utilizarse HKCU (HKEY_CURRENT_USER). Sin embargo, para que el kernel reconozca HKCU para la configuración del driver, debe seguirse una ruta específica.

Esta ruta es \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName, donde <RID> es el Relative Identifier del usuario actual. Dentro de HKCU, se debe crear toda esta ruta y establecer dos valores:

  • ImagePath, que es la ruta al binario a ejecutar
  • Type, con un valor de SERVICE_KERNEL_DRIVER (0x00000001).

Pasos a seguir:

  1. Acceder a HKCU en lugar de HKLM debido al acceso de escritura restringido.
  2. Crear la ruta \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName dentro de HKCU, donde <RID> representa el Relative Identifier del usuario actual.
  3. Establecer ImagePath a la ruta de ejecución del binario.
  4. Asignar Type como SERVICE_KERNEL_DRIVER (0x00000001).
python
# 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)

Más formas de abusar de este privilegio en https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege

SeTakeOwnershipPrivilege

Esto es similar a SeRestorePrivilege. Su función principal permite a un proceso asumir la propiedad de un objeto, eludiendo el requisito de acceso discrecional explícito mediante la concesión de los derechos de acceso WRITE_OWNER. El proceso consiste en primero obtener la propiedad de la clave de registro objetivo para poder escribir, y luego modificar la DACL para permitir las operaciones de escritura.

bash
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

Este privilegio permite el debug other processes, incluyendo leer y escribir en la memoria. Se pueden emplear diversas estrategias de inyección en memoria, capaces de evadir la mayoría de los antivirus y soluciones de prevención de intrusiones en el host, con este privilegio.

Volcar memoria

Puedes usar ProcDump del SysInternals Suite para capture the memory of a process. Específicamente, esto puede aplicarse al proceso Local Security Authority Subsystem Service (LSASS), que es responsable de almacenar las credenciales de usuario una vez que un usuario ha iniciado sesión correctamente en un sistema.

Luego puedes cargar este volcado en mimikatz para obtener contraseñas:

mimikatz.exe
mimikatz # log
mimikatz # sekurlsa::minidump lsass.dmp
mimikatz # sekurlsa::logonpasswords

RCE

Si quieres obtener una shell NT SYSTEM, puedes usar:

bash
# Get the PID of a process running as NT SYSTEM
import-module psgetsys.ps1; [MyProcess]::CreateProcessFromParent(<system_pid>,<command_to_execute>)

SeManageVolumePrivilege

Este derecho (Perform volume maintenance tasks) permite abrir raw volume device handles (p. ej., \.\C:) para direct disk I/O que bypassea las NTFS ACLs. Con él puedes copiar bytes de cualquier archivo en el volumen leyendo los bloques subyacentes, habilitando la lectura arbitraria de archivos con material sensible (p. ej., machine private keys en %ProgramData%\Microsoft\Crypto, registry hives, SAM/NTDS via VSS). Es particularmente impactante en CA servers donde exfiltrating la CA private key permite forjar un Golden Certificate para impersonate any principal.

See detailed techniques and mitigations:

Semanagevolume Perform Volume Maintenance Tasks

Comprobar privilegios

whoami /priv

Los tokens que aparecen como Disabled pueden habilitarse; de hecho puedes abusar de los tokens Enabled y Disabled.

Habilitar todos los tokens

Si tienes tokens Disabled, puedes usar el script EnableAllTokenPrivs.ps1 para habilitar todos los tokens:

bash
.\EnableAllTokenPrivs.ps1
whoami /priv

O el script embed en este post.

Tabla

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
SeAssignPrimaryTokenAdminherramienta de terceros"Permitiría a un usuario suplantar tokens y privesc al nt system usando herramientas como potato.exe, rottenpotato.exe y juicypotato.exe"Gracias a Aurélien Chalot por la actualización. Intentaré reformularlo a algo más tipo receta pronto.
SeBackupThreatBuilt-in commandsLeer archivos sensibles con robocopy /b

- Puede ser más interesante si puedes leer %WINDIR%\MEMORY.DMP

- SeBackupPrivilege (y robocopy) no es útil cuando se trata de archivos abiertos.

- Robocopy requiere tanto SeBackup como SeRestore para funcionar con el parámetro /b.

SeCreateTokenAdminherramienta de tercerosCrear un token arbitrario que incluya derechos de administrador local con NtCreateToken.
SeDebugAdminPowerShellDuplicar el token de lsass.exe.Script disponible en FuzzySecurity
SeLoadDriverAdminherramienta de terceros

1. Cargar un driver de kernel con fallos como szkg64.sys
2. Explotar la vulnerabilidad del driver

Alternativamente, el privilegio puede usarse para descargar drivers relacionados con seguridad con el comando builtin ftlMC. p.ej.: fltMC sysmondrv

1. La vulnerabilidad szkg64 está listada como CVE-2018-15732
2. El szkg64 exploit code fue creado por Parvez Anwar

SeRestoreAdminPowerShell

1. Lanzar PowerShell/ISE con el privilegio SeRestore presente.
2. Habilitar el privilegio con Enable-SeRestorePrivilege).
3. Renombrar utilman.exe a utilman.old
4. Renombrar cmd.exe a utilman.exe
5. Bloquear la consola y presionar Win+U

El ataque puede ser detectado por algún software AV.

El método alternativo consiste en reemplazar binarios de servicios almacenados en "Program Files" usando el mismo privilegio

SeTakeOwnershipAdminBuilt-in commands

1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. Renombrar cmd.exe a utilman.exe
4. Bloquear la consola y presionar Win+U

El ataque puede ser detectado por algún software AV.

Método alternativo consiste en reemplazar binarios de servicios almacenados en "Program Files" usando el mismo privilegio.

SeTcbAdminherramienta de terceros

Manipular tokens para incluir derechos de administrador local. Puede requerir SeImpersonate.

Por verificar.

Referencia

  • Echa un vistazo a esta tabla que define los tokens de Windows: https://github.com/gtworek/Priv2Admin
  • Echa un vistazo a este paper sobre privesc con tokens.
  • Microsoft – Perform volume maintenance tasks (SeManageVolumePrivilege): https://learn.microsoft.com/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/perform-volume-maintenance-tasks
  • 0xdf – HTB: Certificate (SeManageVolumePrivilege → CA key exfil → Golden Certificate): https://0xdf.gitlab.io/2025/10/04/htb-certificate.html

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks