Windows平台下的session0创建进程的问题与解决办法

Posted Navono

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows平台下的session0创建进程的问题与解决办法相关的知识,希望对你有一定的参考价值。

很多博客都有记载如何在session0下创建进程的办法,也就是使用CreateProcessAsUser。但是这个要求服务的进程有SE_INCREASE_QUOTA_NAME和SE_ASSIGNPRIMARYTOKEN_NAME权限如果设置的登录用户是LocalServer的话,是默认有以上两个权限。但是如果是自己创建的账户,那么是不具有SE_ASSIGNPRIMARYTOKEN_NAME的权限。

service

 

    查看用户的权限可以通过gpedit.msc工具中,在“计算机配置”-- “Windows设置” -- “安全设置” -- “本地策略” -- “用户权限分配”中查看。或者通过secedit.exe导出本地策略。

 

    手动可以通过以上的方法设置,但是通过程序,在登录账户下的进程是无法设置。但是可以使用secedit.exe进行导出导入进行设置。导出的信息包括以下一部分:

  1 [Privilege Rights]
  2 SeNetworkLogonRight = *S-1-1-0,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551,*S-1-5-32-581
  3 SeBackupPrivilege = *S-1-5-32-544,*S-1-5-32-551
  4 SeChangeNotifyPrivilege = *S-1-1-0,*S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551
  5 SeSystemtimePrivilege = *S-1-5-19,*S-1-5-32-544
  6 SeCreatePagefilePrivilege = *S-1-5-32-544
  7 SeDebugPrivilege = *S-1-5-32-544
  8 SeRemoteShutdownPrivilege = *S-1-5-32-544
  9 SeAuditPrivilege = *S-1-5-19,*S-1-5-20
 10 SeIncreaseQuotaPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544
 11 SeIncreaseBasePriorityPrivilege = *S-1-5-32-544
 12 SeLoadDriverPrivilege = *S-1-5-32-544
 13 SeBatchLogonRight = *S-1-5-32-544,*S-1-5-32-551,*S-1-5-32-559
 14 SeServiceLogonRight = *S-1-5-20,*S-1-5-80-0,*S-1-5-83-0
 15 SeInteractiveLogonRight = __vmware__,Guest,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551,*S-1-5-32-581
 16 SeSecurityPrivilege = *S-1-5-32-544
 17 SeSystemEnvironmentPrivilege = *S-1-5-32-544
 18 SeProfileSingleProcessPrivilege = *S-1-5-32-544
 19 SeSystemProfilePrivilege = *S-1-5-32-544,*S-1-5-80-3139157870-2983391045-3678747466-658725712-1809340420
 20 SeAssignPrimaryTokenPrivilege = *S-1-5-19,*S-1-5-20
 21 SeRestorePrivilege = *S-1-5-32-544,*S-1-5-32-551
 22 SeShutdownPrivilege = *S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551
 23 SeTakeOwnershipPrivilege = *S-1-5-32-544
 24 SeDenyNetworkLogonRight = Guest
 25 SeDenyInteractiveLogonRight = Guest
 26 SeUndockPrivilege = *S-1-5-32-544,*S-1-5-32-545
 27 SeManageVolumePrivilege = *S-1-5-32-544
 28 SeRemoteInteractiveLogonRight = *S-1-5-32-544,*S-1-5-32-555
 29 SeImpersonatePrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6
 30 SeCreateGlobalPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6
 31 SeIncreaseWorkingSetPrivilege = *S-1-5-32-545
 32 SeTimeZonePrivilege = *S-1-5-19,*S-1-5-32-544,*S-1-5-32-545
 33 SeCreateSymbolicLinkPrivilege = *S-1-5-32-544,*S-1-5-83-0
 34 

使用账户的SID,更新到SeAssignPrimaryTokenPrivilege字段,该用户即可拥有了SE_ASSIGNPRIMARYTOKEN_NAME权限。获取SID可以通过LookupAccountName函数完整的用户的SID可通过注册表查看,路径为:HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList

 

整个过程总结一下:

第一步:使用LookupAccountName,通过服务登录账户名,获取该账户的SID;

第二步:secedit.exe导出本地策略,将第一步获取的SID更新到SeAssignPrimaryTokenPrivilege字段;

          例如:secedit /export /cfg gp.inf

第三步:使用secedit.exe,将新的配置文件导入到系统;

          例如:secedit /configure /db C:\\\\test.sdb /cfg gp.inf

第四步:重启计算机;

第五步:在服务进程中,使用CreateProcessAsUser进行子进程的创建。

 

示例代码地址:代码GetSIDByUserName.cpp和CreateProcessAsUser.cpp

以上是关于Windows平台下的session0创建进程的问题与解决办法的主要内容,如果未能解决你的问题,请参考以下文章

Windows服务(system权限)程序显示界面与用户交互,Session0通知Session1里弹出对话框(真的很牛) good

创建可执行进程(windows)在win10下的表现

Tomcat 进程在 Windows 平台下经常性假死,啥原因造成的

2022CTF培训windows&linux&安卓平台调试机制原理

如何使用通用 Windows 平台 (UWP) 应用程序执行进程命令(或类似命令)?

多进程多线程在不同环境下的操作