必威体育Betway必威体育官网
当前位置:首页 > IT技术

用CreateProcessAsUser 创建最低权限进程

时间:2019-06-14 17:41:04来源:IT技术作者:seo实验室小编阅读:92次「手机版」
 

createprocessasuser

高 管理权限(进程可以将文件安装到“Program Files”文件夹,并写入敏感注册表区域,如 HKEY_local_MACHINE。)

用户权限(进程可在用户的“文档”文件夹创建和修改文件,并写入用户指定的注册表区域,如 HKEY_CURRENT_USER。)

低 不受信任权限(进程只能写入低完整性位置,例如 Temporary Internet Files\Low 文件夹或 HKEY_CURRENT_USER\Software\LowRegistry key)

启动低完整性进程

1.重复中等完整性进程的处理。

2.使用 SetTokenInformation 将进程处理降低为低完整性。

3.使用 createprocessasuser 创建使用低完整性处理的新进程。

uses

windows;

function ConvertStringSidToSidA(StringSid: LPCTSTR; Sid:TSIDIdentifierAuthority): BOOL; stdcall; external 'Advapi32.dll' name 'ConvertStringSidToSidA';

const

SE_GROUP_INTEGRITY = 1;

#include "winnt.h"

BOOL b;

handle hToken;

HANDLE hNewToken;

PWSTR szProcessName = "LowClient"; // 例如

PWSTR szIntegritySid = "S-1-16-4096"; // 低完整性 SID

PSID pIntegritySid = NULL;

TOKEN_MANDATORY_LABEL TIL = {0};

PROCESS_INFORMATION ProcInfo = {0};

STARTUPINFO StartupInfo = {0};

ULONG ExitCode = 0;

b = OpenProcessToken(GetCurrentProcess(), MAXIMUM_ALLOWED,

&hToken);

b = DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, NULL,

SecurityImpersonation, TokenPrimary, &hNewToken);

b = ConvertStringSidToSid(szIntegritySid, &pIntegritySid);

TIL.Label.Attributes = SE_GROUP_INTEGRITY;

TIL.Label.Sid = pIntegritySid;

// 设置进程完整性级别

b = SetTokenInformation(hNewToken, TokenIntegrityLevel, &TIL,

sizeof(TOKEN_MANDATORY_LABEL) + RtlLengthSid(pIntegritySid));

// 设置进程的 UI 权限级别

b = SetTokenInformation(hNewToken, TokenIntegrityLevelDesktop,

&TIL, sizeof(TOKEN_MANDATORY_LABEL) + RtlLengthSid(pIntegritySid));

// 以低完整性创建新进程

b = CreateProcessAsUser(hNewToken, NULL, szProcessName, NULL, NULL,

FALSE, 0, NULL, NULL, &StartupInfo, &ProcInfo);

相关阅读

CreateProcessAsUser常用参数说明

最近写代码,要把进程启到别的session下,要用到CreateProcessAsUser函数。  查阅了MSDN, 整理了参数说明供日后查阅。先看函数原型BO

使用CreateProcessAsUser的范例代码

-------- CreateProcessEx.h文件 -------- #ifndef _CREATE_PROCESS_EX_H_ #define _CREATE_PROCESS_EX_H_ #include <windo

分享到:

栏目导航

推荐阅读

热门阅读