对mstsc远程登录过程的研究分析

admin 2024年6月29日01:43:52评论1 views字数 2387阅读7分57秒阅读模式

      mstsc,全称:Microsoft Telnet Screen Control ,中文简称“微软远程桌面控制”,为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下编译完成,如下:

对mstsc远程登录过程的研究分析

在kali下编译,省下许多事,不要在windows下编译。

将这三个文件放到本机的桌面上,后面CS要用到。

二、操作流程

1、启动CS服务端,

对mstsc远程登录过程的研究分析

2、本机启动CS客户端,并生成exe木马,给准备中马的机器使用;

对mstsc远程登录过程的研究分析

指向服务端,其它不用修改,连接;

生成exe木马,放入win10中,运行,客户端发现上线,如下,

对mstsc远程登录过程的研究分析

说明木马上线了。

3、利用CS载入hook脚本,

对mstsc远程登录过程的研究分析

4、在win10木马机中运行mstsc,

对mstsc远程登录过程的研究分析

在CS中键入RDPStrike_enable命令,

对mstsc远程登录过程的研究分析

说明有了心跳包,并载入了rdpstrike_x64.bin注入到mstsc程序中;

对mstsc远程登录过程的研究分析

中途关闭了mstsc,再次运行后出现了新的pid;

5、键入rdpstrike_dump命令,在win10木马机中登录mstsc,输入ip,用户名和密码,远程登录到另一台win10上完成整个过程。这时,CS获取到的信息如下:

对mstsc远程登录过程的研究分析

6、在win10木马的c:windowstemp下生成一个文件用于记录信息,如下:

对mstsc远程登录过程的研究分析

至此,整个操作流程完成。

三、抓取mstsc的登录过程

1、在win10木马机中,可以使用API Monitor工具监控mstsc.exe进程在登录过程中调用了哪些API?主要有三个api函数:SspiPrepareForCredRead、CryptProtectMemory、CredIsMarshaledCredentialW,启用监听。然后mstsc登录,抓获如下包,

对mstsc远程登录过程的研究分析

2、看下上面的这几个数据包,

第一个SspiPrepareForCredRead 函数,获取到登录的Ip

对mstsc远程登录过程的研究分析

第二个接下来就是 CryptProtectMemory 函数,这个函数主要用来加密内存中的敏感信息。可以看到第一次调用的这个函数,其中包含明文用户名Anonymous

对mstsc远程登录过程的研究分析

第二次调用这个函数时,获取到了密码123456789,

对mstsc远程登录过程的研究分析

第三个CredIsMarshaledCredentialW 函数,可以看到这个函数只有一个参数,就是我们的用户名明文 anonymous,

对mstsc远程登录过程的研究分析

在win7下,会发现是用的CredReadW函数,Win7的mstsc.exe没有调用SspiPrepareForCredRead;而且在测试中发现目标必须为网络级别身份验证CredIsMarshaledCredentialW、CryptProtectMemory才能获取到RDP凭据,否则可能获取到的是null,无法正常窃取到RDP凭据。

总结:


CredReadW --> ServerIPSspiPrepareForCredRead --> ServerIPCredIsMarshaledCredentialW --> UsernameCryptProtectMemory --> Password

3、至此,整个抓取分析过程完成。


四、分析文件

1、文件清单如下,

对mstsc远程登录过程的研究分析

我们先来看下Makefile编译规则文件,

对mstsc远程登录过程的研究分析

这几句非常关键,指明了用哪些来进行编译,因为指明了是CCX64 := x86_64-w64-mingw32-gcc,所以要放到kali下编译,而不是windows下;

2、dist目录下,三个文件,

对mstsc远程登录过程的研究分析

(1)rdpStrike.cna:三条命令的脚本

对mstsc远程登录过程的研究分析

(2)rdpStrike.x64.bin:shellcode,

对mstsc远程登录过程的研究分析

对照源码rdpstrike.asm,

对mstsc远程登录过程的研究分析

IDA识别的进行了修正,如下:

对mstsc远程登录过程的研究分析

对照源码main.c:

对mstsc远程登录过程的研究分析

IDA识别的进行了修正,如下:

对mstsc远程登录过程的研究分析

(3)ReadFile.x64.o:当rdpstrike_dump命令时读取ReadFile.x64.o 文件中的二进制内容,并在目标 Beacon 上执行二进制数据。

对mstsc远程登录过程的研究分析

3、srcinclude目录下,都是一些c源码,这些代码非常值得研究学习,是硬件断点的hook。这里还需要进一步的研究,写得非常得高级。

4、script目录,有个py文件,功能为:从PE格式的文件中提取 .text 段的 shellcode 保存到文件中。


后记:这里有个问题,硬件断点的hook如何发现?我还没想出个头绪来。

原文始发于微信公众号(MicroPest):对mstsc远程登录过程的研究分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月29日01:43:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   对mstsc远程登录过程的研究分析https://cn-sec.com/archives/2898117.html

发表评论

匿名网友 填写信息