工欲善其事,必先利其器。对RDP协议最好的研究学习方法就是通过抓包的方式,对着文档一步一步分析RDP的通信过程。本文将介绍常见的RDP客户端和服务的抓包解密方法。
抓包环境
- RDP 服务器(Windows Server)虚拟机一台
- RDP 客户端
- mstsc(windows)虚拟机一台
- freerdp(ubuntu)虚拟机一台
Windows RDP服务器配置
配置 RDS 服务器
www.server-world.info/en/note?os=…
导出 RDP 服务端私钥
这里使用 jailbreak 来导出证书, 下载并在命令行中切换到 binaries 目录, 以管理员权限执行以下命令
jailbreak64.exe %WINDIR%\system32\mmc.exe %WINDIR%\system32\certlm.msc -64
执行完命令后会弹出以下窗口
按照上面的步骤操作就可以导出 RDP 证书
将证书拷贝到 ubuntu 系统中执行以下命令转化证书格式
禁用 UDP 协议
安装Wireshark
www.wireshark.org/download.ht…
使用 nmap 扫描RDP服务端支持的密码学套件
由于前向保密的特殊性, 即使有私钥也没有办法完全解密用该密码学套件加密的通信流量。
这里包含DHE或ECDHE的可能就是支持前向加密的密码学套件,需要在客户端中指定密码学套件。
# ubuntu上安装 nmap
sudo apt install -y nmap
# 扫描 RDP 端口
$ nmap -p 3389 --script ssl-enum-ciphers 10.15.132.89
Starting Nmap 7.80 ( https://nmap.org ) at 2023-05-18 10:25 CST
Nmap scan report for 10.15.132.89
Host is up (0.022s latency).
PORT STATE SERVICE
3389/tcp open ms-wbt-server
| ssl-enum-ciphers:
| TLSv1.0:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
| TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
| compressors:
| NULL
| cipher preference: server
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
| Broken cipher RC4 is deprecated by RFC 7465
| Ciphersuite uses MD5 for message integrity
| TLSv1.1:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
| TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
| compressors:
| NULL
| cipher preference: server
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
| Broken cipher RC4 is deprecated by RFC 7465
| Ciphersuite uses MD5 for message integrity
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
| TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
| TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
| compressors:
| NULL
| cipher preference: server
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
| Broken cipher RC4 is deprecated by RFC 7465
| Ciphersuite uses MD5 for message integrity
|_ least strength: C
Nmap done: 1 IP address (1 host up) scanned in 3.14 seconds
XRDP证书
默认证书位置 /etc/xrdp/key.pem, 导出后可直接使用
MSTSC客户端设置
设置SSL密码学套件
打开组策略管理器
拷贝到文本编辑器中, 删除所有包含DHE或ECDHE的条目,覆盖原来的配置应用即可。
配置完后需要重启一下电脑
如果配置不成功可以直接尝试改成TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA
FreeRDP客户端设置
设置密码学套件
xfreerdp 添加以下命令行参数指定密码学套件
/sec:nla /tls-ciphers:ciphers=AES256-SHA:AES128-SHA
调整 RDP 连接参数, 让RDP 数据包更好分析
禁用带宽自动调整(可以简化 RDP 连接过程)
connection type:i:6
networkautodetect:i:0
bandwidthautodetect:i:0
禁用批量数据压缩(提升 fast-path 数据包可读性)
compression:i:0
Wireshark配置
IP address 填写 RDP 服务端地址
参考文档
Wireshark for Pentester: Decrypting RDP Traffic - Hacking Articles
GitHub - awakecoding/wireshark-rdp: Wireshark RDP resources
RDP 协议文档: [MS-RDPBCGR] [MS-RDPERP]