hacktricks/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens
2024-02-08 03:54:17 +00:00
..
abuse-seloaddriverprivilege.md Translated ['ctf-write-ups/challenge-0521.intigriti.io.md', 'ctf-write-u 2024-02-07 04:39:38 +00:00
README.md Translated ['blockchain/blockchain-and-crypto-currencies/README.md', 'ge 2024-02-08 03:54:17 +00:00

Abusando de Tokens

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

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 você já possui

SeImpersonatePrivilege

Este é um privilégio que é mantido por qualquer processo que permite a impersonificaçã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 impersonificaçã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, você pode usar KERB_S4U_LOGON para obter um token de impersonificação para qualquer outro usuário sem saber 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 impersonificar tokens, mas também na ausência de SeImpersonatePrivilege. Essa capacidade depende da capacidade de impersonificar um token que represente o mesmo usuário e cujo nível de integridade não exceda o do processo atual.

Pontos Chave:

  • Impersonificação sem SeImpersonatePrivilege: É possível alavancar o SeCreateTokenPrivilege para EoP ao impersonificar tokens sob condições específicas.
  • Condições para Impersonificação de Token: A impersonificaçã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 impersonificação.
  • Criação e Modificação de Tokens de Impersonificação: Os usuários podem criar um token de impersonificação e aprimorá-lo adicionando o SID (Identificador de Segurança) 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 uma vez que o usuário tenha feito 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 você 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

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 são úteis 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 disponível em FuzzySecurity
SeLoadDriver Admin Ferramenta de terceiros

1. Carregar um driver de kernel com falhas 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. Por exemplo: 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 antivírus.

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 antivírus.

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.

A ser verificado.

Referência

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