RdpThief:远程桌面客户端明文凭证提取工具

2019年11月15日16:58:56 发表评论

RdpThief:远程桌面客户端明文凭证提取工具

介绍

远程桌面(RDP)是用于管理Windows Server的最广泛使用的工具之一,除了被管理员使用外,也容易成为攻击者的利用目标。登录到RDP会话的凭据通常用于是具有管理权限的,这也使得它们成为红队行动的一个理想目标。站在传统的角度看,许多人倾向于使用LSASS进行凭据盗窃,但是lsass.exe通常受到EDR和防病毒产品的监视,而且对LSASS的操作通常需要权限访问,于是我们自然就会考虑,有没有一种更容易的替代方案?

在本文中,我将描述我编写的一个工具,能使用API钩子从Microsoft RDP客户端提取明文凭据,而且如果是在已经受感染用户的权限下操作(比如网络钓鱼导致),并且该用户已打开RDP会话,则可以提取明文凭据而无需提权。

API钩子

简单来说,API钩子是通过将程序重定向到另一个函数来拦截程序中函数调用的过程。这是通过重新编写目标函数的内存代码来实现的。有几种API挂钩方法,技术都比较复杂,细述的话需要单独的篇章。

而就本文而言,我们将使用到的是Microsoft Detours库,该库是开源的,并且支持32位和64位进程。其他框架(如Frida)也能提供类似的功能,但是Detours是非常轻量级的。为了演示这个库有多么强大,我们将使用它为MessageBox函数创建一个钩子。

钩住函数之前,我们需要做两件事,一个是包含原始函数地址和被钩住函数地址的目标指针,为了使钩子正常工作,目标函数和被钩住的函数都应具有相同数量的参数、参数类型和调用约定。

在下面的示例中,我们钩住了MessageBox调用并修改了传递给原始函数的参数。

  1. #include "pch.h"
  2. #include <Windows.h>
  3. #include <iostream>
  4. #include <detours.h>
  5. static int(WINAPI * TrueMessageBox)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) = MessageBox;
  6. int WINAPI _MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) {
  7.      return TrueMessageBox(NULL, L"Hooked", L"Hooked", 0);
  8.  }
  9. int main()
  10. {
  11. // Hook MessageBox
  12. DetourRestoreAfterWith();
  13. DetourTransactionBegin();
  14. DetourUpdateThread(GetCurrentThread());
  15. DetourAttach(&(PVOID&)TrueMessageBox, _MessageBox); // Two Arguments DetourTransactionCommit();
  16. MessageBox(NULL, L"We can't be hooked", L"Hello", 0); // Detach Hooked Function
  17. DetourTransactionBegin();
  18. DetourUpdateThread(GetCurrentThread());
  19. DetourDetach(&(PVOID&)TrueMessageBox, _MessageBox); DetourTransactionCommit();
  20. }

运行程序,第二个消息框应为Unhooked,但由于我们将其钩住并修改了参数

在进行任何挂钩之前,我们需要确定感兴趣的函数。这些函数最好将我们感兴趣的数据作为参数;在本例中,是服务器主机名/IP、用户名和密码。对于这种情况,API监视器是一个非常强大的工具,它允许你附加到一个进程,记录所有API调用并浏览结果。

现在,我们清楚地了解了需要挂钩哪些函数以提取信息,这些信息可以作为实现类似于RdpThief的功能的基础。

工具演示

RdpThief本身是一个独立的DLL,当注入mstsc.exe进程时,它将执行API钩子,提取明文凭据并将其保存到文件中。它附带一个攻击者脚本,负责管理状态、监视新进程并将shellcode注入mstsc.exe。DLL已使用sRDI项目转换为shellcode。启用后,RdpThief将每5秒获取一次进程列表,搜索mstsc.exe后注入其中。

当将攻击者脚本加载到Cobalt Strike上时,将提供三个新命令:

rdpthief_enable:启用对新的mstsc.exe进程的心跳检查并将其注入。

rdpthief_disable:禁用新mstsc.exe的心跳检查,但不会卸载已加载的DLL。

rdpthief_dump:打印提取的凭据(如果有的话)。

演示视频:【传送链接

项目地址:【传送链接

发表评论

后发表评论