用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);
中 用户权限(进程可在用户的“文档”文件夹创建和修改文件,并写入用户指定的注册表区域,如 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 CreateProcessWithLogonW CreateProcessWithTokenW(附网友的流程)
- Win7中如何在服务中启动一个当前用户的进程——函数CreateProcessAsUser()的一次使用记录
- CreateProcessAsUser,C#写的windows服务弹框提示消息或者启动子进程
- 挂接CreateProcessW实现对进程创建的完全控制
- 创建进程API CreateProcess Demo
- CreateProcessAsUser
- 监控系统所有进程的创建和销毁 (PsSetCreateProcessNotifyRoutine)
- 创建进程API CreateProcess Demo
- CreateProcessAsUser
- 采用oracle创建用户并授予dba权限 1)创建用户: create user wmlt identified by wmlt; 2)授予dba权限 grant connect,resou
- 使用CreateProcessAsUser的范例代码
- CreateProcess TerminateProcess 创建与终止进程 demo
- 小试X64 inline HOOK,hook explorer.exe--->CreateProcessInternalW监视进程创建
- 以不同用户身份运行程序,/savecred只需要输入一次密码(GetTokenByName取得EXPLORER.EXE的令牌,然后调用CreateProcessAsUser,而且使用LoadUserProfile解决另存文件的问题)good
- 挂接CreateProcessW实现对进程创建的完全控制
- MFC CreateProcess创建可控制窗口的进程
- CreateProcessAsUser Function
- create user rm identified by rmrm;-- 创建新的用户 --grant 权限1、权限2...to 用户 给创建用户权限 --ex:grant create ses
- mpich出现LaunchProcess failed,CreateProcessAsUser failed,拒绝访问
- Windows CreateProcess fail 创建进程失败。