跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

渗透提示——从远程桌面客户端提取明文凭据


RenX6

推荐的帖子

0x00 前言

之前的文章《渗透技巧——获得Windows系统的远程桌面连接历史记录》介绍了获取远程桌面连接历史的方法。

在实际渗透过程中,如果发现了远程桌面连接的历史,那么下一步就是想办法获取远程桌面连接使用的密码。

本文将结合RdpThief介绍从远程桌面客户端提取明文凭证的方法,并分享需要注意的细节。

RdpThief的地址:

https://github.com/0x09AL/RdpThief

0x01 简介

本文将介绍以下内容:

获取远程桌面连接密码的思考

底特律图书馆hook系统API的使用方法

API监控器监控系统API调用的方法

使用RdpThief从远程桌面客户端提取明文凭据。

0x02 获取远程桌面连接口令的思路

通常有以下两种:

1.使用键盘记录器记录用户在mstsc.exe启动期间输入的密码。

2.当mstsc.exe启动时,读取mstsc.exe的内存数据,提取用户输入的密码。

RdpThief是第二种实现思想。它利用Detours库的hook系统API和API monitor来监控系统的API调用,找到mstsc.exe在内存中存储明文密码的位置。代码简洁有效。

0x03 使用Detours库hook系统API的方法

RdpThief在实现中使用了Detours库来挂接系统API,这里简单介绍一下Detours库的用法。

Detours库用于监控和检测Windows上的API调用,可以用来挂接系统API。

介绍了使用Detours库hook API的两种方法。

1.编译Detours源码并使用

(1)编译Detours源码

从以下地址下载Detours源代码:

https://github.com/Microsoft/Detours

使用Visual Studio编译Detours源代码(这里以VS2015为例),需要区分32位和64位。

64位编译:

打开VS2015 x64本机工具命令提示符。

执行以下命令:

cd绕路-主\src

nmake

命令执行后,文件夹Detours-master下会生成以下三个文件夹,包括底特律的头文件和库文件。

斌。X64

包括

lib。X64

32位编译:

打开VS2015本机工具命令提示符。

执行以下命令:

cd弯路-主\src

nmake

命令执行后,文件夹Detours-master下会生成以下三个文件夹,包括底特律的头文件和库文件。

斌。X86

包括

lib。X86

(2)导入Detours

在新的C项目中添加相应版本的头文件:

绕路h

detours.lib

代码如下:

#包含“detours.h”

#pragma注释(lib,' detours.lib ')

2.通过Install-Package自动安装

(1)安装

在Visual Studio中选择工具-获取包管理器-包管理器控制台。

输入安装命令:

安装包绕道

Detours库将被自动安装,如下图所示。

1-1.png

(2)导入Detours

代码如下:

#包括

#pragma注释(lib,' detours.lib ')

使用Detours库的hook系统API时常用的几个函数:

DetourTransactionBegin();

DetourUpdateThread(GetCurrentThread());

detour tach();

detour detach();

DetourTransactionCommit()

钩子系统API Messagebox()的示例代码如下:

#包括

#包括

#pragma注释(lib,' detours.lib ')

static int(WINAPI * true MessageBox)(HWND,LPCTSTR,LPCTSTR,UINT)=MessageBox;

int WINAPI OurMessageBox(HWND HWND,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType) {

返回TrueMessageBox(NULL,L'Hooked ',lpCaption,0);

}

int main()

{

DetourTransactionBegin();

DetourUpdateThread(GetCurrentThread());

detour tach((PVOID)true messagebox,our messagebox);

DetourTransactionCommit();

MessageBox(NULL,L'Hello ',L'Hello ',0);

DetourTransactionBegin();

DetourUpdateThread(GetCurrentThread());

detour detach((PVOID)true messagebox,our messagebox);

DetourTransactionCommit();

}

0x04 使用API monitor监控系统API调用的方法

RdpThief使用API monitor来监控系统的API调用,并找到mstsc.exe在内存中存储明文密码的位置。下面简单介绍一下API monitor的用法。

API的下载地址:

http://www.rohitab.com/downloads

运行后,需要选择要监控的模块,如下图所示。

1-2.png

然后选择要监控的流程,如下图所示

1-3.png

API会在流程运行时监控流程调用的API,如下图所示。

1-4.png

0x05 RdpThief测试

介绍RdpThief详细信息的文章:

https://www . MD sec . co . uk/2019/11/rdpthief-extracting-clear-text-credentials-from-remote-desktop-clients/

RdpThief的代码包括三个部分:

1.C++工程,编译生成dll

生成的dll需要注入到mstsc.exe进程中

在这里,您可以使用我之前编写的dll注入的代码。地址如下:

https://github . com/3g student/home-of-C-Language/blob/master/NtCreateThreadEx+ldrloaddll . CPP

但是,需要移除FreeDll()的函数,并且Dll需要一直在进程mstsc.exe的内存中记录用户输入的密码。

2.RdpThief_x64.tmp

Shellcode格式dll,作者使用sRDI将编译后的dll转换成shellcode格式,方便cna脚本调用。

3.RdpThief.cna

Colbalt Strike使用的cna脚本,用于以外壳代码格式注入dll

支持三个命令:

Rdpthief_enable,每5秒搜索一次mstsc.exe,注入dll

Rdpthief_disable,停止rdpthief_enable,但不卸载注入的dll。

Rdpthief_dump,显示捕获的凭证。默认读取路径是% %temp%\data.bin

实际测试

预期功能:

在mstsc.exe中输入用户名和密码后,无论是否正确,都会记录在文件% %temp%\data.bin中

1.Win10下没有问题

2.在Win7下,可以得到输入的用户名和密码,但是不能得到服务器名。

查找问题原因:

在实现中,RdpThief通过捕获API SspiPrepareForCredRead()来获取服务器名称

在Win7系统下,我用API monitor监控系统调用的API,发现这个API不存在,如下图。

2-1.png

找到问题的原因。

解决方法1:

通过搜索发现API CredReadW()可以记录服务器名,如下图所示

2-2.png

所以可以试试hook API CredReadW。示例代码如下:

static BOOL(WINAPI * OriginalCredReadW)(LPCWSTR target name,DWORD Type,DWORD Flags,PCREDENTIALW * Credential)=CredReadW;

BOOL HookedCredReadW(LPCWSTR目标名称,DWORD类型,DWORD标志,PCREDENTIALW *凭据)

{

lpServer=TargetName

返回OriginalCredReadW(目标名称、类型、标志、凭据);

}

添加附着和分离代码:

detour tach((PV oid)OriginalCredReadW,HookedCredReadW);

detour detach((PV oid)OriginalCredReadW,HookedCredReadW);

解决方法2:

远程桌面建立连接后,远程桌面连接的记录将保存在注册表中。这里,可以通过读取远程桌面连接的历史来获得服务器名称。

使用的脚本地址:

https://github . com/3g student/List-RDP-Connections-History/blob/master/List logged-in users . PS1

0x06 小结

介绍了利用Detours库的hook系统API和API monitor监控系统API调用的方法,测试了RdpThief,分享了在Win7中使用时获取服务器名称的方法,实现了远程桌面客户端明文凭证的提取。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...