Attacking RDP

Let’s break down the Attacking RDP section you provided. Remote Desktop Protocol (RDP) is a Microsoft protocol that lets you remotely connect to a computer with a graphical interface over a network. It’s widely used by admins to manage systems centrally and by managed service providers (MSPs) to handle client networks. However, its popularity makes it a juicy target for attackers.

Step 1: Enumeration

  • RDP runs on TCP/3389 by default. We use Nmap to check if this port is open and an RDP service is active. If it’s open, we’ve got a potential entry point.

Common Attack: Password Guessing

  • RDP requires a username and password. Misconfigurations might leave it password-less (rare but possible). The go-to attack is password guessing, but Windows often locks accounts after too many failed attempts (Account Lockout).

  • To avoid this, we use Password Spraying: Try one password across multiple usernames, then switch passwords, staying under the lockout threshold.

Tools for Password Attacks:

  • Crowbar: Takes a list of usernames and one password, tests them against RDP, and flags any successful logins.

  • Hydra: Similar idea—tries a single password across many usernames to find valid credentials.

Once You Have Credentials:

  • Use tools like rdesktop or xfreerdp to log into the RDP server with the valid username and password, giving you a graphical interface to explore.

Advanced Attack: Session Hijacking

  • If you gain access to a machine with a local admin account and another user is logged in via RDP, you can hijack their session—impersonate them without their password.

  • How?

    • Use tscon.exe (a Microsoft tool) to switch to their session, but you need SYSTEM privileges.

    • If you only have admin rights, create a service with sc.exe that runs a command as SYSTEM, then hijack the session.

  • If the hijacked user is a Domain Admin, you’ve hit the jackpot—full network control.

Pass-the-Hash (PtH) Attack:

  • If you have a user’s NTLM hash (e.g., from a credential dump) but can’t crack it to a plaintext password, you can still use it to access RDP.

  • How?

    • The target needs Restricted Admin Mode enabled, which isn’t default. Enable it by tweaking the Registry (DisableRestrictedAdmin key).

    • Then, use xfreerdp with the hash to log in, gaining GUI access.

  • Note: This doesn’t work on all systems (e.g., Server 2019 patched it), but it’s worth a shot when GUI access is needed.


Steps:

  1. Enumeration:

    • Port: TCP/3389.

    • Tool: Nmap to confirm RDP is running.

  2. Password Attacks:

    • Method: Password Spraying (one password, many usernames).

    • Goal: Find valid credentials without triggering lockout.

  3. Session Hijacking:

    • Requirement: Local admin + SYSTEM privileges.

    • Goal: Impersonate an active RDP user (e.g., Domain Admin).

  4. Pass-the-Hash (PtH):

    • Requirement: NTLM hash + Restricted Admin Mode enabled.

    • Goal: RDP access without plaintext password.

Tools & Commands:

Tool/Command

What It Does

nmap -Pn -p3389 <IP>

Scans TCP/3389 to detect RDP service.

crowbar -b rdp -s <IP> -U <file> -c <pass>

Password sprays RDP with a username list and single password.

hydra -L <file> -p <pass> <IP> rdp

Same as Crowbar, tests one password across usernames.

rdesktop -u <user> -p <pass> <IP>

Logs into RDP with valid credentials.

query user

Lists active RDP sessions (ID, username, session name).

sc.exe create <name> binpath= "cmd.exe /k tscon <ID> /dest:<session>"

Creates a service to run tscon as SYSTEM for session hijacking.

tscon <ID> /dest:<session>

Switches to another RDP session (needs SYSTEM).

reg add HKLM\System\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin

Enables Restricted Admin Mode for PtH.

xfreerdp /v:<IP> /u:<user> /pth:<hash>

Logs into RDP using an NTLM hash.

Quick Tips:

  • Start with Nmap: Verify RDP is active.

  • Spray Smart: Avoid lockouts with Password Spraying.

  • Hijack Opportunity: Look for active sessions with query user.

  • PtH Check: Test if Restricted Admin Mode is on; if not, enable it.


Last updated