RDP Port (3389)
Introduction
Remote Desktop Protocol (RDP) es un protocolo propietario desarrollado por Microsoft que permite a un usuario tener una interfaz gráfica para conectarse a otro equipo a través de una red. También es una de las herramientas de administración más populares, ya que permite a los administradores de sistemas controlar sus sistemas remotos como si estuvieran físicamente allí. Además, los proveedores de servicios administrados (MSPs) suelen usar esta herramienta para gestionar cientos de redes y sistemas de clientes.
Sin embargo, aunque RDP facilita enormemente la administración remota de sistemas distribuidos, también introduce una puerta de entrada adicional para ataques.
Por defecto, RDP utiliza el puerto TCP/3389. Podemos identificar si el servicio RDP está activo en un host objetivo usando Nmap:
gzzcoo@htb[/htb]# nmap -Pn -p3389 192.168.2.143
Host discovery disabled (-Pn). All addresses will be marked 'up', and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-08-25 04:20 BST
Nmap scan report for 192.168.2.143
Host is up (0.00037s latency).
PORT STATE SERVICE
3389/tcp open ms-wbt-serverRDP Login
gzzcoo@htb[/htb]$ rdesktop -u admin -p password123 192.168.2.143
Autoselecting keyboard map 'en-us' from locale
ATTENTION! The server uses an invalid security certificate which can not be trusted for
the following identified reasons(s);
1. Certificate issuer is not trusted by this system.
Issuer: CN=WIN-Q8F2KTAI43A
Review the following certificate info before you trust it to be added as an exception.
If you do not trust the certificate, the connection atempt will be aborted:
Subject: CN=WIN-Q8F2KTAI43A
Issuer: CN=WIN-Q8F2KTAI43A
Valid From: Tue Aug 24 04:20:17 2021
To: Wed Feb 23 03:20:17 2022
Certificate fingerprints:
sha1: cd43d32dc8e6b4d2804a59383e6ee06fefa6b12a
sha256: f11c56744e0ac983ad69e1184a8249a48d0982eeb61ec302504d7ffb95ed6e57
Do you trust this certificate (yes/no)? yesMisconfigurations
Dado que RDP utiliza credenciales de usuario para la autenticación, uno de los vectores de ataque más comunes contra este protocolo es el password guessing (adivinanza de contraseñas). Aunque no es habitual, podríamos encontrarnos con un servicio RDP sin contraseña si existe una mala configuración.
Un detalle importante al hacer ataques de fuerza bruta contra sistemas Windows es tener en cuenta la política de contraseñas del sistema. En muchos casos, una cuenta de usuario puede bloquearse o deshabilitarse después de varios intentos fallidos. Para evitarlo, podemos aplicar una técnica específica llamada Password Spraying.
Esta técnica consiste en probar una única contraseña contra muchos usuarios antes de intentar con otra contraseña, teniendo cuidado de no disparar bloqueos por intentos fallidos.
Password Spraying with crowbar
Podemos usar la herramienta Crowbar para realizar un ataque de password spraying contra el servicio RDP. En el siguiente ejemplo, se prueba la contraseña password123 contra una lista de usuarios (usernames.txt). El ataque logra encontrar las credenciales válidas:
Crowbar - RDP Password Spraying
Password Spraying with Hydra
También podemos usar Hydra para realizar un ataque de Password Spraying contra un servicio RDP.
El funcionamiento es similar al de otras herramientas de fuerza bruta: definimos una lista de usuarios, una contraseña específica (ya que en password spraying solo se prueba una por intento), el host objetivo y el módulo rdp.
Brute Force with Hydra
No es muy recomendable por el problema que mencionábamos anteriormente, pero se podría realizar fuerza bruta entre un listado de usuarios y contraseñas.
Pass-The-Hash (PtH) with RDP
Puede haber ocasiones en las que obtengas un NT hash de administrador local a partir de un volcado de SAM u otros métodos, pero no puedas descifrarlo para obtener la contraseña en texto claro. En algunos casos, puedes realizar un ataque Pass-the-Hash (PtH) en RDP para obtener acceso GUI al sistema utilizando una herramienta como xfreerdp.
El principal obstáculo para este ataque es el Modo de Administración Restringida (Restricted Admin Mode). Este modo está deshabilitado por defecto y evitará que inicies sesión con un NT hash.

