远程识别当前加载的用户注册表分支

远程识别当前加载的用户注册表分支

我知道这HKCU参考HKU\<SID>当前登录用户的。

如何确定当前实例引用了哪个用户配置文件HKCU 我可以从远程命令提示符确定这一点吗?

我需要修改远程 Windows 7 Pro PC 上当前登录用户HKCU注册表分支中的设置。遗憾的是,我无法使用 中的远程注册表功能进行连接regedit.exe。我可以通过以下方式访问远程命令提示符执行命令

答案1

确定当前登录用户的用户详细信息(包括 SID)的简单部分是查找域和用户名。这可以通过在命令行中发出 wmic 查询来实现:

wmic /node:<remotepc> computersystem get username

其中 <远程计算机> 是要处理的计算机名称或 IP 地址。此命令以以下形式返回输出

<domain>\<username>

其中 <领域> 是计算机名称或 AD 域。获得该信息后,我们就可以继续确定该用户的 SID。

如果用户帐户是计算机本地的,那么可以通过 wmic 再次读取他的 SID,方法是发出以下命令:

wmic /node:<remotepc> useraccount where 'name = "<username>"' get name, sid

其中 <用户名> 在上一步中确定;

替代方法是使用远程注册表查询,如下所示:

reg query \\<remotepc>\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData\1 /v LoggedOnUserSID

再次,<远程计算机> 是目标计算机的计算机名或 IP 地址。可以通过检查注册表项的返回值来验证这确实是登录用户的 SID:

reg query \\<remotepc>\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData\1 /v LoggedOnUser

它应该与第一个的输出相匹配西米克查询。这是最简单的情况。

更困难的情况是,当登录用户不是本地帐户,而是 AD 帐户时。那么域用户的 SID 就无法通过wmic 用户帐户查询,因此无法与wmic 计算机系统 用户名询问。

用户名和域信息保存在两个系统环境变量 %USERDOMAIN% 和 %USERNAME% 中,幸运的是,它们也镜像在以下注册表项下:

HKEY_USERS\<SID>\Volatile Environment

这一事实使我们有机会确定当前登录域用户的 SID。通过在远程计算机上发出注册表查询:

reg query "\\<remotepc>\HKEY_USERS" /s /c /k /e /f "Volatile Environment"

从此命令的输出中,我们可以提取当前登录用户的 SID,可以通过将该键下的 USERDOMAIN 和 USERNAME 值与第一个进行匹配来验证wmic 计算机系统查询获得<领域>\<用户名>,因此 HKEY_USERS 分支相当于 HKEY_CURRENT_USER 注册表配置单元别名。

此解决方案适用于各种版本的 Windows(包括 7 和 10),并且仅使用命令行界面中可用的工具。但必须注意,要使远程查询(wmic 和 reg)正常工作,必须在本地和远程计算机上存在且等效的管理帐户上下文中运行它们。

答案2

我看到的问题是,不仅有一个 HKCU,而且每个登录系统的用户(包括服务帐户)都有一个 HKCU。

可以访问psexec,如果你手头也有handle.exe(也可以从 sysinternals 获取),你可以尝试

handle .log1

显示log与打开的配置单元.dat文件关联的文件。了解.dat,下面的键

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist

应该指向被搜索的 sid

答案3

以下是我的建议:两种方法如何在本地计算机XP 和 Win7。已添加用户名从不同来源进行验证。

剧本的运作方式:关键思想来自于以下认知:

#1。 这用户配置文件配置单元HKEY_CURRENT_USER,缩写HKCU)在用户登录计算机后安装到注册表中,并且HKCU是注册表项的唯一名称(别名)HKEY_USERS\<SID>,其中<SID>缩写安全标识符 (SID)对于用户帐户

#2。可以看到当前以任何名称挂载的所有注册表配置单元的列表,这些列表是以下注册表项中的值。此处的值名称确定内部注册表路径(并包含<SID>下的子路径HKEY_USERS),值数据是配置单元支持文件的路径(当前用户的支持文件始终为ntuser.dat): HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist

#3. 通信用户名<SID>可以通过 找到WMIC

#3a。(老实说,也有一个注册表项,但目前脚本中省略了该项:推测为去做HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

简短的程序描述:脚本根据公理在上述三个源之间寻找匹配项#1#3,始终针对hivelist密钥中的项目(参见#2

脚本输出的样子匹配条件

第 0 章. HKLM...\Winlogon 默认值。无寻找。仅回显%USERNAME%以下注册表项中的环境变量和一些用户相关值: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

