【windows权限】提权操作

概述:一个简单的windows提权代码

提权逻辑

  1. 打开相应的进程获取 token
  2. 获取目标进程的权限
  3. 使用 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;
}