gpt4 book ai didi

c++ - 在系统上下文中运行进程

转载 作者:行者123 更新时间:2023-11-28 05:32:07 29 4
gpt4 key购买 nike

是否可以从在管理员帐户下运行的具有提升权限的父进程(例如命令提示符)在系统上下文中启动进程。这个问题与 psexec 所做的类似,但更多的是它如何实际实现这一点。

我正在考虑打开 crss.exe/winlogon.exe 进程复制 token 并使用该进程 token 启动新进程。但我什至无法打开进程句柄(Getlasterror 返回 5)。有人可以告诉我这是正确的方法还是应该以不同的方式启动流程?

HANDLE hWinLogonProcess;
for(const auto& ps : running_processes)
{
if(ps.id == GetCurrentProcessId() ||
0 != ps.short_name.CompareNoCase(L"winlogon.exe"))
{
continue;
}

DWORD dwWinLogonSessionId(0);
if(FALSE == ProcessIdToSessionId(GetCurrentProcessId(), &dwWinLogonSessionId))
{
std::wcerr<<"Could not get Winlogon process session id"<<std::endl;
continue;
}

if(dwWinLogonSessionId != dwCurSessionId)
{
continue;
}

hWinLogonProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, ps.id);
if(FALSE == hWinLogonProcess)
{
std::wcerr<<"Failed to get winlogon process handle"<<std::endl;
return;
}
else
{
std::wcout<<"Able to open process "<<ps.short_name.GetString()<<" handle"<<std::endl;
break;
}
}

我确信这是可行的,因为有一个可用的工具 (psexec),但我无法在网上找到任何引用来执行此操作。

这也类似于 question , 但单独发布,因为有关于如何实现它的详细信息。

最佳答案

是的,这是可能的(无需任何服务帮助)。

But I fail to even open the process handle

您的进程是否启用了 SE_DEBUG_PRIVILEGE 权限?

有了这个权限,你可以打开一个系统进程,如果它没有被保护(smss.exe, csrss.exe, services.exe),你可以使用所有访问权限,并在 CreateProcessAsUser() 中使用那个句柄,或者使用 UpdateProcThreadAttribute(PROC_THREAD_ATTRIBUTE_PARENT_PROCESS) 如果您还启用了 SE_ASSIGNPRIMARYTOKEN_PRIVILEGESE_TCB_PRIVILEGE 权限(用于设置 token 的 SessionId到 0),您可以通过两种方式获得:

  • 从不 protected 系统进程中打开一个线程并模拟它,然后打开您自己的线程 token 并调整其权限。

  • 从任何系统进程打开一个 token (这甚至适用于 protected 进程),复制该 token ,调整其权限,然后使用该 token 进行模拟。

要“在系统上下文中启动一个进程”,如果你想运行这个进程:

  • 使用 LocalSystem token 。

  • 在系统终端 session 中(0)

正如我所说,两者都是可能的。您只需要 SE_DEBUG_PRIVILEGE

  1. 更简单 - 打开一些具有 PROCESS_CREATE_PROCESS 访问权限的系统进程。将此句柄与 UpdateProcThreadAttribute(PROC_THREAD_ATTRIBUTE_PARENT_PROCESS) 一起使用。结果,您启动的进程从系统进程继承了一个 token 。这在 XP 上不起作用,但可以 Hook NtCreateProcess/Ex() 以用您打开的句柄替换 HANDLE ParentProcess

  2. 另一种方法是使用 CreateProcessAsUser()。在创建进程之前,您将需要 SE_ASSIGNPRIMARYTOKEN_PRIVILEGESE_TCB_PRIVILEGE 权限来设置 token 的 TokenSessionId(如果您想在 session 0 中运行)。

关于c++ - 在系统上下文中运行进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39238086/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com