第1章 -.wmic SID => HKLM...\hivelist. 寻找每一个SID来自WMIC查询(#3) 匹配值名称#2

第2章 -.HKU SID => HKLM...\hivelist. 寻找每一个SIDHKEY_USERS\<SID>#1) 匹配值名称#2. 给出假阳性匹配<SID>_Classes

第3章 -. %用户名% => HKLM...\hivelist. 寻找%USERNAME%匹配的值数据#2。可以更新以搜索每个用户名#3,但匹配SID被认为更可靠。

第 4 章. 配置文件列表 SID => HKLM…\hivelist (去做):寻找每一个SIDProfileList注册表项 (#3a) 匹配值名称#2

@ECHO OFF >NUL
@rem SETLOCAL enableextensions enabledelayedexpansion
@echo .
@echo . HKLM^\...^\Winlogon defaults:
@echo .
@echo        UserName     "%USERNAME%" ^(environment^)
call :regquery DefaultUserName "   "
call :regquery DefaultDomainName "                "
call :regquery AltDefaultUserName ""
call :regquery AltDefaultDomainName "             "

@echo .
@echo . wmic SID =^> HKLM^\...^\hivelist:
@echo .
@echo user "%USERNAME%" ^(environment^)
@wmic USERACCOUNT GET name, sid >getvmic.txt
if EXIST getvmic.txt (
  for /F "tokens=1,2" %%G in ('type getvmic.txt') do (
    for /F "tokens=1,2*" %%K in ('reg query ^"HKLM^\SYSTEM^\CurrentControlSet^\Control^\hivelist^" /v ^\REGISTRY^\USER^\%%H 2^>NUL ^| FIND /I "%%H"') do (
      if "%%M"=="" ( 
        @echo OFF >NUL
    ) else (
        for /F "tokens=4* delims=^\" %%P in ("%%M") do (
        @echo user "%%G" ^(wmic^)
        @echo user "%%P" ^(hivelist^)
        @echo SID  "%%H" ^(wmic^) 
        for /F "tokens=3* delims=^\" %%S in ( "%%K") do @echo SID  "%%S" ^(hivelist^)
) )
      for /F "tokens=1,2* delims=^\" %%P in ('reg query ^"HKU^" 2^>NUL ^| FIND /I "%%H"') do (
        If /I "%%Q"=="%%H" @echo SID  "%%Q" ^(HKU^)
) ) ) )

@echo .
@echo . HKU SID =^> HKLM^\...^\hivelist:
@echo .
  for /F "tokens=1,2* delims=^\" %%G in ('reg query ^"HKU^" 2^>NUL') do (
    for /F "tokens=1,2*" %%K in ('reg query ^"HKLM^\SYSTEM^\CurrentControlSet^\Control^\hivelist^" /v ^\REGISTRY^\USER^\%%H 2^>NUL ^| FIND /I "%%H"') do (
      if "%%M"=="" ( 
        @echo OFF >NUL
      ) else (
        for /F "tokens=4* delims=^\" %%P in ("%%M") do (
        if "%%P"=="%USERNAME%" (
          @echo user "%USERNAME%" ^(environment^)
          @echo user "%%P" ^(hivelist^)
          if EXIST getvmic.txt (
            for /F "tokens=1,2" %%W in ('type getvmic.txt ^| FIND /I "%%P"') do (
              @echo user "%%W" ^(wmic^)
              if "%%X"=="%%H" @echo SID  "%%X" ^(wmic^)
          ) ) 
          @echo SID  "%%H" ^(HKU^)
          for /F "tokens=3* delims=^\" %%S in ( "%%K") do @echo SID  "%%S" ^(hivelist^) 
) ) ) ) ) 

@echo .
@echo . %%USERNAME%% =^> HKLM^\...^\hivelist:
@echo .
@echo user "%USERNAME%" ^(environment^)
for /F "tokens=*" %%K in ('reg query ^"HKLM^\SYSTEM^\CurrentControlSet^\Control^\hivelist^" 2^>NUL ^| FIND /I "%USERNAME%" ^| FIND /I "ntuser.dat"') do (
  for /F "tokens=1,3,7 delims=^\" %%L in ("%%K") do (
    @echo user "%%N" ^(hivelist^)
  for /F %%S in ("%%M") do (
    for /F "tokens=1,2* delims=^\" %%T in ('reg query ^"HKU^" 2^>NUL ^| FIND /I "%%S"') do (
      if /I "%%S"=="%%U" (
        if EXIST getvmic.txt (
          for /F "tokens=1,2" %%W in ('type getvmic.txt ^| FIND /I "%%U"') do (
            @echo user "%%W" ^(wmic^)
            @echo SID  "%%X" ^(wmic^)
        ) )
      @echo SID  "%%U" ^(HKU^)
) ) 
    @echo SID  "%%S" ^(hivelist^)
) ) )
goto :eof

:regquery
for /F "tokens=1,3*" %%S in ('reg query ^"HKLM^\SOFTWARE^\Microsoft^\Windows NT^\CurrentVersion^\Winlogon^" /v %1 2^>NUL ^| FIND /I "%1"') do (
@echo %%S %~2 "%%T" ^(Winlogon^)
)
exit /B

希望可以使用,尽管我不知道在哪个用户凭证psexec下运行。

相关内容