Abusando de Tokens

Reading time: 11 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

Tokens

Se você não sabe o que são Windows Access Tokens leia esta página antes de continuar:

Access Tokens

Talvez você possa escalar privilégios abusando dos tokens que você já possui

SeImpersonatePrivilege

Este privilégio, que é mantido por qualquer processo, permite a impersonação (mas não a criação) de qualquer token, desde que um handle para ele possa ser obtido. Um token privilegiado pode ser adquirido a partir de um serviço do Windows (DCOM) ao induzi-lo a realizar autenticação NTLM contra um exploit, permitindo subsequentemente a execução de um processo com privilégios SYSTEM. Essa vulnerabilidade pode ser explorada usando várias ferramentas, como juicy-potato, RogueWinRM (que requer que winrm esteja desabilitado), SweetPotato, e PrintSpoofer.

RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato

JuicyPotato

SeAssignPrimaryPrivilege

É muito similar a SeImpersonatePrivilege, usará o mesmo método para obter um token privilegiado.
Depois, esse privilégio permite atribuir um primary token a um processo novo/suspenso. Com o token de impersonação privilegiado você pode derivar um primary token (DuplicateTokenEx).
Com o token, você pode criar um novo processo com 'CreateProcessAsUser' ou criar um processo suspenso e definir o token (em geral, você não pode modificar o primary token de um processo em execução).

SeTcbPrivilege

Se você tem esse privilégio habilitado pode usar KERB_S4U_LOGON para obter um token de impersonação para qualquer outro usuário sem conhecer as credenciais, adicionar um grupo arbitrário (admins) ao token, definir o nível de integridade do token para "medium", e atribuir esse token à thread atual (SetThreadToken).

SeBackupPrivilege

Esse privilégio causa que o sistema conceda todo o controle de leitura a qualquer arquivo (limitado a operações de leitura). Ele é utilizado para ler os hashes de senha do Administrador local do registro, após o que ferramentas como "psexec" ou "wmiexec" podem ser usadas com o hash (técnica Pass-the-Hash). No entanto, essa técnica falha em duas condições: quando a conta Local Administrator está desabilitada, ou quando existe uma política que remove direitos administrativos dos Local Administrators ao se conectarem remotamente.
Você pode abusar desse privilégio com:

Privileged Groups

SeRestorePrivilege

Esse privilégio fornece permissão para acesso de escrita a qualquer arquivo do sistema, independentemente da Access Control List (ACL) do arquivo. Isso abre várias possibilidades de escalonamento, incluindo a capacidade de modificar serviços, realizar DLL Hijacking, e definir debuggers via Image File Execution Options, entre várias outras técnicas.

SeCreateTokenPrivilege

SeCreateTokenPrivilege é uma permissão poderosa, especialmente útil quando um usuário possui a capacidade de impersonar tokens, mas também na ausência de SeImpersonatePrivilege. Essa capacidade depende da habilidade de impersonar um token que represente o mesmo usuário e cujo nível de integridade não exceda o do processo atual.

Pontos-chave:

  • Impersonation sem SeImpersonatePrivilege: É possível aproveitar SeCreateTokenPrivilege para EoP ao impersonar tokens sob condições específicas.
  • Condições para Impersonar Token: A impersonation bem-sucedida requer que o token alvo pertença ao mesmo usuário e tenha um nível de integridade menor ou igual ao nível de integridade do processo que tenta a impersonation.
  • Criação e Modificação de Tokens de Impersonation: Usuários podem criar um token de impersonation e enriquecê-lo adicionando o SID de um grupo privilegiado.

SeLoadDriverPrivilege

Esse privilégio permite carregar e descarregar drivers de dispositivo criando uma entrada no registro com valores específicos para ImagePath e Type. Como o acesso direto de escrita a HKLM (HKEY_LOCAL_MACHINE) é restrito, HKCU (HKEY_CURRENT_USER) deve ser utilizado em seu lugar. No entanto, para tornar HKCU reconhecível pelo kernel para configuração de drivers, um caminho específico deve ser seguido.

Esse caminho é \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName, onde <RID> é o Relative Identifier do usuário atual. Dentro de HKCU, todo esse caminho deve ser criado, e dois valores precisam ser definidos:

  • ImagePath, que é o caminho para o binário a ser executado
  • Type, com o valor SERVICE_KERNEL_DRIVER (0x00000001).

Passos a Seguir:

  1. Acesse HKCU em vez de HKLM devido ao acesso de escrita restrito.
  2. Crie o caminho \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName dentro de HKCU, onde <RID> representa o Relative Identifier do usuário atual.
  3. Defina ImagePath para o caminho de execução do binário.
  4. Atribua 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)

More ways to abuse this privilege in https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege

SeTakeOwnershipPrivilege

