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


44

我正在尝试找到一种方法来获取Windows 7系统上用户帐户的完整列表,包括隐藏的帐户。“ 用户帐户”对话框(>control userpasswords2)仅显示普通用户帐户,甚至“ 本地用户和组”编辑器也仅显示普通用户帐户以及标准的隐藏/禁用帐户,例如Administrator和Guest。“ 选择用户或组”对话框具有“立即查找”按钮,该按钮将用户和组组合在一起,但是可惜,它的内容与“ LUG”相同。

我正在寻找更全面的列表,其中包括TrustedInstaller之类的“超级隐藏” /虚拟用户帐户(或更准确地说,是NT Service \ 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参数)中使用的帐户。


Answers:


43

我认为没有所有可能帐户的最终清单。

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

首先是标准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-2DWM-3DVM-1。因此,有尽可能多的台式机可供使用。

  • 电脑名称

在某些情况下,通常在Active Directory域中时,也可以在权限对话框中使用计算机名称。

  • Windows远程虚拟用户

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

它们具有以下格式:

winrm virtual users\winrm va_x_computername_username

和一个以 S-1-5-94-

“ x”是整数。

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

在JEA会话中,您可以whoami用来查找当前帐户名。

  • 最后:

即使这些列表也无法为您提供所有可能的帐户。

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


非常好!第一个查询返回的特殊“用户”之类everyonerestricted等等,和你讨论的NT Service\*帐户解释其他人一样TrustedInstaller。您还介绍了更多奇特的特殊情况,但是看起来所有常见情况都已考虑在内。
Synetech

@Ahmed-哪些用户?如果您有问题,则应创建一个新问题并在那里详细描述您的问题。这不是它的地方。
Peter Hahndorf

抱歉,我已删除评论。如果好奇,是我的问题。
艾哈迈德(Ahmed)2015年

3
嗨,列出IIS App Pool用户的PowerShell代码对我不起作用,所以我最终Get-WebConfiguration system.applicationHost/applicationPools/add改用了。
塔希尔·哈桑

1
好答案。有一个从MS额外信息的服务帐户在这里: docs.microsoft.com/en-us/windows/security/identity-protection/...
CJBS

10

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

http://technet.microsoft.com/zh-cn/magazine/2007.06.acl.aspx


是; 这正是我在说的。我正在寻找可以被授予权限的事物的完整列表,这些事物可以是用户,服务或您拥有的东西。是否有“安全主体”的完整列表?
Synetech

我认为没有办法利用ACL来查找安全主体的完整列表。我不确定为什么首先要获得完整的安全主体列表。从技术上讲,Windows模块安装程序(TRUSTEDINSTALLER的服务名称)在本地系统帐户下运行。
surfasb 2011年

4
>我不确定为什么首先需要完整的安全主体列表。好奇心。(这些天有没有人……?)
Synetech

您可以将这种好奇心指向MSDN库。
surfasb 2012年

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

    编辑安全设置

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

    选择用户或组

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

    对象类型

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

    现在找到

请注意,虽然可以在权限对话框中使用所有帐户,但并非所有在此页面上显示的帐户都可以在运行方式命令中使用。


4
我熟悉该对话框,并且已经在问题中提到了它:“立即查找”。请注意,尽管“用户” SYSTEM位于(或至少应该位于)那里,但TrustedInstaller 却不在
Synetech'3

抱歉,我认为您指的find now是“用户和组”控制面板中的按钮,该按钮类似但略有不同。据我所知,这里没有出现的唯一帐户是TrustedInstaller。这是因为Microsoft竭尽全力阻止您对TrustedInstaller帐户进行任何操作。如果我想到其他方法可以通知您。
nhinkle

这就是为什么我问 我想知道还有哪些其他未记录的用户……
Synetech 2011年

Microsoft TechNet上有一篇文章,其中包含有关其中大多数信息的信息,但此处没有TrustedInstaller。support.microsoft.com/kb/243330
nhinkle

1
Locations...如果您在域中,请不要忘记设置计算机(但只希望使用计算机)。
n611x007

4

从Windows Vista开始,将服务视为用户。即,将安全标识符(SID)分配给每个服务。这不是特定于TrustedInstaller服务。您可以使用以下sc showsid命令查看分配给任何服务的SID :

用法: scshowsid [名称]

描述:显示与任意名称相对应的服务SID字符串。该名称可以是现有或不存在的服务的名称。

请注意,系统上无需存在该服务。例子:

C:\> sc showsid TrustedInstaller
NAME: TrustedInstaller
SERVICE SID: S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464

或者,对于Windows Management InstrumentationWinmgmt)服务:

C:\> sc showsid Winmgmt
NAME: Winmgmt
SERVICE SID: S-1-5-80-3750560858-172214265-3889451188-1914796615-4100997547

最后,为了提供虚假服务:

C:\> sc showsid FakeService
NAME: FakeService
SERVICE SID: S-1-5-80-3664595232-2741676599-416037805-3299632516-2952235698

请注意,所有SID均以开头S-1-5-80,其中80分配给了SECURITY_SERVICE_ID_BASE_RID子权限。此外,此分配是确定性的:不使用RID,并且在所有系统上SID都是相同的(有关更多信息,请参见本文结尾处的参考资料)。

作为示例,我将分配NT Service\Winmgmt服务,向某些文件写入权限:

在此处输入图片说明

Windows在名称下划线Winmgmt,确认其为有效身份:

在此处输入图片说明

现在,单击“确定”,然后分配写权限:

在此处输入图片说明

这确认了任何服务名称都可以用作用户身份。因此,我不会将它们称为“超级隐藏”帐户:D

有关更多信息,请阅读以下文章:


1
很有意思。谢谢提供信息!
Synetech

1

您可以使用NetQueryDisplayInformation API,并结合按位检查用户信息标志。我有完全相同的要求,因此我准备了一个示例代码(从MSDN GROUP查询中修改)。

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

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


请扩展您的答案以直接包含与手头问题相关的信息。如果此链接停止工作,您的答案将不会有用。
Mxx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.