0
点赞
收藏
分享

微信扫一扫

window程序提权

bool IsAdmin() {
HANDLE hToken = NULL;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
{
return false;
}
TOKEN_ELEVATION eve;
DWORD len = 0;
if (GetTokenInformation(hToken, TokenElevation, &eve, sizeof(eve), &len) == FALSE) {
return false;
}
CloseHandle(hToken);
if (len == sizeof(eve)) {
return eve.TokenIsElevated;//该成员权限
}
printf("length of tokeninformation is %d\r\n", len);
return false;
}

static bool RunAsAdmin()
{//获取管理员权限,使用该权限创建进程
//本地策略组 开启Administrator 禁止空密码只能登陆本地控制台
STARTUPINFO si = { 0 };
PROCESS_INFORMATION pi = { 0 };
TCHAR sPath[MAX_PATH] = _T("");
GetModuleFileName(NULL, sPath, MAX_PATH);
//创建拥有管理员权限的子进程
BOOL ret = CreateProcessWithLogonW(_T("Administrator"), NULL, NULL, LOGON_WITH_PROFILE, NULL, sPath, CREATE_UNICODE_ENVIRONMENT, NULL, NULL, &si, &pi);
if (!ret) {
::MessageBox(NULL, sPath, _T("程序错误,创建进程失败"), 0);//TODO:去除调试信息
return false;
}
WaitForSingleObject(pi.hProcess, INFINITE);//等待子进程结束
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return true;
}

//思路判断当前进程的权限,在不是管理员权限的情况下,对当前进程提权,即可创建拥有管理员权限的子进程
int main() {
int nRetCode = 0;
if (IsAdmin()) {
::MessageBox(NULL, _T("管理员"), _T("用户状态"), 0);
}
else {
//TODO:获取管理员权限,使用该权限创建进程
RunAsAdmin();
::MessageBox(NULL, _T("普通用户"), _T("用户状态"), 0);
return nRetCode;
}
}


举报

相关推荐

linux 提权-sudo提权

【提权概述】

webshell提权

Windows提权

metasploit linux 提权

SUID提权(一)

SQlserver提权方法

0 条评论