11月1日笔记(UAC绕过)

news2024/12/23 22:36:51

Bypass UAC

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

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

在实战中,如果测试人员可以绕过 Windows UAC 机制,使非 RID 500 的管理员账户可以不需用户批准直接使用管理员访问令牌,从而获得全部的管理权限。注意,UAC实际上是一种权限保护机制,而 Bypass 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。

Sigcheck下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/sigcheck?spm=5176.28103460.0.0.49e35d27S7T0WC

白名单程序拥有一个共同的特性,就是 Manifest数据中 autoElevate 属性的值为 True。Sigcheck 可以检测程序是否具有 autoElevate 属性,以 ComputerDefaults.exe 为例。

sigcheck.exe /accepteula -m C:\Windows\System32\ComputerDefaults.exe

Strings 可以找出所有具有 autoElevate 属性的程序。

strings.exe /accepteula -s C:\Windows\System32\*.exe | findstr /i "autoElevate"

下面以 ComputerDefaults.exe 为例进行分析,并通过该程序绕过 UAC 实现提权ComputerDefaults.exe 运行后会打开Windows 的默认应用。

直接到 System32 目录下运行 ComputerDefaults.exe 程序,打开“默认应用”界面并未出现 UAC 弹窗。

使用进程监控器 Process Monitor 监控 ComputerDefaults.exe进程的所有操作行为(主要是监控注册表和文件的操作)。可以发现,ComputerDefaults.exe 进程会先查询注册表 HKCU\Software\Classes\ms-settings\shell\open\command 中的数据,发现该路径不存在后,继续查询注册表 HKCR\ms-settings\Shell\Open\Command\DelegateExecute 中的数据并读取。

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

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

再次执行 ComputerDefaults.exe 时,恶意程序就会随着 ComputerDefaults.exe 的启动默认通过 UAC 控制并以提升的权限运行。成功监听到,得到的监听就是管理员权限了。

DLL劫持

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

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

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

测试人员可以通过 DLL 劫持技术来执行攻击载荷,通常可能是为了实现权限的持久化。但是,如果加载 DLL 文件的应用程序是在提升的权限下运行,那么其加载的 DLL 文件也将在相同的权限下运行,因此 DLL 劫持也可以实现权限提升。基于上述原理,通过劫持 UAC 白名单程序所加载的 DLL 文件,测试人员就可以借助白名单程序的自动提升权限来 Bypass UAC。

注意:这些白名单程序所加载的 DLL 文件几乎都位于系统可信任目录中,而这些目录对标准用户来说通常都是不可写的;

所以需要掌握模拟可信任目录的技术。

模拟可信任目录

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

Manifest 文件的主要作用都是提供应用程序或组件的元数据信息,帮助操作系统、浏览器或其他工具正确地加载和管理这些组件。

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

系统在检查可信任目录时,相关函数会自动去掉可执行文件路径中的空格。如果可执行文件位于“C:\Windows \System32”目录(在“Windows”后有一空格,下文统称“模拟可信任目录”)中,系统在检查时会自动去除路径中的空格,这样就通过了最一个条件的检查。基于此原理,测试人员根据可信任目录来创建一个包含尾随空格的模拟可信任目录一个白名单程序复制到模拟可信任目录中,配合 DLL劫持等技术即可成功绕过 UAC。

执行如下命令:

md "\\?\C:\Windows "
md "\\?\C:\Windows \System32"
copy C:\Windows\System32\WinSAT.exe "\\?\C:\Windows \System32\WinSAT.exe"

创建 C:\Windows \System32 模拟可信任目录,并将白名单程序 WinSAT.exe 复制到该目录。启动模拟可信任目录中的 WinSAT.exe,同时使用 Process Monitor 检测其进程所加载的 DLL。使用Process Monitor检测其进程加载的DLL。

