看我如何利用事件查看器绕过UAC(用户帐户控制)

写在前面的话

用户账户控制(UAC)是微软开发出的一套安全控制机制,其目的是为了限制未经授权的应用程序以管理员等级的权限执行,但是当管理员提供了密码并允许该程序执行的话,那么这个非特权应用仍然能够以管理员权限运行。这也就意味着,由于用户账户控制机制的存在,渗透测试人员就可以通过Meterpreter来阻止这种提权方法。

下图即为UAC阻止应用程序提权的演示样例:

UAC阻止应用程序提权的演示样例

Matt Nelson在其发布的技术博客中解释称,通过劫持注册表键,我们是有可能利用类似Event Viewer(事件查看器)这样的原生Windows服务来绕过用户账户控制(UAC)的。首先,Event Viewer(事件查看器)的进程(eventvwr.exe)是以高级完整权限运行的;其次,Event Viewer(事件查看器)是Microsoft Management Console(微软管理控制台)通过注册表进行加载的,因此我们的这个假设完全是可以实现的。

手动实现

在新版本的Windows(包括Vista及其之后版本)平台中,进程是以三种不同的权限等级运行的。系统可以通过这三个不同的等级来确定进程最终以哪一种权限来运行:

  • -高级:管理员权限
  • -中级:标准用户权限
  • -低级:受限制权限

我们可以根据Process Explorer(进程查看器)来确定一个进程所分配到的权限等级。当事件查看器出于运行过程中时,我们可以通过下面这两个因素来检查Windows进程的权限:

1. 系统通过微软管理控制台(mmc.exe)加载事件查看器;

2. 事件查看器以高级完整权限运行;

从下图中可以看到,事件查看器进程是以高级权限运行的:

http://p0.qhimg.com/t01d494d88f1506a6b1.png

这里需要注意的是,当eventvwr.exe被执行之后,它会尝试在下面这两个注册表地址中搜索mmc.exe:


  1. -HKCU\Software\Classes\mscfile\shell\open\command 
  2. -HKCR\mscfile\shell\open\command 

由于第一个注册表地址并不存在,因此mmc.exe会以第二个注册表地址运行,随后该地址便会加载文件eventvwr.msc并将相关信息显示给用户。

下图即为MMC以及事件查看器的相关信息:

MMC以及事件查看器的相关信息

这样一来,攻击者就有可能创建一个压根不存在的注册表地址来以高级权限运行某个进程了,而这样就可以允许攻击者绕过目标系统的用户账户控制(UAC)。

下图显示的是攻击者通过事件查看器来提升命令控制台(CMD)权限的操作界面:

攻击者通过事件查看器来提升命令控制台(CMD)权限的操作界面

当eventvwr.exe得到执行之后,它将会直接打开命令控制台窗口,而且在整个过程中系统既不会弹出用户账户控制窗口,也不会请求高级权限。如下图所示:

eventvwr.exe得到执行之后

这项攻击技术的隐蔽性非常高,因为整个过程根本无需触及硬盘,而且也不需要进行任何的进程注入,这样就可以防止被那些基于进程行为监控的反病毒产品或安全解决方案所检测到。

自动化实现

需要注意的是,我们还可以通过一个不可检测的恶意Payload来代替之前所弹出的命令控制台窗口,这样不仅可以允许我们通过Meterpreter会话来实现自动化提权,而且还可以执行很多其他的系统级指令。我们可以在注册表中加载自定义Payload:

通过Meterpreter会话来实现自动化提权

我们可以在进程查看器中看到,进程pentestlab3.exe再一次以高级权限运行了:

通过Meterpreter会话来实现自动化提权

Metasploit的handler模块可以捕获到提权的Meterpreter会话,而此时我们就可以给目标应用进行提权了,因为我们现在已经绕过了目标系统的用户账户控制。

通过Meterpreter会话来实现自动化提权

Metasploit

除了上面所描述的技术方法之外,我们也可以使用Metasploit提供的模块来实现整个攻击过程的自动化,并自动返回一个高权限的Meterpreter会话。命令如下:


  1. exploit/windows/local/bypassuac_eventvwr 

通过事件查看器绕过用户账户控制(Metasploit版):

通过事件查看器绕过用户账户控制(Metasploit版)


作者:WisFree
来源:51CTO

来源:https://yq.aliyun.com/articles/182398


智能推荐

事件查看器:一堆WindowsUpdateFailure3

WEB上突然爆了一个错: 远程上去看数据库服务器,本地系统占用内存12G+,我草。。。 查看事件一堆堆WindowsUpdateFailure3的错 而且是循环的在跑跑跑。。。   问了朋友说是Update失败,一直在循环更新,然后循环失败导致,让我禁用Windows Update,但是报错,虽然禁用了还是未释放资源,最后重启服务器解决了。       &n...

远程管理之事件查看器篇

