应用场景
当我们拿到某台机器时就可以用以下几个工具来窃取管理员使用mstsc.exe远程连接其他机器时所输入的RDP用户密码等信息,其原理是将特定的恶意dll注入到mstsc.exe实现窃取RDP凭据;实战中我们还可以通过观察和分析窃取到的RDP凭据是否存在规律、通用性的可能,如果存在则可以生成一个高效字典来对内网其他机器进行爆破......等等场景。
RdpThief
RdpThief本身是一个独立的DLL,当注入mstsc.exe进程时,将执行API挂钩、提取明文凭据并将其保存到文件中。
作者写了个CNA脚本,可以监视新进程并将shellcode注入mstsc.exe,启用后RdpThief将每5秒获取一次进程列表,搜索mstsc.exe并注入到其中,DLL已使用sRDI项目转换为shellcode。
`https://github.com/0x09AL/RdpThief``https://github.com/monoxgas/sRDI`
CobaltStrike加载RdpThief.cna脚本会提供三个新命令,只需要先执行rdpthief_enable命令启用即可,当目标主机进程列表中有mstsc.exe进程时将注入shellcode。
`rdpthief_enable //启用新的mstsc.exe进程心跳检查(5s),找到将注入shellcode``rdpthief_disable //禁用新的mstsc.exe进程心跳检查(5s),但不会卸载已加载的DLL``rdpthief_dump //打印提取的凭据(如果有)`
这时如果管理员在这台机器上使用mstsc.exe连接另一台机器,只要输入用户、密码就能窃取到RDP凭据。
rdpthief_dump命令提取窃取到的RDP凭据,无论输入用户密码是否正确,都会记录在%temp%\data.bin文件中,RdpThief.cna脚本也是读取的这个文件。
RdpThief使用detours库开发,通过挂钩以下几个API从RDP客户端提取明文凭据,可以使用API Monitor工具监控mstsc.exe进程在登录过程中调用了哪些API?
`https://github.com/microsoft/Detours``http://www.rohitab.com/apimonitor`
`CredReadW --> ServerIP``SspiPrepareForCredRead --> ServerIP``CredIsMarshaledCredentialW --> Username``CryptProtectMemory --> Password`
**注:**Win7的mstsc.exe没有调用SspiPrepareForCredRead(获取不到IP),可以改用CredReadW,@江南小虫虫师傅已基于RdpThief改了一个,且修复可能出现的编码问题。
https://github.com/fengwenhua/RdpThief
而且在测试中发现目标必须为网络级别身份验证CredIsMarshaledCredentialW、CryptProtectMemory才能获取到RDP凭据,否则可能获取到的是null,无法正常窃取到RDP凭据。
SharpHook
SharpHook的灵感来自SharpRDPThief项目,这两都是C#写的,使用EasyHook将DLL注入到mstsc.exe中,然后该DLL将挂钩CryptProtectMemory API调用,该钩子将从传递给CryptProtectMemory的地址中抓取密码,最后通过EasyHook的IPC服务器将其发送到主进程。
`https://github.com/IlanKalendarov/SharpHook``https://github.com/passthehashbrowns/SharpRDPThief`
他们在执行过程中都会在%temp%
临时目录生成一个Costura文件夹释放相关文件,记得清理一下痕迹。
SharpHook目前仅支持mstsc、runas、powershell等进程下窃取凭据,其他的还未完成或有BUG,可以改用python写的PyHook,支持在以下进程中窃取凭据,使用frida将其依赖项注入目标进程。
https://github.com/IlanKalendarov/PyHook
RDPCredentialStealer
RDPCredentialStealer使用C++中的API Hooking和Detours窃取RDP中用户提供的凭据,注入的dll文件和用于保存凭据的txt文件都是写死的,可以自己在源代码中进行修改。
https://github.com/S12cybersecurity/RDPCredentialStealer
将这个项目下的APIHookInjectorBin.exe、RDPCredsStealerDLL.dll文件上传到C:\Users\Public\Music目录下,然后Win+R运行输入mstsc.exe打开一个RDP远程桌面连接。
接着在命令终端下执行APIHookInjectorBin.exe将RDPCredsStealerDLL.dll文件注入到mstsc.exe进程中,提示DLL Injected succesfully为注入成功,可用ProcessExplorer查看。
最后在RDP远程桌面连接输入用户、密码就会在C:\Users\Public\Music目录下生成一个RDPCreds.txt文件存储窃取到的RDP凭据,但是只有用户和密码,没有IP地址。
注意事项
这个工具不会循环检测mstsc.exe进程是否存在并自动注入dll,得先运行mstsc.exe后才能通过APIHookInjectorBin.exe注入dll,实战中可能不是很适用,甚至可以说是有些鸡肋,大家可以基于这个项目来进行二开,或者改用我个人比较推荐的RdpThief(比较贴近实战场景)。
参考文章
`https://mp.weixin.qq.com/s/ukKyGkIYiJIOvS0xbn9i4Q``https://fengwenhua.top/index.php/archives/79/`