如果程序尝试在当前包含空格的目录加载 DLL 并且都失败了,可以编写一个恶意的 DLL 文件并将其放入该目录进行 DLL 劫持,这里选择的是 WINMM.dll。注意,构造的恶意 DLL 需要与原来的 DLL 具有相同的导出函数。可以使用 ExportsToC++,类似的工具还有 AheadLib 获取原 DLL 文件的导出函数并自动生成 C++代码。简单修改生成代码,在 DLLMain 入口函数中加入要执行的操作,并通过 Visual Studio 创建项目,编译生成 64 位 DLL 文件。 将生成的 WINMM.dll 放入前面创建的模拟可信任目录,运行 WinSAT.exe(模拟可信任目录中)后,即可弹出一个关闭了UAC 的命令行窗口。

相关辅助工具

1、UACME

UACME 是一个专用于绕过 Windows UAC的开源项目,目前已包含了 70多种 BypassUAC的方法。在UACME项目中,每种Bypass UAC 的方法都有一个数字编号,由一个名为Akagi.exe(需要自行编译生成)的主程序进行统一调用。

akagi.exe [Key] [Param]
# Key,指定要使用的方法的编号
#Param,指定绕过 UAC后要运行的程序或命令,默认启动一个关闭了 UAC的 CMD 窗口
常见的Key有 23 41 61 62

项目地址:https://github.com/hfiref0x/UACME

先在visual studio上编译好项目,把可执行文件上传到目标机,经尝试发现41能绕过UAC。

Akagi.exe 41 C:\Windows\System32\cmd.exe

配合msf能获得系统管理员权限。

2、Metasploit下的UAC利用

MetaSploit 渗透框架中内置了几个用于绕过 UAC 的模块。

成功利用这些模块,将得到一个关闭了UAC保护的 Meterpreter,然后执行 getsystem命令,可直接提升至SYSTEM 权限。

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

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

相关文章

什么是计算机视觉算法?——深度剖析背后的技术与应用

计算机视觉(Computer Vision)作为人工智能的重要分支,正在逐渐改变我们的生活。从人脸识别到自动驾驶,从医疗影像诊断到视频监控,计算机视觉的应用无处不在,而支撑这一切的正是计算机视觉算法。那么&#x…

客户案例 | Ansys助力Lumotive将设计周期缩短两到三个数量级

“我们使用Ansys Lumerical FDTD、亚马逊云科技(AWS)和 Python API设计了这种超表面,同时使其与CMOS制造公差兼容。Lumerical的AWS解决方案有助于Lumotive将设计周期缩短两到三个数量级,而且不会增加成本或降低准确性。” —— P…

如何打开/关闭 GitLab 的版本检查功能?

本文分享如何打开/关闭 GitLab 的版本检查功能。 极狐GitLab 是 GitLab 的中国发行版【https://dl.gitlab.cn/ncecn6kb】,中文版本对中国用户更友好,文章以私有化部署的极狐GitLab 实例来演示版本检查功能的开启和关闭。强烈不建议关闭该功能&#xff0…

软件测试学习笔记丨Selenium复用已打开浏览器

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/22520 本文为霍格沃兹测试开发学社的学习经历分享,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 说明:本篇博客基于sel…

Java并发常见面试题总结(下)

Map(重要) HashMap 和 Hashtable 的区别 线程是否安全: HashMap 是非线程安全的,Hashtable 是线程安全的,因为 Hashtable 内部的方法基本都经过synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMa…

从比亚迪超越特斯拉,看颠覆全球市场的中国力量

这是比亚迪CEO王传福早年在日本调研电池供应链时发出的感慨。 那时的人们谁也没有想到,比亚迪会从深圳的一家普通的电池供应商开始做起,拼出一条属于自己的“血路”,摇身一变成为名副其实的“电车之王”,并让全球车企仰望。 比亚…

最长方连续方波信号

更多关于刷题的内容欢迎订阅我的专栏华为刷题笔记 该专栏题目包含两部分: 100 分值部分题目 200 分值部分题目 所有题目都会陆续更新,订阅防丢失 题目描述 输入一串方波信号,求取最长的完全连续交替方波信号,并将其输出&#x…

Mac “屏幕保护程序启动或显示器关闭后需要密码“无效

