我正在尝试创建一个允许管理权限的程序。但不幸的是,我不能达到我想要的结果。我想我错过了一些东西。
我尝试使用here中的代码默认启用特权,并将Attributes
设置为SE_PRIVILEGE_ENABLED_BY_DEFAULT
或SE_PRIVILEGE_ENABLED_BY_DEFAULT | SE_PRIVILEGE_ENABLED
。特权的属性可以是以下值的组合:
SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
SE_PRIVILEGE_ENABLED (0x00000002L)
SE_PRIVILEGE_REMOVED (0X00000004L)
SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
我使用cmd中的whoami /priv
检查了用户的权限,还使用函数GetTokenInformation
检索了有关权限的信息,并比较了结果,发现启用的权限Attributes
为3(即SE_PRIVILEGE_ENABLED_BY_DEFAULT | SE_PRIVILEGE_ENABLED
)。
我尝试将Attributes
设置为3,然后再次使用GetTokenInformation
检查权限信息,但权限的Attributes
设置为2。我还尝试SE_PRIVILEGE_ENABLED_BY_DEFAULT
并再次检查,但Attributes
设置为0。
我的问题是
1.为什么3变成2,1变成0?是否可以将权限的Attribute
设置为3或1?换句话说,我可以做一些事情来使用whoami /priv
并查看是否有以前未启用的权限被启用?
1.是否可以为一个帐户添加更多的权限?我尝试使用secpol.msc和LsaAddAccountRights
函数来完成此操作,但权限的数量是相同的。
补充问题:
1.经过大量的搜索,我找到了这个article关于使用powershell脚本来启用特权的文章。为什么c#代码不能工作,但 Package 在powershell脚本中的相同代码却可以完成这项工作?
如果你能给我指出正确的方向,我将不胜感激。谢谢,我为我的英语感到抱歉。
1条答案
按热度按时间mspsb9vt1#
问题1:
根据文件:AdjustTokenPrivileges function
[in,可选] NewState
指向TOKEN_PRIVILEGES结构的指针,该结构指定权限数组及其属性。如果DisableAllPrivileges参数为FALSE,则AdjustTokenPrivileges函数为令牌启用、禁用或移除这些权限。
就我而言,
tp.Privileges[0].Attributes
的值是SE_PRIVILEGE_ENABLED
或SE_PRIVILEGE_REMOVED
或None
。问题2:
您可以通过使用本地安全策略Microsoft管理控制台(MMC)管理单元(Secpol.msc)或调用
LsaAddAccountRights function
为帐户分配权限。在我看来,你可以给帐户分配特权,你不能给一个帐户添加更多的特权。
根据文件:Changing Privileges in a Token
您可以通过两种方式更改主令牌或模拟令牌中的权限:
使用
AdjustTokenPrivileges function
启用或禁用权限。使用
CreateRestrictedToken function
限制或删除权限。问题3:
您能否提供样品以帮助我们重现问题?