hacktricks/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md

21 KiB

Abusando de Tokens

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Tokens

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

{% content-ref url="access-tokens.md" %} access-tokens.md {% endcontent-ref %}

Talvez você consiga elevar privilégios abusando dos tokens que já possui

SeImpersonatePrivilege

Este é um privilégio que é mantido por qualquer processo que permite a impersonação (mas não a criação) de qualquer token, desde que um identificador para ele possa ser obtido. Um token privilegiado pode ser adquirido de um serviço do Windows (DCOM) induzindo-o a realizar autenticação NTLM contra um exploit, possibilitando posteriormente a execução de um processo com privilégios do SISTEMA. Essa vulnerabilidade pode ser explorada usando várias ferramentas, como juicy-potato, RogueWinRM (que requer que o winrm seja desativado), SweetPotato e PrintSpoofer.

{% content-ref url="roguepotato-and-printspoofer.md" %} roguepotato-and-printspoofer.md {% endcontent-ref %}

{% content-ref url="juicypotato.md" %} juicypotato.md {% endcontent-ref %}

SeAssignPrimaryPrivilege

É muito semelhante ao SeImpersonatePrivilege, ele usará o mesmo método para obter um token privilegiado.
Então, este privilégio permite atribuir um token primário a um processo novo/suspenso. Com o token de impersonação privilegiado, você pode derivar um token primário (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 token primário de um processo em execução).

SeTcbPrivilege

Se você tiver habilitado este token, poderá 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 (administradores) ao token, definir o nível de integridade do token como "médio" e atribuir este token à thread atual (SetThreadToken).

SeBackupPrivilege

O sistema é levado a conceder todo acesso de leitura a qualquer arquivo (limitado a operações de leitura) por este privilégio. Ele é utilizado para ler os hashes de senha das contas de Administrador local do registro, após o que, ferramentas como "psexec" ou "wmicexec" podem ser usadas com o hash (técnica Pass-the-Hash). No entanto, essa técnica falha sob duas condições: quando a conta de Administrador Local está desativada, ou quando uma política está em vigor que remove direitos administrativos dos Administradores Locais conectando remotamente.
Você pode abusar deste privilégio com:

{% content-ref url="../active-directory-methodology/privileged-groups-and-token-privileges.md" %} privileged-groups-and-token-privileges.md {% endcontent-ref %}

SeRestorePrivilege

A permissão para acesso de escrita a qualquer arquivo do sistema, independentemente da Lista de Controle de Acesso (ACL) do arquivo, é fornecida por este privilégio. Isso abre inúmeras possibilidades para escalonamento, incluindo a capacidade de modificar serviços, realizar DLL Hijacking e definir depuradores via Opções de Execução de Arquivo de Imagem, 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 capacidade 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:

  • Impersonação sem SeImpersonatePrivilege: É possível alavancar o SeCreateTokenPrivilege para EoP ao impersonar tokens sob condições específicas.
  • Condições para Impersonação de Token: A impersonação bem-sucedida requer que o token de destino 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 impersonação.
  • Criação e Modificação de Tokens de Impersonação: Os usuários podem criar um token de impersonação e aprimorá-lo adicionando o SID de um grupo privilegiado.

SeLoadDriverPrivilege

Este privilégio permite carregar e descarregar drivers de dispositivo com a criação de uma entrada de registro com valores específicos para ImagePath e Type. Como o acesso de gravação direta ao HKLM (HKEY_LOCAL_MACHINE) é restrito, HKCU (HKEY_CURRENT_USER) deve ser utilizado. No entanto, para tornar o HKCU reconhecível pelo kernel para configuração de driver, um caminho específico deve ser seguido.

Este caminho é \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName, onde <RID> é o Identificador Relativo do usuário atual. Dentro do 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 um valor de SERVICE_KERNEL_DRIVER (0x00000001).

Passos a Seguir:

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

Mais maneiras de abusar desse privilégio em https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege

SeTakeOwnershipPrivilege

Isso é semelhante ao 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 de direitos de acesso WRITE_OWNER. O processo envolve primeiro garantir a propriedade da chave de registro pretendida para fins de escrita e, em seguida, alterar o DACL para permitir operações de escrita.

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. Várias estratégias de injeção de memória, capazes de evadir a maioria dos antivírus e soluções de prevenção de intrusões de 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 as credenciais do usuário depois que um usuário fez login com sucesso em um 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 deseja obter um shell NT SYSTEM, você pode usar:

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

Verificar privilégios

whoami /priv

Os tokens que aparecem como Desativados podem ser ativados, e na verdade você pode abusar dos tokens Ativados e Desativados.

Ativar Todos os tokens

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

.\EnableAllTokenPrivs.ps1
whoami /priv

Ou o script incorporado neste post.

Tabela

Folha de dicas completa de privilégios de token em https://github.com/gtworek/Priv2Admin, o resumo abaixo listará apenas maneiras diretas de explorar o privilégio para obter uma sessão de administrador ou ler arquivos sensíveis.

Privilégio Impacto Ferramenta Caminho de execução Observações
SeAssignPrimaryToken Admin Ferramenta de terceiros "Permitiria a um usuário se passar por tokens e elevar privilégios para o sistema nt usando ferramentas como potato.exe, rottenpotato.exe e juicypotato.exe" Obrigado Aurélien Chalot pela atualização. Tentarei reformular para algo mais parecido com uma receita em breve.
SeBackup Ameaça Comandos integrados Ler 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.

SeCreateToken Admin Ferramenta de terceiros Criar token arbitrário incluindo direitos de administrador local com NtCreateToken.
SeDebug Admin PowerShell Duplicar o token lsass.exe. Script a ser encontrado em FuzzySecurity
SeLoadDriver Admin Ferramenta de terceiros

1. Carregar 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 integrado ftlMC. ou seja: fltMC sysmondrv

1. A vulnerabilidade do szkg64 está listada como CVE-2018-15732
2. O código de exploração do szkg64 foi criado por Parvez Anwar

SeRestore Admin PowerShell

1. Iniciar o 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 de AV.

O método alternativo depende da substituição de binários de serviço armazenados em "Arquivos de Programas" usando o mesmo privilégio

SeTakeOwnership Admin Comandos integrados

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 de AV.

O método alternativo depende da substituição de binários de serviço armazenados em "Arquivos de Programas" usando o mesmo privilégio.

SeTcb Admin Ferramenta de terceiros

Manipular tokens para incluir direitos de administrador local. Pode exigir SeImpersonate.

Para ser verificado.

Referência

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!