2023年11月29日发(作者:)
获得Windows系统的远程桌⾯连接历史记录
转载:/tech/
渗透技巧—获得Windows系统的远程桌⾯连接历史记录
0x00 前⾔
在渗透测试中,远程桌⾯连接的历史记录不可忽视,根据历史记录往往能定位出关键的服务器。
前⼏天有⼀篇⽂章介绍了如何清除记录,那么这篇⽂章就来介绍⼀下如何导出历史记录。
清除记录的⽂章地址如下:
最开始的设想是通过枚举注册表就能够完成,但深⼊研究发现,想要获得所有⽤户的历史记录,需要逐个获得⽤户的⽂件,
通过注册表加载配置单元,导⼊⽤户配置信息,再进⾏枚举才能够实现。
0x01 简介
本⽂将要介绍以下内容:
获得历史记录的思路
导出登录⽤户的历史记录
导出所有⽤户的历史记录
两种⽅法的实现思路和脚本编写细节
0x02 获得远程桌⾯连接历史记录的思路
1、获得当前⽤户的历史记录:
枚举注册表键值
HKCU:SoftwareMicrosoftTerminal Server ClientServers
每个注册表项保存连接的服务器地址,其中的键值对应登录⽤户名
UsernameHint
如下图
2、获得已登录⽤户的历史记录:
已登录⽤户的注册表信息会同步保存在下,SID要对应每个⽤户的SID
HKEY_USERSSID
当前系统登录两个⽤户,分别有两个⼦项,如下图
注:
HKEY_USERS仅包含了缺省⽤户设置和登录⽤户的信息,在⽤户未登录时⽤户的设置是不可⽤的
打开⽤户的⽂件,路径为
C:Documents and Settings⽤户名
接着指定⼀个项名称,即可在HKEY_USERS下读取该⽤户的注册表配置信息,如下图
注:
删除该项需要通过卸载配置单元来清除
所以,想要获得所有⽤户的远程桌⾯连接历史记录,⾸先需要枚举注册表键值,对于未登录⽤户,需要加载对应的
HKEY_USERSSID
⽂件,再次枚举获得完整记录,最后卸载对应的注册表项
补充:
通过命令⾏实现加载配置单元的实例:
Reg load HKEY_USERSS-1-5-21-1170783345-3748964848-1387080272-1003 C:Documents and
通过命令⾏实现卸载配置单元的实例:
Reg unload HKEY_USERSS-1-5-21-1170783345-3748964848-1387080272-1003
0x03 powershell实现细节
1、获得当前⽤户的历史记录
$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”
}
2、获得已登录⽤户的历史记录
位置:
HKEY_USERSSIDSoftwareMicrosoftTerminal Server ClientServers
注:
SID对应每个⽤户的sid
⾸先需要枚举所有⽤户sid
powershell:
Get-WmiObject -Class Win32_UserAccount
wmi:
wmic /NAMESPACE:"rootCIMV2" PATH Win32_UserAccount GET /all /FORMAT:list
枚举⽤户名及其对应的SID:
$AllUser = Get-WmiObject -Class Win32_UserAccount
foreach($User in $AllUser)
{
Write-Host $":"$
/NAMESPACE:"rootCIMV2" PATH Win32_UserAccount GET /all /FORMAT:list
3、获得所有⽤户的历史记录
加载配置单元的⽂件位置:
"C:Documents and Settings⽤户名"
实现思路:
1. 获得每个⽤户对应的SID,拼接对应的注册表键值”Registry::HKEY_USERS”+$+”SoftwareMicrosoftTerminal Server
ClientServers”
2. 如果读取失败,代表此⽤户未登录,接着尝试加载配置单元
3. 拼接配置单元⽂件位置”C:Documents and Settings”+$+””
4. 配置单元对应的注册表项以该⽤户的sid命名
5. 枚举注册表获得历史记录
6. 卸载注册表项
注:
需要新启动⼀个进程来卸载配置单元,否则提⽰失败
为了避免使⽤多个try catch捕获异常,代码结构作了改变,使⽤If Else作判断,完整实现代码可参考:
测试结果如下图
0x04 ⼩结
本⽂介绍了如何通过powershell获得Windows系统的远程桌⾯连接历史记录,需要注意的是⽆法直接获得未登录⽤户的注册表配置信息(可
以加载配置单元解决)。根据远程桌⾯连接历史记录,往往能定位出关键的服务器


发布评论