了解非管理员(!)用户的权限提升

了解非管理员(!)用户的权限提升

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并打开了正常cmd32shell。正如预期的那样,我还没有被提升权限:

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>

然后我尝试打开一个提升权限的cmd32shell,使用Nirsoft 的 nircmd 实用程序,并在 shell 中输入:

C:\Users\Backup>"c:\Program Files\nircmd-x64\nircmd.exe" elevate c:\windows\system32\cmd.exe

C:\Users\Backup>

正如预期的那样,这将弹出以下 UAC 对话框:

UAC 对话框

请注意,此对话框中有一个用户条目Backup。我选择了该条目并输入了密码,这使 Windows 打开了一个新的cmd32shell。在该 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>

瞧——奇迹发生了。我现在显然比第一个cmd32shell 多出了两个权限,即SeBackupPrivilegeSeRestorePrivilege。显然,我已经成为升高Backup该新 shell 中的用户版本cmd32,并分配了备份操作员的所有权限。

请注意,此提升是针对组成员Backup operators,而不是针对管理用户。我想再次强调,用户Backup不是该团体的一名成员Administrators

到目前为止一切顺利 - 一切按预期运行。

4. 棘手的部分无法按预期工作

现在我想扩展上面显示的技术。我从有问题的机器上注销所有用户,以用户身份登录peter并打开一个普通(非提升)的cmd32shell。简单检查显示我确实peter在那个 shell 中。从那里,我打开了一个新cmd32shell,从而成为用户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 打开了一个新的cmd32shell。简单检查后发现我确实在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 节中所示的相同命令,打开另一个cmd32shell,在该 shell 中我将是 的提升版本。因此我发出了:Backup

C:\Users\Backup>"c:\Program Files\nircmd-x64\nircmd.exe" elevate c:\windows\system32\cmd.exe

C:\Users\Backup>

但现在,出现了以下UAC提示:

UAC 提示

Backup请注意,该提示中的帐户列表中缺少该帐户。这就是麻烦的开始。

首先,我不明白为什么BackupUAC 提示中没有显示该帐户。我可以想象这是因为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 打开一个额外的cmd32shell,我Backup和所有人一起行政的已分配特权。

这(某种程度上)也是预料之中的,但它只是为了测试而设,并不是解决方案,因为我希望新的提升的 shell 拥有 的所有权限Backup Operators,而不是 的所有权限Administrators

c) 在第 4 节中描述的第一步中,我打开了提升版本的 shell cmd32(具有组的所有权限Administrators),而不是普通版本的 shell。这也没有改变任何东西。

d) 完全禁用 UAC 是不可能的,所以我没有测试它。

现在我已经没有主意了。

相关内容