Sin embargo, con acceso de administrador local, puedes habilitar esta función agregando una nueva clave en el registro:
Una vez que se agrega la clave en el registro, puedes usar una herramienta como xfreerdp para obtener acceso por RDP sin necesidad de conocer la contraseña en texto claro de la cuenta:

PoC (Proof of Concept)
RDP Session Hijacking
Imaginemos que hemos conseguido acceso a una máquina y tenemos una cuenta con privilegios de administrador local. Si un usuario está conectado por RDP a nuestra máquina comprometida, podemos secuestrar la sesión de escritorio remoto de ese usuario para escalar privilegios e imitar su cuenta.
En un entorno de Active Directory, esto podría permitirnos tomar el control de una cuenta Domain Admin o ampliar aún más nuestro acceso dentro del dominio.
Como se muestra en el ejemplo, estamos conectados como el usuario juurena (UserID = 2), que tiene privilegios de administrador. Nuestro objetivo es secuestrar la sesión del usuario lewen (UserID = 4), quien también está conectado vía RDP.

Para suplantar a un usuario sin conocer su contraseña, necesitamos tener privilegios SYSTEM y utilizar el binario de Microsoft tscon.exe, que permite conectarse a otra sesión de escritorio.
Funciona indicando el SESSION ID al que queremos conectarnos (por ejemplo, el 4 para el usuario lewen) y el nombre de nuestra sesión actual (por ejemplo, rdp-tcp#13).
El siguiente comando abrirá una nueva consola con el contexto del SESSION_ID especificado dentro de nuestra sesión RDP actual:
Si ya tenemos privilegios de administrador local, podemos conseguir privilegios SYSTEM usando herramientas como PsExec o Mimikatz.
Un truco sencillo es crear un servicio de Windows, que por defecto se ejecuta como Local System y puede lanzar cualquier binario con esos privilegios.
Para ello, utilizamos el binario sc.exe de Microsoft. Primero definimos un nombre para el servicio (por ejemplo, sessionhijack) y el binpath, que es el comando que queremos ejecutar. Al ejecutar el siguiente comando, se creará un servicio llamado sessionhijack:

Para ejecutar el comando, simplemente iniciamos el servicio sessionhijack:
Una vez que el servicio se inicie, se abrirá una nueva terminal con la sesión del usuario lewen.
Con esta nueva cuenta, podemos intentar descubrir qué tipo de privilegios tiene en la red, y con algo de suerte, podríamos estar ante un usuario que pertenece al grupo Help Desk (con derechos de administrador sobre varios equipos) o incluso a Domain Admin.

Nota: Este método ya no funciona en Windows Server 2019.
RDP File Transfer
RDP (Remote Desktop Protocol) se utiliza habitualmente en redes Windows para el acceso remoto. Podemos transferir archivos mediante RDP copiando y pegando. Podemos hacer clic derecho y copiar un archivo desde la máquina Windows a la que nos conectamos y pegarlo en la sesión RDP.
Si estamos conectados desde Linux, podemos utilizar xfreerdp o rdesktop. En el momento de redactar este artículo, xfreerdp y rdesktop permiten copiar desde nuestra máquina de destino a la sesión RDP, pero puede haber situaciones en las que esto no funcione como se espera.
Como alternativa a copiar y pegar, podemos montar un recurso local en el servidor RDP de destino. rdesktop o xfreerdp se pueden utilizar para exponer una carpeta local en la sesión RDP remota.
Mounting a Linux Folder Using rdesktop
Mounting a Linux Folder Using xfreerdp
Para acceder al directorio, podemos conectarnos a \\tsclient, lo que nos permitirá transferir archivos hacia y desde la sesión RDP.

mstsc.exe
Alternativamente, desde Windows, se puede utilizar el cliente de escritorio remoto nativo mstsc.exe.

Después de seleccionar la unidad, podremos interactuar con ella en la sesión remota que sigue.
Nota: Esta unidad no es accesible para ningún otro usuario que haya iniciado sesión en la computadora de destino, incluso si logra secuestrar la sesión RDP.
Última actualización
¿Te fue útil?