【windows权限】提权操作
概述:一个简单的windows提权代码
提权逻辑
- 打开相应的进程获取 token
- 获取目标进程的权限
- 使用
AdjustTokenPrivileges
将 token 提升到目标进程权限。
代码
int EnablePrivilege_(LPCTSTR lpszPrivilegeName, BOOL bEnable)
{
int result = FALSE;
int ret_code = FALSE;
HANDLE token = NULL;
TOKEN_PRIVILEGES tkp = { 0 };
do
{
ret_code = ::OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token);
if (!ret_code)
break;
ret_code = ::LookupPrivilegeValue(NULL, lpszPrivilegeName, &tkp.Privileges[0].Luid);
if (!ret_code)
break;
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
ret_code = ::AdjustTokenPrivileges(token, FALSE, &tkp, sizeof(tkp), NULL, NULL);
if (!ret_code)
break;
result = TRUE;
} while (FALSE);
if (token != NULL)
{
CloseHandle(token);
}
return result;
}