【红队】dump RDP凭据

news/2024/12/24 11:30:59/文章来源:https://www.cnblogs.com/o-O-oO/p/18531363

免责声明:

由于传播、利用本公众号文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责

管理员通常使用远程桌面协议 (RDP) 来远程管理 Windows 环境。在充当跳板机以使用户能够访问其他网络的系统中启用它也是典型的 RDP。然而,虽然这个协议在大多数时候被广泛使用,但是其没有被安全监控或者使用时采用安全措施。

从红队的角度来看,如果已目标机器上存储域管理员帐户的凭据,那么来自 lsass 进程的dump凭据可能会导致在网络上横向移动或直接导致整个域泄露。与 RDP 协议关联的进程也可能在红队的范围内,以收集凭据。
这些进程是:

SVChost.exe
MSTSC.exe

可以将上述进程作为检索凭据的替代方法,这时候无需使用lsass,lsass通常被EDR产品严格监视。

SVChost

svchost.exe是微软Windows操作系统中的系统文件,微软官方对它的解释是:svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。许多服务通过注入到该程序中启动,所以会有多个该文件的进程。简单来说就是可以托管多个服务以防止资源消耗。当用户通过 RDP 连接进行身份验证时,终端服务由 svchost 进程托管。根据Windows身份验证机制的工作方式,凭据根据Jonas的发现以纯文本形式存储在svchost进程的内存中。但是,查看进程列表,有多个 svchost 进程,因此可以通过执行以下命令之一来识别哪个进程、主机终端服务连接。

查询终端服务:

sc queryex termservice

查询哪个任务加载了 rdpcorets.dll:

tasklist /M:rdpcorets.dll

查看网络连接状态:

netstat -nob | Select-String TermService -Context 1

此命令需要powershell运行,不然会报错。

查看进程的内存字符串,密码显示在用户名下方。

来自 Sysinternals 的进程dump工具也可用于通过指定 PID 和.dmp文件将写入的目录来dump内存。

procdump64.exe -ma 988 -accepteula C:\Users\pentestlab

.dmp文件可以进行离线分析。执行简单的 grep 将检索存储在内存文件中的密码。

strings -el svchost* | grep Password123 -C3

上述方法并不完全可靠。但是,Mimikatz 支持通过执行以下命令从现有 RDP 连接检索凭据:

privilege::debug
ts::logonpasswords

MSTSC

mstsc.exe 进程是在用户打开远程桌面连接应用程序以便通过 RDP 协议连接到其他系统时创建的。API hooking可用于拦截用户提供的凭据并将其用于横向移动。Rio Sherri开发了一个名为RdpThief的概念验证工具,该工具试图hooking mstsc process(CredIsMarshaledCredentialW和CryptProtectMemory)使用的函数,以便检索凭据并将其写入磁盘上的文件。
至于该工具的具体使用可以查看一下链接:

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

工具下载地址如下:

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

从mstsc.exe 正在运行的系统需要将 DLL 注入到进程中。

SimpleInjector.exe mstsc.exe RdpThief.dll

用户输入用于向目标主机进行身份验证的凭据后,这些凭据将被捕获并写入 C:\temp 文件夹上的文件中。

文件还将包括 IP 地址。此信息可用于在网络中横向移动,甚至在使用提升的帐户时提升权限。

该工具已由Josh Magri用C#重写。然而,与RdpThief相比,SharpRDPThief使用IPC服务器来接收来自mstsc.exe进程的凭据。如果 mstsc.exe 终止,服务器将继续运行,当进程再次启动时,将尝试执行挂钩。这消除了RdpThief的限制,即该过程应该已经存在。

SharpRDPThief工具下载地址:

https://github.com/passthehashbrowns/SharpRDPThief

RDP文件

通过 RDP 连接对特定主机进行多次身份验证的用户可能会保存连接详细信息以进行快速身份验证。这些凭据通过使用数据保护 API 以加密形式存储在 Windows 的凭据管理器中。

Windows 凭据在磁盘上的位置如下:

C:\Users\username\AppData\Local\Microsoft\Credentials

该文件可以通过Mimikatz二进制文件查看:

dpapi::cred /in:C:\Users\pentestlab\AppData\Local\Microsoft\Credentials\ACC240EEE479C1B634EC496F9838074B

“pbData”字段包含加密形式的信息。但是,用于解密的主密钥存储在 lsass 中,可以通过执行以下 Mimikatz 模块来检索。“guidMasterKey”也很重要,因为在查询 lsass 时可能存在多个条目,并且需要将 GUID 与主密钥匹配。

sekurlsa::dpapi

使用主密钥开关再次执行 dpapi::cred 模块将因此解密内容和 RDP 凭据以纯文本形式披露。

dpapi::cred /in:C:\Users\pentestlab\AppData\Local\Microsoft\Credentials\ACC240EEE479C1B634EC496F9838074B
/masterkey:05d8e693421698148d8a4692f27263201f1c65e0b3ac08e3be91ea75f43e71e9b398e2418ba0f0c62ea70a317bdba88f11da3adebd07d65d2b349f933eab85e1

执行以下命令将提供这些凭据所属服务器的详细信息。

vault::list

参考🔗

