用CreateProcessAsUser 创建最低权限进程
来源:互联网 发布:恺英网络股票千股千评 编辑:程序博客网 时间:2024/05/20 08:23
高 管理权限(进程可以将文件安装到“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 创建最低权限进程
- CreateProcessAsUser
- CreateProcessAsUser
- 创建高权限进程
- 创建高权限进程
- 创建高权限进程
- 创建高权限进程
- 创建高权限进程
- windows中以最低权限(SECURITY_ATTRIBUTES)创建内核对象
- [转载]创建高权限进程
- [转载]创建高权限进程
- system权限创建用户权限进程
- 创建高权限进程的方法
- 绕过Win7 UAC 创建高权限进程
- CreateProcessAsUser Function
- SECURITY_ATTRIBUTES 实现最低权限的问题
- 黑客技巧谈之创建高权限进程的方法
- 代码注入(提升当前进程权限,创建远程线程)
- static_cast、dynamic_cast reinterpret_cast和const_cast 强制类型转换
- linux解压缩
- Java虚拟机之类的生命周期
- 接口设计漫谈之回调函数1
- struct nand_ecclayout 之解义 ,eccbytes,eccpos,eccfree .
- 用CreateProcessAsUser 创建最低权限进程
- 百度高级搜索
- GLUT ON VS2010
- IP头、TCP头、UDP头详解以及定义
- XMLHttpRequest
- Adobe Flex/AIR
- 进程和线程间的通信方式总结-篇一(转载)
- el表达式中fn的用法
- Runaway Robot游戏通关算法实现过程总结