Isto é similar a SeRestorePrivilege. Sua função principal permite que um processo assuma a propriedade de um objeto, contornando a necessidade de acesso discricionário explícito por meio da concessão dos direitos de acesso WRITE_OWNER. O processo envolve primeiro garantir a propriedade da chave de registro pretendida para fins de escrita, e então alterar a DACL para permitir operações de escrita.

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 privilégio permite depurar outros processos, incluindo ler e escrever na memória. Diversas estratégias de injeção na memória, capazes de evadir a maioria dos antivírus e das soluções de prevenção de intrusão no host, podem ser empregadas com este privilégio.

Dump de memória

Você pode usar o ProcDump da SysInternals Suite para capturar a memória de um processo. Especificamente, isso pode se aplicar ao processo Local Security Authority Subsystem Service (LSASS), que é responsável por armazenar credenciais de usuário uma vez que um usuário tenha feito login com sucesso no sistema.

Você pode então carregar esse dump no mimikatz para obter senhas:

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

RCE

Se você quiser obter um shell NT SYSTEM, pode 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 direito (Perform volume maintenance tasks) permite abrir handles de dispositivo de volume bruto (por exemplo, \.\C:) para I/O direto no disco que contorna as ACLs do NTFS. Com ele você pode copiar bytes de qualquer arquivo no volume lendo os blocos subjacentes, possibilitando leitura arbitrária de arquivos sensíveis (por exemplo, chaves privadas da máquina em %ProgramData%\Microsoft\Crypto, hives do registro, SAM/NTDS via VSS). É particularmente impactante em servidores CA, onde a exfiltração da chave privada da CA permite forjar um Golden Certificate para se passar por qualquer principal.

Veja técnicas detalhadas e mitigações:

Semanagevolume Perform Volume Maintenance Tasks

Verificar privilégios

whoami /priv

Os tokens que aparecem como Disabled podem ser habilitados; na verdade você pode abusar de tokens Enabled e Disabled.

Habilitar todos os tokens

Se você tiver tokens desabilitados, pode usar o script EnableAllTokenPrivs.ps1 para habilitar todos os tokens:

bash
.\EnableAllTokenPrivs.ps1
whoami /priv

Ou o script incorporado neste post.

Tabela

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
SeAssignPrimaryTokenAdministrador3rd party tool"Isso permitiria a um usuário impersonar tokens e privesc para o NT System usando ferramentas como potato.exe, rottenpotato.exe e juicypotato.exe"Obrigado Aurélien Chalot pela atualização. Vou tentar reformular isso para algo mais no estilo receita em breve.
SeBackupAmeaçaBuilt-in commandsLeia arquivos sensíveis com robocopy /b

- Pode ser mais interessante se você puder ler %WINDIR%\MEMORY.DMP

- SeBackupPrivilege (e robocopy) não é útil quando se trata de arquivos abertos.

- Robocopy requer tanto SeBackup quanto SeRestore para funcionar com o parâmetro /b.

SeCreateTokenAdministrador3rd party toolCriar token arbitrário incluindo privilégios de administrador local com NtCreateToken.
SeDebugAdministradorPowerShellDuplicar o token de lsass.exe.Script disponível em FuzzySecurity
SeLoadDriverAdministrador3rd party tool

1. Carregar um driver de kernel com bugs, como szkg64.sys
2. Explorar a vulnerabilidade do driver

Alternativamente, o privilégio pode ser usado para descarregar drivers relacionados à segurança com o comando builtin ftlMC. por exemplo: fltMC sysmondrv

1. A vulnerabilidade do szkg64 está listada como CVE-2018-15732
2. O szkg64 exploit code foi criado por Parvez Anwar

SeRestoreAdministradorPowerShell

1. Executar PowerShell/ISE com o privilégio SeRestore presente.
2. Habilitar o privilégio com Enable-SeRestorePrivilege.
3. Renomear utilman.exe para utilman.old
4. Renomear cmd.exe para utilman.exe
5. Bloquear o console e pressionar Win+U

O ataque pode ser detectado por alguns softwares AV.

Método alternativo depende de substituir binários de serviço armazenados em "Program Files" usando o mesmo privilégio

SeTakeOwnershipAdministradorBuilt-in commands

1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. Renomear cmd.exe para utilman.exe
4. Bloquear o console e pressionar Win+U

O ataque pode ser detectado por alguns softwares AV.

Método alternativo depende de substituir binários de serviço armazenados em "Program Files" usando o mesmo privilégio.

SeTcbAdministrador3rd party tool

Manipular tokens para incluir privilégios de administrador local. Pode requerer SeImpersonate.

Para ser verificado.

Referências

  • Confira esta tabela definindo tokens do Windows: https://github.com/gtworek/Priv2Admin
  • Veja this paper sobre privesc com tokens.
  • Microsoft – Executar tarefas de manutenção de volume (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

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks