隐藏/虚拟 Windows 用户帐户列表

隐藏/虚拟 Windows 用户帐户列表

我正在尝试找到一种方法来获取 Windows 7 系统上用户帐户的完整列表,包括隐藏帐户。用户帐户对话框 ( >control userpasswords2) 仅显示普通用户帐户,甚至本地用户和组编辑器仅显示普通用户帐户和标准隐藏/禁用帐户,如管理员和访客。选择用户或组对话框有一个立即查找按钮,它将用户和组结合在一起,但是遗憾的是,它的内容与 LUG 相同。

我正在寻找一个更全面的列表,其中包括“超级隐藏”/虚拟用户帐户,如 TrustedInstaller(或更准确地说,NT 服务\TrustedInstaller—注意不同的“域”)。

我检查过了HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList,但是SpecialAccounts密钥不存在。

我还检查了HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList,虽然它确实列出了 SystemProfile、LocalService 和 NetworkService 帐户,但没有列出其他帐户(如 TrustedInstaller 及其同类帐户)。

TrustedInstaller 特别让人困惑,因为它是一个用户、一个服务和一个可执行文件。我使用它作为示例,因为它“超级隐蔽”,似乎没有列在任何类型的用户列表中。(作为一个实验,我尝试在整个注册表中搜索“trustedinstaller”,看看是否能找到一个将其列为用户的地方,但没有找到。)

明确地说,我正在寻找的是可以在用户输入字段(例如权限对话框或参数)中使用的所有帐户的列表runas

答案1

我认为没有一份包含所有可能账户的最终清单。

您可以在用户输入字段(例如权限对话框)中使用不同类型的名称。

首先是标准的 Win32_Accounts,要获取完整列表,请打开 PowerShell 会话并运行:

get-wmiobject -class "win32_account" -namespace "root\cimv2" | sort caption | format-table caption, __CLASS, FullName

这些是常见的用户、群组和内置帐户。

从 Vista 开始,出现了一种新的帐户类型,称为虚拟帐户,因为它们不会显示在通常的管理工具中。有时也被称为服务帐户,这类帐户至少有三种不同的类型:

  • Windows 服务帐户

从 Vista 开始,每个 Windows 服务都有一个与之关联的虚拟帐户,即使它在不同的用户帐户下运行,即使它根本没有运行。看起来NT Service\MSSQLSERVER

要获取这些列表,请使用:

get-service | foreach {Write-Host NT Service\$($_.Name)}
  • IIS 应用程序池

在 ApplicationPoolIdentity 下运行的每个 IIS 应用程序池都在一个名为IIS APPPOOL\NameOfThePool

假设您已经安装了 IIS 管理脚本工具,您可以运行:

Get-WebConfiguration system.applicationHost/applicationPools/* /* | where {$_.ProcessModel.identitytype -eq 'ApplicationPoolIdentity'} | foreach {Write-Host IIS APPPOOL\$($_.Name)}
  • Hyper-V 虚拟机

在 Server 2008+ 和 Windows 8+ 上,您有 Hyper-V,每个虚拟机都会创建自己的虚拟帐户,如下所示: NT VIRTUAL MACHINE\1043F032-2199-4DEA-8E69-72031FAA50C5

要获取列表,请使用:

get-vm | foreach {Write-Host NT VIRTUAL MACHINE\$($_.Id) - $($_.VMName)}

即使这些帐户在权限对话框中不被接受,您仍然可以使用它们和 icacls.exe 来设置权限。

还有一个特殊组NT Virtual Machine\Virtual Machines,它不会在其他地方显示。所有虚拟机帐户都是此组的成员,因此您可以使用它来设置所有 VM 文件的权限。

这些名称是特定于语言的,例如在德语中它被命名为NT Virtual Machine\Virtuelle Computer

  • 桌面窗口管理器

dvm.exe 进程(桌面窗口管理器)在用户下运行Windows Manager\DWM-1

同样,您不能在权限对话框中使用此类用户。实际上也不可能枚举这些用户,因为每个“桌面会话”都有一个,因此当使用两个 RDP 会话时,除了 之外,您还拥有DWM-2和。因此,可用的桌面数量与桌面数量一样多。DWM-3DVM-1

  • 计算机名称

在某些情况下,您还可以在权限对话框中使用计算机名称,通常是作为 Active Directory 域的一部分。

  • Windows Remoting 虚拟用户

当使用 PowerShell 和“JEA(足够的管理)”并通过 PS 远程会话连接到服务器时,可能会创建一个临时虚拟用户。

它们的格式如下:

winrm virtual users\winrm va_x_computername_username

以及以以下格式开头的 SIDS-1-5-94-

‘x’ 是一个整数。

这些帐户可以在分配 NTFS 权限时使用,但我不知道如何列出所有这些可能的虚拟用户。

在 JEA 会话中,您可以使用它whoami来找出当前帐户名称。

  • 最后:

即使这些列表也没有提供所有可能的帐户。

例如,您可以创建一个应用程序池FooBarPool,然后再次删除它,您仍然可以IIS APPPOOL\FooBarPool在权限对话框中使用,因此某处必须有一个内部列表。

答案2

这是因为 TrustedInstaller 是一种服务,而不是“用户”对象。在 Vista 中,服务现在是安全主体,可以分配权限。

http://technet.microsoft.com/en-us/magazine/2007.06.acl.aspx

答案3

  1. 转到硬盘上的任何文件,右键单击,然后选择属性。
  2. 转到安全选项卡并单击Edit

    编辑安全设置

  3. 点击Add...
  4. 点击Advanced...

    选择用户或组

  5. 点击Object Types...并取消选中Groups,然后点击OK

    对象类型

  6. 点击Find Now。这将列出所有常规用户和内置系统用户(Windows 称之为“内置安全原则”)。

    立即查找

请注意全部此页面上显示的帐户可以在 Run-As 命令中使用,但它们都可以在权限对话框中使用。

答案4

您可以使用 NetQueryDisplayInformation API,结合对用户信息标志的按位检查。我有完全相同的需求,所以我编写了一个示例代码(从 MSDN GROUP 查询修改而来)。

我使用的用户标志是 UF_NORMAL_ACCOUNT UF_ACCOUNTDISABLE UF_PASSWD_NOTREQD ---> 这确保我们获得人类账户,人类账户始终需要密码。

工作代码位于:http://www.cceye.com/list-system-normal-user-account-only/

相关内容