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系统的远程桌⾯连接历史记录,需要注意的是⽆法直接获得未登录⽤户的注册表配置信息(

以加载配置单元解决)。根据远程桌⾯连接历史记录,往往能定位出关键的服务器