一般IT人员每天工作的第一件事应该就是查看服务器的事件日志了,看看服务器有没有什么影藏的危机。但如果说每次要到机房看的话,那么也太麻烦了,还有一般情况下机房只配有一台显示器,你要查看多个服务器的话,那样会很麻烦,那么怎么办呢?对,就是远程。有人会说用远程桌面不是一样可以查看吗?其实在事件查看器里面可以直接连接到服务器的。 1、右击桌面左下脚,选择事件查看器; 同样你也可以在运行里面运行:event...

Chapter 2 物理层

1.物理层的基本概念 物理层解决如何在连接各种计算机的传输媒体上传输比特流,而不是指具体的传输媒体 物理层主要任务:确定传输媒体接口有关的一些特性----->定义标准 四个特性: 机械特性:定义物理连接的特性,规定物理连接时所采用的规格、接口形状、引线数量、引脚数量和排列情况 电气特性:规定传输二进制位时,线路上信号的电压范围、阻抗匹配、传输速率和距离限制等 功能特性:指明某条线上出现某一电...

关于explain plan的使用!

如何生成explain plan?   解答:运行utlxplan.sql. 建立plan 表   针对特定SQL语句,使用 explain plan set statement_id = 'tst1' into plan_table   运行utlxplp.sql 或 utlxpls.sql察看explain plan EXPLAIN PLAN 是一个很好的分析SQL语句的工具,它甚至可以在不执...

static初始化赋值为常量和赋值为函数调用

函数调用是在程序运行过程中才执行的,而static初始化右边的值,必须是在编译的时候就能确定.即如果给一个常量即静态初始化 static NSString *str = @“123”;是可以的,因为static是静态初始化, 但是 如果初始化是动态调用函数的 static NSString *str = [NSString stringWithFormat:@“...

猜你喜欢

数据库连接池

数据库连接池的由来 我们在使用JDBC的时候,每次都创建和数据库的连接,然后释放这个资源。我们在创建连接的时候,是从系统底层获取和数据库的连接,非常的消耗资源,如果我们频繁创建连接,然后释放连接,这样效率低下,所以我们由此引入了数据库连接池,来解决这种问题 一、概念 数据库连接池其实就是一个容器(集合),存放数据库连接的容器。当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据...

Java SE 学习笔记5 Java阶段复习

计算机、Java基础 一、计算机 1、硬件介绍 2、中央处理器 3、比特(bit)和字节(byte) 4、内存 5、存储设备 6、输入和输出设备 二、Java介绍 1、常用的dos命令 2、java语言的主要特性 3、Java技术体系平台 4、Java语言的特点 5、Java两种核心机制 6、Java语言的环境搭建 一、计算机 1、硬件介绍 冯.诺依曼体系结构是现代计算机的基础,现在大多计算机仍是...

Python图片处理

Python PIL          PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储、显示和处理,能够处理几乎所有格式的图片。 一、PIL库简介 1. PIL库主要有2个方面的功能: (1) 图像归档:对图像进行批处理、生产图像预览、图像格式转换等。 (2) 图...

安装PostgreSQL

*数据库一般装完 都默认不允许远程主机访问,所以装完 先再本地试一下,如果可以连上 说明装的没问题,如果远程连不上那么就需要配置一下允许远程连接 (修改data目录下的pg_hba.conf,加host  all  all  192.168.1.0/24  md5)...

MaskRCNN训练自己的数据集,用VIA标注数据

MaskRCNN(TensorFlow版)的项目地址: https://github.com/matterport/Mask_RCNN 如果要用这个算法来训练自己的数据集,方法十分简单,只需修改代码的几个关键部分就好了。 准备数据集 首先将你的数据集分为两类,一类为训练集(train),一类为验证集(val)。 然后是标注数据,这里我用到的工具是VIA(VGG数据集的标注工具),操作起来十分方便。...

问答精选

Aurelia repeat.for for - some questions

I am attempting to generate a form like this: where config is a variable in my view-model. A couple questions: 1) I have tried both for.repeat="field in ${config.formMain}" and for.repeat=&q...

Minimum number of moves to equalize list of numbers

We have an array of n positive integers. An acceptable move is to increase all elements by 1 or 2 or 5 except one element. We need to find out minimum number of operations to make all array elements t...

SQL Server - Management Studio - Client Statistics - Wait time on server replies vs Client processing time

I have a slow running query that I've been working on optimising. When looking at the Client Statistics in Management Studio it was taking about 8 seconds wait time on server replies and about 1 secon...

How to create multicell table FPDF

I wrote following code to create a table with multicell My code generating this output Bu that is not align i want to remove space from both row and equal height of each column tried many time but did...

Read file for parameter and value -> skip specific lines

I found the code for my loop in this answer. Now I modified to loop a bit to match my needs and now it looks like this: the loop reads a file with following format: and its working as needed. Now I wa...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答