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

这篇具有很好参考价值的文章主要介绍了从远程桌面客户端提取明文凭证的工具RdpThief。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

介绍

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

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

API钩子

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

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

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

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

#include "pch.h"
#include <Windows.h>
#include <iostream>
#include <detours.h>
 
static int(WINAPI * TrueMessageBox)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) = MessageBox;
int WINAPI _MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) {
     return TrueMessageBox(NULL, L"Hooked", L"Hooked", 0);
 }
int main()
{
// Hook MessageBox
DetourRestoreAfterWith();
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)TrueMessageBox, _MessageBox); // Two Arguments DetourTransactionCommit();
MessageBox(NULL, L"We can't be hooked", L"Hello", 0); // Detach Hooked Function
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach(&(PVOID&)TrueMessageBox, _MessageBox); DetourTransactionCommit();
}

运行程序,第二个消息框应为Unhooked,但由于我们将其钩住并修改了参数,所以消息框如下图所示:
从远程桌面客户端提取明文凭证的工具RdpThief

寻找要钩住的函数

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

为此,我们将API监视器附加到mstsc.exe并启动一个示例连接:
从远程桌面客户端提取明文凭证的工具RdpThief
现在,我们可以在所有API调用中搜索作为用户名提供的字符串。在本例中,几个API调用都包含此字符串,但是最值得注意的一个是CredIsMarshaledCredentialW。
从远程桌面客户端提取明文凭证的工具RdpThief
通过MSDN,我们可以看到它只使用一个指向C Unicode字符串的long指针类型的参数。
从远程桌面客户端提取明文凭证的工具RdpThief
为了确保通过挂钩此函数获得正确的数据,我们将Windbg附加到mstsc.exe,并在CredIsMarshaledCredentialW处设置一个断点。尝试登录时,我们可以看到传递给该函数的第一个参数是Unicode字符串的地址。
从远程桌面客户端提取明文凭证的工具RdpThief
按照相同的方法搜索密码字符串,然后可以看到对CryptProtectMemory的调用,并带有指向密码字符串的指针。

从远程桌面客户端提取明文凭证的工具RdpThief
根据API监视器,CryptProtectMemory位于Crypt32.dll中,由于该函数是在最新版本的Win10上由dpapi.dll导出的,因此位置不正确。为了确保我们在此API调用上也具有正确的数据,我们将Windbg附加到进程,并为CryptProtectMemory函数设置一个断点。
从远程桌面客户端提取明文凭证的工具RdpThief
通过检查内存,我们可以假定传递的参数是指向结构的指针。由于我们所需要的信息只是结构的开始,因此不必完全解析它。与前面的示例相反,该函数有多个调用,其中不包含我们所需要的信息。我们可以观察到前4个字节中包含了密码字符串的大小,从内存中读取大小,并比较它是否大于0x2,如果条件为true,则意味着结构中包含密码并可提取。

SspiPrepareForCredRead遵循相同的过程,该过程接收IP地址作为第二个参数。

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

RdpThief演示

现在,我们清楚地了解了需要挂钩哪些函数以提取信息,这些信息可以作为实现类似于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:打印提取的凭据(如果有的话)。

可以在此视频中找到RdpThief的简单演示。

RdpThief工具源代码在此。文章来源地址https://www.toymoban.com/news/detail-433553.html

到了这里,关于从远程桌面客户端提取明文凭证的工具RdpThief的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ChatGPT桌面客户端支持gpt4模型,附使用说明

    #软件核心功能: 1、支持OpenAI官方秘钥及API2D双秘钥使用;如果全局魔法,可以自己用官方秘钥;没魔法国内可直接使用API2D秘钥; 2、内置GPT4模型选项,如果你的官方秘钥支持可直接使用;你也可以注册API2D秘钥进行使用(非推广,这真是国内最简单的方式了); 3、支持连

    2024年02月07日
    浏览(41)
  • 一个现代化轻量级的跨平台Redis桌面客户端

    大家好,我是 Java陈序员 。 Redis 作为一款高性能的非关系型数据库,可是深受开发者的喜爱,无论是什么开发,都能看到 Redis 的身影。 今天,给大家介绍一款跨平台的 Redis 客户端连接工具,功能强大,界面美观! 关注微信公众号:【Java陈序员】,获取开源项目分享、AI副

    2024年04月08日
    浏览(93)
  • SSH客户端连接远程服务器

    目录 一、什么是客户端连接远程服务器 二、什么是服务端连接远程服务器 三、查看网络信息 1、图形程序查看网络信息 2、命令查看网络信息 四、SSH客户端(Linux) 五、SSH客户端(windows) 六、SSH远程服务器 发起连接的一方,计算机或设备(称为客户端)与另一个计算机或

    2024年02月16日
    浏览(65)
  • Config:客户端连接服务器访问远程

    springcloud-config: springcloud-config push    pom      

    2024年02月11日
    浏览(56)
  • 云备份客户端——客户端整体设计框架以及实用类工具实现

    客户端要实现的功能和服务端相比相对简单,客户端要实现的功能是 自动对指定文件中的文件进行备份,也就是定时对指定文件进行扫描,根据文件信息判断文件,符合要求(新文件或者被修改过的文件)进行上传 因此我们客户端大概需要实现下面三个模块 数据管理模块:

    2024年02月09日
    浏览(55)
  • C# 客户端程序 Visual Studio 远程调试方法

    传统桌面客户端的远程调试相比 UWP , ASP 等项目来说,配置比较麻烦,因为它是非部署的应用程序,原理是复制编译的文件到远程计算机,通过网络来连接和 VS 的通信,本文主要讲述 WPF , WinForm 应用程序的远程调试。 下载适合 Visual Studio 版本的最新远程工具。 最新的远程工

    2024年02月08日
    浏览(54)
  • elasticsearch 客户端工具ESClientRHL

    elasticsearch 客户端工具Elasticsearch-ESClientRHL Elasticsearch-ESClientRHL: EsClientRHL是一个可基于springboot的elasticsearch 客户端调用封装工具,通过elasticsearch官网推荐的RestHighLevelClient实现,内置了es索引结构工具、es索引数据增删改工具、es查询工具、es数据分析工具或者es用法脚手架,能够

    2024年02月15日
    浏览(37)
  • 客户端负载均衡工具Ribbon

    Ribbon介绍 目前主流的负载方案分为以下两种: 集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如 Nginx)。 客户端根据自己的请求情况做负载均衡,Ribbon 就属于客户端自己做负载均衡。 Spring Cloud Ribbon是基于

    2024年02月09日
    浏览(44)
  • 做个小工具-WebSocket客户端

    由于工作的原因经常需要用到一些socket,串口等调试工具,但是好多工具要么只有其中几个或者各种收费,不断提醒捐助等。所以还是自己做一个吧。毕竟也不复杂。今天先做个WebSocket客户端。WebSocket使用了开源组件WatsonWebsocket。 先上图 View的代码 ViewModel的代码 servervice的代

    2024年02月15日
    浏览(36)
  • SpringCloud系列篇:核心组件之声明式HTTP客户端组件【远程消费】

    接下来看看由辉辉所写的关于SpringCloud的相关操作吧 目录 🥳🥳Welcome Huihui\\\'s Code World ! !🥳🥳 一. 远程消费组件是什么 二. 远程消费组件的详解 场景模拟 代码实操 1.生产者 2.消费者 3.复杂参数的处理 DTO 属性赋值          声明式HTTP客户端组件是一种用于简化HTTP请求的

    2024年02月02日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包