您的位置:首页 > 其它

用CreateProcessAsUser 创建最低权限进程

2013-01-24 13:42 736 查看
高 管理权限(进程可以将文件安装到“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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