Ian*_*oyd 21 windows privileges
Windows 中的用户可以被授予各种权限
权限决定了用户帐户可以执行的系统操作类型。管理员为用户和组帐户分配权限。每个用户的权限包括授予用户和用户所属组的权限。
目前有35个特权。一些更有趣的是:
但我感兴趣的是:
我注意到我实际上没有这个特权。从提升的命令提示符:
>whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
=============================== ========================================= ========
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled
SeSecurityPrivilege Manage auditing and security log Disabled
SeTakeOwnershipPrivilege Take ownership of files or other objects Disabled
...
SeShutdownPrivilege Shut down the system Disabled
...
Run Code Online (Sandbox Code Playgroud)
使用Process Explorer检查以我身份运行的提升进程的安全令牌时,这一点得到确认:
然而我可以关闭系统。为什么?
如果您使用本地安全策略编辑器管理单元 ( secpol.msc),您可以看到我应该具有以下权限:
在释的特权:
关闭系统
此安全设置确定哪些本地登录到计算机的用户可以使用关闭命令关闭操作系统。滥用此用户权限可能会导致拒绝服务。
工作站上的默认设置:管理员、备份操作员、用户。
服务器上的默认值:管理员、备份操作员。
域控制器的默认设置:管理员、备份操作员、服务器操作员、打印操作员。
我是用户。有时我是Administrator,有时我是NotAdministrator。
也许这个问题应该是,为什么没有我有特权。
但现实是我没有这个特权;然而,当本地登录时,我可以关闭本地系统。
为什么?
@Mehrdad 有一个很好的答案,他删除了,我认为这值得关注并很好地简洁地回答了这个问题:
你有特权。它只是默认禁用。如果您没有特权,则根本不会列出它。
请注意 ,这SE_PRIVILEGE_REMOVED与缺乏SE_PRIVILEGE_ENABLED或不同SE_PRIVILEGE_ENABLED_BY_DEFAULT。
use*_*142 31
你有权限,但它被禁用了。这就是 PowerShell 告诉你的。
要关闭系统,请使用名为InitiateSystemShutdown或的 Win32API 函数ExitWindowsEx:
ExitWindowsEx(EWX_POWEROFF, 0);
Run Code Online (Sandbox Code Playgroud)
这些函数注意:
要关闭本地计算机,调用线程必须具有 SE_SHUTDOWN_NAME 权限。默认情况下,用户可以在他们登录的计算机上启用 SE_SHUTDOWN_NAME 权限,管理员可以在远程计算机上启用 SE_REMOTE_SHUTDOWN_NAME 权限。
如您所见,Windows 检查线程权限(任何线程都具有具有权限的令牌)。如果在ExitWindowsEx没有SE_SHUTDOWN_NAME权限的情况下调用,该函数将失败并显示错误:
Error code: 1314
A required privilege is not held by the client
Run Code Online (Sandbox Code Playgroud)
您默认创建的线程会继承您的权限;但是程序可以启用已被授予的禁用权限AdjustTokenPrivileges:
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = LookupPrivilegeValue(NULL, "SeShutdownPrivilege");
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
HANDLE processToken = OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES);
AdjustTokenPrivileges(processToken, FALSE, &tp, 0, NULL, NULL);
CloseHandle(processToken);
Run Code Online (Sandbox Code Playgroud)
更改令牌中的权限说:
AdjustTokenPrivileges不能从令牌中添加或删除权限。它只能启用当前禁用的现有权限或禁用当前启用的现有权限
那么,为什么默认情况下禁用此权限?确保没有程序可以意外关闭 Windows。应用程序应该明确要求这一点。
有一本古老但非常好的书:https : //www.amazon.com/Programming-Windows-Security-Keith-Brown/dp/0201604426/关于所有这些东西。
这是因为您的用户属于启用了该权限的组。
要亲自查看哪些组:
secedit /export /areas USER_RIGHTS /cfg OUTFILE.CFG。SeShutdownPrivilege条目。您将(应该)看到启用了该权限的用户和/或组的几个/几个 SID。所以我列出了三个简短的 SID。短 SID 通常是计算机级别的帐户/组。例如,其中之一是S-1-5-32-545。
使用 PowerShell,我们可以确定 SID 代表哪个帐户/组:
$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-32-545")
$objUser = $objSID.Translate([System.Security.Principal.NTAccount])
$objUser.Value
Run Code Online (Sandbox Code Playgroud)
这返回BUILTIN\Users.
由于您是该计算机的用户,您将自动成为该组的成员,这意味着您可以关闭计算机。
我拥有的另外两个是S-1-5-32-544, 和S-1-5-32-551。这些是标准BUILTIN\Administrators组和BUILTIN\Backup Operators组。这与您在secpol.msc对话框中看到的组一致。
| 归档时间: |
|
| 查看次数: |
6868 次 |
| 最近记录: |