在内网渗透过程中常常会碰到当前跳板机有 RDP 的连接记录,有些管理员会勾选保存密码,这个时候就可以通过 mimikatz 来获取明文凭证;但有些管理员就不会勾选保存密码,这个时候我们如何获取到 RDP 的连接凭证?

SharpRDPThief

SharpRDPThiefRDPThiefC# 实现。它使用 EasyHook 将一个 DLL 注入 mstsc.exe,然后它会挂钩 CryptProtectMemory api 调用。hook 将从传递给 CryptProtectMemory 的地址中获取密码,然后通过 EasyHookIPC 服务器将其发送到主进程。
目前这只是概念实现的证明,需要 RDPHook.dllSharpRDPThief.exe 位于同一目录中。

此时如果客户端使用了 mstsc 并输入了 userpass

SharpRDPThief 就会把 RDPhook.dll 注入到 mstsc 进程从而获取到 userpass

RdpThief

RdpThief 本身是一个独立的 DLL,当它被注入到 mstsc.exe 进程中时,将执行 API 挂钩,提取明文凭据并将它们保存到文件中。
当在 Cobalt Strike 上加载 aggressor 脚本时,三个新命令将可用:

1
2
3
rdpthief_enable – 启用新 mstsc.exe 进程的心跳检查并注入它们。
rdpthief_disable – 禁用新 mstsc.exe 的心跳检查,但不会卸载已加载的 DLL。
rdpthief_dump – 打印提取的凭据(如果有就会打印出来)


可能是我 CS 版本问题,把 rdpthief_dump 的结果复制到文本就能看到 ipuserpass 了:

它实际把凭据保存到了 %temp%\data.bin 文件里:

参考文章

https://www.mdsec.co.uk/2019/11/rdpthief-extracting-clear-text-credentials-from-remote-desktop-clients/
https://github.com/0x09AL/RdpThief
https://github.com/passthehashbrowns/SharpRDPThief

公众号

若有好的建议和合作可以通过公众号与我联系!
微信公众号:渗透攻击红队