如何将进程提升至SYSTEM权限

时间:2021-08-27 14:16:41
因为要使用SE_ASSIGNPRIMARYTOKEN_NAME特权,必须使用SYSTEM权限,网上的代码太冗长了,而且凌乱不堪,我只想知道过程,不一定需要源代码,谢谢啦~

9 个解决方案

#1


不是太懂你说的这个,试试debug权限?

BOOL EnablePrivilege(LPCSTR lpName, BOOL fEnable) //提升打开进程的权限到DEBUG
{
HANDLE hObject;
LUID Luid;
TOKEN_PRIVILEGES NewStatus;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hObject))
return FALSE;
if (LookupPrivilegeValue(NULL, lpName, &Luid))
{
NewStatus.Privileges[0].Luid = Luid;
NewStatus.PrivilegeCount = 1;
NewStatus.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hObject, FALSE, &NewStatus, 0, 0, 0);
CloseHandle(hObject);
return TRUE;
}
return FALSE;
}

EnablePrivilege(SE_DEBUG_NAME,TRUE);

#2


EnablePrivilege(SE_DEBUG_NAME,TRUE);//貌似第一个参数就可以改为SYSTEM权限。SE_SYSTEM_XXXXX参数太多,我不知道是哪一个。你自己试试吧。

#3


只有SYSTEM用户才能使用这个方法赋予SE_ASSIGNPRIMARYTOKEN_NAME特权
http://www.microsoft.com/msj/0899/security/securitytextfigs.htm

#4


EnablePrivilege(SE_ASSIGNPRIMARYTOKEN_NAME,TRUE);//这样需要系统权限的才能赋予?
那我就爱莫能助了。
帮我看看这个怎么解决呗,大半夜的,没个活人- -
http://topic.csdn.net/u/20120113/00/ce433022-dcda-49ef-b2fa-ffe0a7c4748f.html

#5


楼主可参考 http://www.360doc.com/content/11/0525/10/61151_119230711.shtml
个人感觉此文思路比较清晰,希望有所帮助。

#6


需要 SE_ASSIGNPRIMARYTOKEN_NAME 的api,是不是得需要 LocalSystem上下文才可以?

那必须以 SYSTEM权限 启动你的目标程序。
启动者,也就是已注册的系统服务了, 也是你要你自己写。或者你的代码本身就是系统服务。

进程启动后,就无法 增加 特权了。
考虑到UAC兼容,或者 非管理员账户 环境,估计没有其他稳定的方法了,除了找漏洞。

#7


首先获得调试特权,打开一个SYSTEM进程,比如用CsrGetProcessId得到csrss的pid
然后用RtlCreateUserProcess以它作为被继承进程创建一个进程,新的进程就是SYSTEM账户

#8


让一个Service来启动你的进程

#9


楼主的意思是提升,说明进程已经启动了的

#1


不是太懂你说的这个,试试debug权限?

BOOL EnablePrivilege(LPCSTR lpName, BOOL fEnable) //提升打开进程的权限到DEBUG
{
HANDLE hObject;
LUID Luid;
TOKEN_PRIVILEGES NewStatus;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hObject))
return FALSE;
if (LookupPrivilegeValue(NULL, lpName, &Luid))
{
NewStatus.Privileges[0].Luid = Luid;
NewStatus.PrivilegeCount = 1;
NewStatus.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hObject, FALSE, &NewStatus, 0, 0, 0);
CloseHandle(hObject);
return TRUE;
}
return FALSE;
}

EnablePrivilege(SE_DEBUG_NAME,TRUE);

#2


EnablePrivilege(SE_DEBUG_NAME,TRUE);//貌似第一个参数就可以改为SYSTEM权限。SE_SYSTEM_XXXXX参数太多,我不知道是哪一个。你自己试试吧。

#3


只有SYSTEM用户才能使用这个方法赋予SE_ASSIGNPRIMARYTOKEN_NAME特权
http://www.microsoft.com/msj/0899/security/securitytextfigs.htm

#4


EnablePrivilege(SE_ASSIGNPRIMARYTOKEN_NAME,TRUE);//这样需要系统权限的才能赋予?
那我就爱莫能助了。
帮我看看这个怎么解决呗,大半夜的,没个活人- -
http://topic.csdn.net/u/20120113/00/ce433022-dcda-49ef-b2fa-ffe0a7c4748f.html

#5


楼主可参考 http://www.360doc.com/content/11/0525/10/61151_119230711.shtml
个人感觉此文思路比较清晰,希望有所帮助。

#6


需要 SE_ASSIGNPRIMARYTOKEN_NAME 的api,是不是得需要 LocalSystem上下文才可以?

那必须以 SYSTEM权限 启动你的目标程序。
启动者,也就是已注册的系统服务了, 也是你要你自己写。或者你的代码本身就是系统服务。

进程启动后,就无法 增加 特权了。
考虑到UAC兼容,或者 非管理员账户 环境,估计没有其他稳定的方法了,除了找漏洞。

#7


首先获得调试特权,打开一个SYSTEM进程,比如用CsrGetProcessId得到csrss的pid
然后用RtlCreateUserProcess以它作为被继承进程创建一个进程,新的进程就是SYSTEM账户

#8


让一个Service来启动你的进程

#9


楼主的意思是提升,说明进程已经启动了的