1. 简介
可能每个人都知道管理员帐户有权限split token
(前提是 UAC 未被禁用)。这意味着,如果您以组成员身份登录Administrators
,您最初拥有的权限几乎不比非管理员用户多。只要您想要执行需要管理员权限的操作,就会出现著名的 UAC 窗口,要求您允许该操作。如果您这样做,您的提升令牌(分配了所有权限)将用于启动新进程。
鲜为人知的是,还有其他组的Administrators
成员拥有此类拆分令牌。其中之一是Backup Operators
。该组的成员用户也拥有拆分令牌,一个没有特殊权限,另一个拥有备份操作员所有权限的提升令牌。
2. 问题
如果有人能帮助我理解 Windows 7、10、Server 2008R2 和 Server 2019(版本 1909)(未测试其他版本)在以下情况下的行为,我将不胜感激:海拔非行政用户,尤其是团体成员Backup Operators
。
我有一台具有以下本地用户帐户的机器(没有 Active Directory / 没有域):
peter (is member of Administrators)
Backup (is member of Backup Operators, but NOT member of Administrators)
我的目标是以用户身份登录到该机器peter
,然后不时成为用户Backup
在其升级版本中在cmd32
壳里。
Backup
这是关键点:成为被剥夺特权(即未提升特权)的用户很容易,但我发现没有办法成为具有完全特权的用户。
3. 符合预期的部分
因此,我首先测试了用户Backup
在不太棘手的情况下的行为是否符合预期。我以用户身份直接登录到相关计算机的控制台Backup
并打开了正常cmd32
shell。正如预期的那样,我还没有被提升权限:
C:\Users\Backup>whoami
dax\backup
C:\Users\Backup>whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ============================== ========
SeShutdownPrivilege Shut down the system Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
C:\Users\Backup>
然后我尝试打开一个提升权限的cmd32
shell,使用Nirsoft 的 nircmd 实用程序,并在 shell 中输入:
C:\Users\Backup>"c:\Program Files\nircmd-x64\nircmd.exe" elevate c:\windows\system32\cmd.exe
C:\Users\Backup>
正如预期的那样,这将弹出以下 UAC 对话框:
请注意,此对话框中有一个用户条目Backup
。我选择了该条目并输入了密码,这使 Windows 打开了一个新的cmd32
shell。在该 shell 中新的shell,我再次检查了我是谁以及我拥有什么权限:
C:\Windows\system32>whoami
dax\backup
C:\Windows\system32>whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ============================== ========
SeBackupPrivilege Back up files and directories Disabled
SeRestorePrivilege Restore files and directories Disabled
SeShutdownPrivilege Shut down the system Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
C:\Windows\system32>
瞧——奇迹发生了。我现在显然比第一个cmd32
shell 多出了两个权限,即SeBackupPrivilege
和SeRestorePrivilege
。显然,我已经成为升高Backup
该新 shell 中的用户版本cmd32
,并分配了备份操作员的所有权限。
请注意,此提升是针对组成员Backup operators
,而不是针对管理用户。我想再次强调,用户Backup
是不是该团体的一名成员Administrators
。
到目前为止一切顺利 - 一切按预期运行。
4. 棘手的部分无法按预期工作
现在我想扩展上面显示的技术。我从有问题的机器上注销所有用户,以用户身份登录peter
并打开一个普通(非提升)的cmd32
shell。简单检查显示我确实peter
在那个 shell 中。从那里,我打开了一个新cmd32
shell,从而成为用户Backup
:
C:\Users\peter>whoami
dax\peter
C:\Users\peter>runas /user:Backup c:\windows\system32\cmd.exe
Enter the password for Backup:
Attempting to start c:\windows\system32\cmd.exe as user "DAX\Backup" ...
C:\Users\peter>
这确实让 Windows 打开了一个新的cmd32
shell。简单检查后发现我确实在Backup
那里,但我还没有被提升(正如预期的那样):
C:\Windows\system32>whoami
dax\backup
C:\Windows\system32>whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ============================== ========
SeShutdownPrivilege Shut down the system Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
C:\Windows\system32>
到目前为止一切顺利。现在我已经Backup
进入了那个新的 shell,我应该能够使用第 3 节中所示的相同命令,打开另一个cmd32
shell,在该 shell 中我将是 的提升版本。因此我发出了:Backup
C:\Users\Backup>"c:\Program Files\nircmd-x64\nircmd.exe" elevate c:\windows\system32\cmd.exe
C:\Users\Backup>
但现在,出现了以下UAC提示:
Backup
请注意,该提示中的帐户列表中缺少该帐户。这就是麻烦的开始。
首先,我不明白为什么Backup
UAC 提示中没有显示该帐户。我可以想象这是因为Backup
不是 的成员Administrators
,但为什么在第 3 节中描述的情况下它能正常工作呢?
其次,对于真正的罪魁祸首,我显然无法Backup
在那种情况下成为提升的版本。如果我选择该 UAC 提示中的一项并输入相应的密码,cmd32
就会出现一个新的 shell,我在其中成为了所选帐户的提升版本,所以它以某种方式起作用,但这不是我想要的。我真的想成为那里帐户的提升版本Backup
,而不是其他帐户的提升版本。
我有两个问题:
a) 为什么第 4 节中描述的 UAC 提示中缺少该帐户Backup
,而第 3 节中描述的 UAC 提示中却按预期显示该帐户?
b)我必须采取哪些步骤才能使其按预期工作,即以用户cmd32
的提升版本打开一个 shell Backup
,即打开一个cmd32
我是用户的 shell Backup
,并且该 shell 已被分配了该Backup Operators
组的所有权限,前提是该用户Backup
只是 的成员Backup Operators
,但不是 的成员Administrators
?
5. 我已经尝试过的方法
a) 我已经设定LocalAccountTokenFilterPolicy
(看这里)至 1. 这并没有改变任何东西(正如预期的那样,因为它只改变了远程连接的行为)。
b) 仅出于测试目的,我已将Backup
用户添加到Administrators
组。这会导致行为发生变化:第 4 节中描述的 UAC 提示现在包含一个条目Backup
;选择它并输入密码会使 Windows 打开一个额外的cmd32
shell,我Backup
和所有人一起行政的已分配特权。
这(某种程度上)也是预料之中的,但它只是为了测试而设,并不是解决方案,因为我希望新的提升的 shell 拥有 的所有权限Backup Operators
,而不是 的所有权限Administrators
。
c) 在第 4 节中描述的第一步中,我打开了提升版本的 shell cmd32
(具有组的所有权限Administrators
),而不是普通版本的 shell。这也没有改变任何东西。
d) 完全禁用 UAC 是不可能的,所以我没有测试它。
现在我已经没有主意了。