https://www.mdsec.co.uk/2019/11/rdpthief-extracting-clear-text-credentials-from-remote-desktop-clients/
https://www.n00py.io/2021/05/dumping-plaintext-rdp-credentials-from-svchost-exe/
https://github.com/0x09AL/RdpThief
https://github.com/mantvydasb/RdpThief
https://github.com/passthehashbrowns/SharpRDPThief
https://www.ired.team/offensive-security/code-injection-process-injection/api-monitoring-and-hooking-for-offensive-tooling
https://labs.f-secure.com/blog/attack-detection-fundamentals-2021-windows-lab-3/

文章来源

https://pentestlab.blog/page/19/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/827965.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【免杀】DLL 侧载

一、什么是 DLL?二、什么是 DLL 劫持?三、DLL 路径搜索顺序四、DLL 劫持原理五、DLL Sideloading六、什么是 DLL 代理?七、执行 DLL 代理八、武器化 DLL 代理案例1:Teams案例2:Obsidian九、结论原创 独眼情报哎,犯病了,又整这种没人看的技术长文!但是看到很好的技术文章…

【web应用】中间件汇总

原创 boo 学而嘉一、HTTP服务 1.Apache HTTP Server主要用于静态内容服务 最新版本 2.4.592.Nginx主要用于静态内容服务和代理服务器 最新版本1.26.2主要功能: 1.HTTP 服务器(动静分离)nginx + tomcat中,可以将动态资源交给tomcat,而静态资源则交给Nginx,这样可以减轻tom…

c++中的try-catch及throw

C++ 使用 try-catch 语句来捕获和处理异常。try 块包含可能发生错误的代码,而 catch 块则用来捕获并处理错误。 try-catch 语句的基本结构 try {// 可能抛出异常的代码 } catch (exception_type1 e1) {// 处理异常类型 1 } catch (exception_type2 e2) {// 处理异常类型 2 } c…

【windows应用】windows系统怎么查看密钥

原创 L.w IT小农工大家都知道,安装Win10/11系统之后需要密钥才能使用所有的功能,网上提供的激活方法有很多,那我们要怎么知道自己的密钥呢? Windows 产品密钥是由 25 个字符组成的代码,用于激活 Windows。其格式如下所示: 产品密钥:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX 操作过…

【 js编程】原型和原型链

原创 mike Web全栈开发者驿站原型和原型链在 js中起着至关重要的作用。它们使得 js 能够以一种独特的方式实现面向对象编程,虽然与传统的面向对象编程语言有所不同,但却提供了很大的灵活性和强大的功能。然而,原型链也有一些缺点,如属性查找的性能问题、继承的脆弱性以及隐…

全网最适合入门的面向对象编程教程:58 Python字符串与序列化-序列化Web对象的定义与实现

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML\YAML\JSON格式这种序列化Web对象。这种序列化Web对象容易与其他程序设计语言交互,可读性强,容易被传递给其它系统或客户端。全网最适合入门的面向对象编程教程:58 Python 字符串与序列化-序…

开源低代码平台-Microi吾码-源码本地运行-后端

开源低代码平台-Microi吾码-简介技术框架:.NET8 + Redis + MySql/SqlServer/Oracle + Vue2/3 + Element-UI/Element-Plus 平台始于2014年(基于Avalon.js),2018年使用Vue重构,于2024年10月29日开源 试用地址:https://microi.net Gitee开源地址:https://gitee.com/ITdos/m…

CAPL基础

CAPL基础 1.CAPL如何生效 CAPL通过在Simulation Setup窗口设置CAPL节点,并加载对应的CAPL文件使CAPL生效。 2.Event驱动 CAPL语言的运行逻辑是事件触发,当满足条件时执行对应的代码 如下图所示有启动触发、停止触发、发送报文触发、定时器触发和按键触发等3.报文发送 1.自定义…

开源 - Ideal库 - 常用时间转换扩展方法(一)

分享《开源-Ideal库》系列文章,含公共、文档等库封装,首篇介绍时间转换封装,包括日期时间、时间戳与字符串间转换方法,后续上传至Nuget,测试代码已上传至代码库。从事软件开发这么多年,平时也积累了一些方便自己快速开发的帮助类,一直在想着以什么方式分享出来,因此有了…

excel排序

目录Excel成绩排名的两种方法方法一:先排序,再填排名 Excel成绩排名的两种方法 方法一:先排序,再填排名 具体步骤如下:先左键选中要排序的区域,如下图右键,然后选择排序->自定义排序选择要排序的区域(注意勾选数据包含标题)​ 数据包含标题的意思就是,上面的姓名、…

千锋Linux云计算-文件权限管理

掌握基本权限ugo的命令(chmod、chown),列举2条设置权限命令并解释每个单词含义。 掌握基本权限acl的命令(setfacl、getfacl),列举2条设置权限命令并解释每个单词含义。 了解特殊权限含义(suid、chattr、umask),列举2条设置权限命令并解释每个单词含义。1. 设置传统权…

静态路由规则配置

静态路由配置 本质上通过配置虚拟机实现不同网段之间进行通信 第一步:准备3台虚拟机第一台网卡配置NAT模式;第二台配置两个网卡,分别为配置NAT模式 + LAN区段;第三台配置LAN区段第二步:配置网卡相关信息先查看宿主机(物理机)VMnet8网卡的IP和子网掩码配置网卡相关信息【…