屏幕保护程序启动或显示器关闭后需要密码只能选择“立即”的解决方法: 在 iPhone mirror中设置,每次询问权限。 参考:https://support.apple.com/en-us/120421

Unity自定义数组在Inspector窗口的显示方式

了解 单行高度:EditorGUIUtility.singleLineHeight获取 PropertyField 控件所需的高度:EditorGUI.GetPropertyHeight属性是否在Inspector窗口展开:SerializedProperty.isExpanded可重新排序列表类:ReorderableList绘制纯色矩形:EditorGUI.Dr…

LBPH算法实现人脸匹配

在当今数字化时代,人脸检测技术在众多领域都发挥着至关重要的作用,从安防监控到智能手机的解锁功能等。今天,就让我们深入了解一下其中一种常用的人脸检测方法 ——LBPH(Local Binary Patterns Histograms)&#xff0c…

遥感图像Trento原始数据集下载

遥感图像Trento原始数据集下载 偶然间在某个项目里发现了Trento的完整数据集,不过那个数据集有些奇怪的小改动 虽然我已经不做遥感方向了,不过当初我找这个数据集也是花了很长时间 于是重新整理了一下,就当是方便后来的研究者使用吧 githu…

洛雪音乐 1.6.1| 全网音乐免费听,附加音源

洛雪音乐汇集了多个平台的音乐资源,让你可以免费播放各种热门音乐。有经典怀旧的老歌,有最近火爆网络的热曲,还有很多原创音乐人发布的最新作品。因触动资本利益,现已转为空壳软件,需要导入音源来使用。功能特点包括&a…

Flutter学习笔记(二)------ 第一个flutter项目

一、Dart语法 dart语法较为简单,学过python和c后发现大同小异。不过多介绍 1.函数可变参数 可以类比*args, **kwargs,与之不同的是dart中,*args **kwargs不能同时存在 void a(int a, [float x, double b0.0]) {//do something... }a(10, …

【项目小技巧】【C++】 Debug 日志输出 调用者的函数名,所在文件名和行号

文章目录 一、先编写好输出日志的函数二、使用宏定义新的函数三、效果展示 一、先编写好输出日志的函数 /*** 输出 Debug 信息* param [message] [debug 信息]* param [fileName] [调用该函数的文件名字]* param [line] [在文件的第几行]**/ void DebugLog(std::string messag…

行业应用 | 克劳斯玛菲磁力换模项目案例分享

包装行业的发展趋势表明,绿色包装和技术创新是未来的重要方向。双色注塑机的应用正好符合这一趋势,因为它能够减少材料使用,提高生产效率,同时生产出更具吸引力和功能性的包装产品。随着技术的进步和市场需求的增长,双…

音视频入门基础:FLV专题(22)——FFmpeg源码中,获取FLV文件音频信息的实现(中)

本文接着《音视频入门基础:FLV专题(21)——FFmpeg源码中,获取FLV文件音频信息的实现(上)》,继续讲解FFmpeg获取FLV文件的音频信息到底是从哪个地方获取的。本文的一级标题从“四”开始。 四、音…

Hudi Upsert原理

1. 前言 如果要深入了解Apache Hudi技术的应用或是性能调优,那么明白源码中的原理对我们会有很大的帮助。Upsert是Apache Hudi的核心功能之一,主要完成增量数据在HDFS/对象存储上的修改,并可以支持事务。而在Hive中修改数据需要重新分区或重…

Proteus中单片机IO口外接LED输出低电平时,引脚却一直保持高电平的问题(已解决)

文章目录 前言解决方法后记 前言 一个排阻接八个 LED,方便又省事,但出现了P1端口输出低电平后,仿真引脚却一直显示红色保持高电平不变,用电压表测量显示 2V 左右。 这是仿真的问题,在用开发板时是不会遇到的&#xff…

医院信息化与智能化系统(15)

医院信息化与智能化系统(15) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应…

系统集成项目管理工程师考试时间

系统集成项目管理基础知识考试信息 题量:共 75 道题。考试时间:该科目考试时间为上午 8:30 - 12:30(或下午 14:30 - 18:30,但通常为上午)。基础知识科目最短作答时长 90…