Windows RDP那些事儿
前言
正文
连接记录
当前用户的的RDP
连接记录保存在注册表的一下位置:
HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers
可以通过以下powershell
命令查看当前用户的所有连接记录地址
dir "Registry::HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" -Name
也可以在cmd
中执行:
powershell -Command "&{dir 'Registry::HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers' -Name}"
通过powershell
查看指定地址的连接用户名
(Get-ItemProperty -Path "Registry::HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\192.168.0.30").UsernameHint
也可以使用ps1
脚本进行遍历:
$RegPath = "Registry::HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\"$QueryPath = dir $RegPath -Nameforeach($Name in $QueryPath){ Try { $User = (Get-ItemProperty -Path $RegPath$Name -ErrorAction Stop | Out-Null).UsernameHint Write-Host "Server:"$Name Write-Host "User:"$User"`n" } Catch { Write-Host "No RDP Connections History" }}
所有脚本:https://github.com/3gstudent/List-RDP-Connections-History
凭据
查看 Windows
凭据: 使用 win + s
调出搜索框,输入 凭据管理器
,选择 windows凭据
凭据默认是保存在磁盘的一下位置:
C:\Users\<用户名>\AppData\Local\Microsoft\Credentials
图示显示目录下不存在文件,是因为文件被隐藏了,我们使用dir /a
查看一下.
当然,我们也可以通过cmd
查看当前主机上保存的连接凭据
cmdkey /list
dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
不过可以看到凭据是加密了的,
我们尝试使用 Mimikatz
导出远程桌面的凭据.
RDP 劫持
原理:
系统管理员和用户通常可以通过 RDP 远程桌面登录指定服务器 3389 远程桌面,而攻击者可以通过可以特权提升至 SYSTEM 权限的用户,可以在不知道其他用户登录凭据的情况下,用来劫持其他用户的 RDP 会话,该漏洞在 2017 年由以色列安全研究员 Alexander Korznikov 在个人博客中披露。利用条件只需要获取机器 SYSTEM 权限执行 tscon 命令。
在Windows
系统中,如果多用户同时登录,则会产生多个会话.
我们可以通过以下命令查看当前系统存在的登录会话(有哪些用户在线)
query user
假设存在以下结果:
在知道用户buuny
密码的情况下,可以使用 tscon
进行登录用户切换:
tscon 2 /PASSWORD:Bunny2021
tscon 命令提供了一个切换用户会话的功能,并且,在正常情况下,切换会话时需要提供目标用户的登录密码。但这并不能完全确保会话安全,攻击者通过特殊的利用方法完全能够绕过验证,不输入密码即可切换到目标会话,从而实现目标用户的未授权登录。
而这里所讲的特殊的利用方法便是在 SYSTEM 权限下直接执行 tscon 会话切换命令:
特别注意的是,即使远程连接的用户关闭了远程连接窗口,也不会劫持该回话,只是在后台显示 “已断开连接”(Disconnected):
此时,仍能在 SYSTEM 权限下通过
tscon
实现未授权连接
当我们拥有system
权限后,直接使用以下命令,就能直接切换了登陆了.
tscon 2
参考
https://cloud.tencent.com/developer/article/1861370