如何使用Wireshark解密Windows远程桌面(RDP)协议【通过】

前言

前一段时间CVE-2019-0708 ( Keep Blue )这个漏洞非常引人关注, 如果想要分析这类RDP协议漏洞,那么对RDP通信细节的了解必不可少,由于RDP协议是加密的,直接使用Wireshark出来的是一对乱码,那有没有办法不乱码,看到RDP通信裸数据包呢?

当然是有的,原理是这样的:由于RDP协议通常会使用TLS/SSL加密,我们知道,解密TLS/SSL只要有私钥即可,分析协议只需要在本地虚拟机里面即可操作,那么我们去虚拟机里面拿私钥,然后放到Wireshark里面就可以解密了。具体的过程如下,有3个步骤。

步骤1:获取.pfx文件

.pfx文件就是私钥文件,但是Windows绝对不会提供任何导出方法,原因你懂的,这个时候我们就只能使用大神们开发的神器来帮忙了。

我们要用什么神器来导出私钥文件呢?答案是Mimikatz,没想到吧?Mimikatz不仅可以查看内存中的Windows密码,也可以用来导出Windows私钥文件,具体操作如下:

  1. 下载好最新版本的Mimikatz(https://github.com/gentilkiwi/mimikatz/releases)
  2. 把Mimikatz放到RDP服务器里,命令行执行Mimikatz.exe
  3. 运行下面3条命令
privilege::debug
crypto::capi
crypto::certificates -systemstore:CERT_SYSTEM_STORE_LOCAL_MACHINE -store:"Remote Desktop" /export

执行命令以后,我们就拿到.pfx文件了。(如果不成功,注意系统有没有开启UAC或者管理员权限问题)接下来我们开始下一步。

步骤2:把.pfx转换成.pem

虽然我们已经获取了私钥.pfx文件,但是不能直接使用,因为Wireshark只支持.pem文件,所以我们还需要转换一下文件格式,可以使用Openssl来转换格式。

一般电脑里面不会安装Openssl,直接去Openssl官网/github只有源码下载,所以需要去下载一个已经编译好的Windows版本即可,下载地址:https://slproweb.com/products/Win32OpenSSL.html

我下载安装的是Win64 OpenSSL v1.1.0L版本,安装在C盘。(如果运行不了,还需要安装VC运行库。)安装好了Openssl以后,在命令行运行以下命令,转换文件格式:

C:\OpenSSL-Win64\bin\openssl.exe pkcs12 -in D:\win.pfx -out D:\mykey.pem –nodes

把.pfx文件放在D盘根目录操作比较方便,因为Openssl不支持相对路径。

运行上面的命令以后,会提示需要密码( password ),输入 mimikatz 即可,注意:密码输入没有回显,所以直接粘贴/回车就OK。

Nice,现在我们有.pem文件了,开始下一步。

步骤3:配置Wireshark

打开Wireshark,菜单栏选择:编辑 -> 首选项 -> Protocols -> TLS -> RSA key list -> 点击Edit

然后像下面这样设置即可:

  • IP address = RDP服务器地址(192.168.1.155)
  • port = 3389
  • protocol = 小写(tpkt)
  • Key file = 选择.pem文件地址
  • Password = 空。

好了,准备工作全部完成,我们来分析分析,拿出CVE-2019-0708 的POC测试下。

解密成功,看见CVE-2019-0708漏洞触发关键点MS_T120虚拟频道了没?

PS:RDP通信单单连接序列就使用了四个协议:TPKT、X224、MCS(T.125)和GCC(T.124),真让人头大。

6

  • 通过
  • 未通过

0 投票者

1 个赞

可以的,再深入深入啊。俄罗斯Stas'M大佬还是先过rdp爆破库

mimikatz亮点,这真是个伟大的工具

感谢表哥,这种方式是不是不局限于RDP。所有windows的加密流量都可以这么抓?

还记得本小白刚入坑的时候,分析Windows远程走什么流量的问题,拿到机器却不敢连接,怕去喝茶,哈哈,回忆满满。往后面延伸,有个rdp注入,windows 下有个叫 Startup 的特殊目录,每次用户登陆的时候都会强制运行在之下的程序。当 A 远程登陆到 B 机器时,如果选择将 A 的 C 盘共享到远程主机,那么在此次会话中就出现了一个名为 tsclient 的共享指向主机 A 共享的磁盘。rdp 注入就是通过访问共享的方式把可执行文件放到 A 的 startup 目录下

1 个赞