mstsc,全称:Microsoft Terminal SC ,中文简称“微软远程桌面控制”,为windows的远程登录客户端工具。
导读:这篇文章阅读起来有一定的难度(提醒),且一定要动手才能明白其中的奥妙。作者参考了网上相关文章,作了研究复现,进行了拓展延伸。通过此文,你应该了解且知晓到:一是作者公众号里也介绍过相关内容,如《一个键盘消息钩子的分析过程》《反射型DLL注入工具-sRDI》《一键提取RDP登陆日志》等,有可能的要进行知识储备;二是文章里有不少技术点,值得阅读;三是对rdp此类攻击手法的研究,进行必要的技术储备;四是这个例子代码居然是HWBP硬件断点hook的,我印象中没搞过。
研究内容:通过分析mstsc客户端登录过程中的远程Ip、用户帐号、登录密码的获取过程,展示其内在的联系。
一、准备工作
1、明晓过程:
a. Cobalt_Strike(以下简称CS)加载.cna脚本会提供三个新命令,只需要先执行rdpstrike_enable命令启用即可,当目标主机进程列表中有mstsc.exe进程时将注入shellcode。
b. 监视api获知mstsc的登录过程;
2、三个虚拟机配合完成:
a. 本机,CS的客户端;
b. kali ,192.168.43.135,CS的服务端;
c. win10,192.168.43.137,CS木马的机器,这时如果管理员在这台机器上使用mstsc.exe连接另一台机器,只要输入用户、密码就能窃取到RDP凭据。
d. win10,192.168.43.136,被登录的机器。
3、hook代码:
可以是rdpThief 或 rdpStrike,我们这里选用后者。
4、编译后程序:
在kali下编译完成,如下:
在kali下编译,省下许多事,不要在windows下编译。
将这三个文件放到本机的桌面上,后面CS要用到。
二、操作流程
1、启动CS服务端,
2、本机启动CS客户端,并生成exe木马,给准备中马的机器使用;
指向服务端,其它不用修改,连接;
生成exe木马,放入win10中,运行,客户端发现上线,如下,
说明木马上线了。
3、利用CS载入hook脚本,
4、在win10木马机中运行mstsc,
在CS中键入RDPStrike_enable命令,
说明有了心跳包,并载入了rdpstrike_x64.bin注入到mstsc程序中;
中途关闭了mstsc,再次运行后出现了新的pid;
5、键入rdpstrike_dump命令,在win10木马机中登录mstsc,输入ip,用户名和密码,远程登录到另一台win10上完成整个过程。这时,CS获取到的信息如下:
6、在win10木马的c:windowstemp下生成一个文件用于记录信息,如下:
至此,整个操作流程完成。
三、抓取mstsc的登录过程
1、在win10木马机中,可以使用API Monitor工具监控mstsc.exe进程在登录过程中调用了哪些API?主要有三个api函数:SspiPrepareForCredRead、CryptProtectMemory、CredIsMarshaledCredentialW,启用监听。然后mstsc登录,抓获如下包,
2、看下上面的这几个数据包,
第一个:SspiPrepareForCredRead 函数,获取到登录的Ip
第二个:接下来就是 CryptProtectMemory 函数,这个函数主要用来加密内存中的敏感信息。可以看到第一次调用的这个函数,其中包含明文用户名Anonymous
第二次调用这个函数时,获取到了密码123456789,
第三个:CredIsMarshaledCredentialW 函数,可以看到这个函数只有一个参数,就是我们的用户名明文 anonymous,
在win7下,会发现是用的CredReadW函数,Win7的mstsc.exe没有调用SspiPrepareForCredRead;而且在测试中发现目标必须为网络级别身份验证CredIsMarshaledCredentialW、CryptProtectMemory才能获取到RDP凭据,否则可能获取到的是null,无法正常窃取到RDP凭据。
总结:
CredReadW --> ServerIP
SspiPrepareForCredRead --> ServerIP
CredIsMarshaledCredentialW --> Username
CryptProtectMemory --> Password
3、至此,整个抓取分析过程完成。
四、分析文件
1、文件清单如下,
我们先来看下Makefile编译规则文件,
这几句非常关键,指明了用哪些来进行编译,因为指明了是CCX64 := x86_64-w64-mingw32-gcc,所以要放到kali下编译,而不是windows下;
2、dist目录下,三个文件,
(1)rdpStrike.cna:三条命令的脚本
(2)rdpStrike.x64.bin:shellcode,
对照源码rdpstrike.asm,
将IDA识别的进行了修正,如下:
对照源码main.c:
将IDA识别的进行了修正,如下:
(3)ReadFile.x64.o:当rdpstrike_dump命令时读取ReadFile.x64.o 文件中的二进制内容,并在目标 Beacon 上执行二进制数据。
3、srcinclude目录下,都是一些c源码,这些代码非常值得研究学习,是硬件断点的hook。这里还需要进一步的研究,写得非常得高级。
4、script目录,有个py文件,功能为:从PE格式的文件中提取 .text
段的 shellcode 保存到文件中。
后记:这里有个问题,硬件断点的hook如何发现?我还没想出个头绪来。
原文始发于微信公众号(MicroPest):对mstsc远程登录过程的研究分析