// UAC(用户账户控制)是微软在Windows VISTA以后版本中引入的一种安全机制。通过UAC,应用程序和任务始终在非管理员权限下的安全上下文中运行。
// 除非特别授予管理员权限。UAC可以阻止未经授权的应用程序自动进行安装,并防止无意地更改系统设置。
// UAC需要授权的动作包括:配置Windows Update、增加或删除用户账户、更改用户账户的类型、改变UAC设置、安装ActiveX、安装或移除程序、安装设备驱动程序、
// 设置家长控制、将文件移动或复制到Program File或Windows目录、查看其它用户文件夹等。
// 触发UAC时,系统会创建一个consent.exe进程,该进程通过白名单程序和用户选择来判断是否创建管理员权限进程。请求进程将要请求的进程cmdline和进程路径通过LPC
// 接口传递给appinfo的RAiLuanchAdminProcess函数。该函数首先验证路径是否在白名单中,并将结果传递给consent.exe进程,该进程验证请求进程的签名以及发起者的
// 权限是否符合要求后,决定是否弹出UAC窗口让用户确认。这个UAC窗口会创建新的安全桌面,屏蔽之前的界面。同时这个UAC窗口进程是系统权限进程,其他普通进程无法
// 和其进行通信交互。用户确认之后,会调用CreateProcessAsUser函数以管理员权限启动请求的进程。
// 目前实现Bypass UAC主要有两种方法:一种是利用白名单提权机制,另一种是利用COM组件接口技术。
// PS:基于白名单程序的Bypass UAC:
// 有些系统程序是直接获取管理员权限,而不触发UAC弹框的,这类程序称为白名单程序。例如:slui.exe、taskmgr.exe、msra.exe、eudcedit.exe、eventvwr.exe、CompMgmtLauncher.exe等。
// 这些白名单程序可以通过DLL劫持、注入或者修改注册表执行命令的方式启动目标程序,实现Bypass UAC提权操作。
// PS:对于CompMgmtLauncher.exe程序来说,它是通过修改注册表来进行提权的:它会先读取注册表HKCU\Software\Classes\mscfile\shell\open\command中的数据。所以,如果你构造了
// 该注册路径,并写入启动程序的路径中,那么,CompMgmtLauncher.exe便会启动该程序。
// 步骤:1.打开注册表,将程序路径写入到 HKCY\Software\Classes\mscfile\shell\open\command\(Default) 2.运行CompMgmtLauncher.exe程序。
// 示例代码:
BOOL SetReg(char* lpszExePath)
{
HEKY 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)
{
Sh
提权技术之Bypass UAC
最新推荐文章于 2025-06-09 18:36:24 发布