​1. 什么是 UAC

用户帐户控制 (UAC) 是 Windows Vista 和 Windows Server 2008 开始引入的一种访问控制功能。借助 UAC,应用和任务将始终在非管理员帐户的安全上下文中运行,除非管理员专门授予管理员级别的访问系统权限。 UAC 可阻止自动安装未经授权的应用并防止意外更改系统设置。

我们在运行非微软官方的软件时,即使我们的账号是属于本地管理员组的,也会以普通用户的权限来运行软件。当软件需要更改系统配置或者修改系统关键位置时,往往需要提升自己的权限来执行这些操作,此时UAC就会提醒用户“你要请允许此应用对你的设备进行更改吗?” 。一但用户点击了“是”, 就会提升该软件的权限成管理员权限,接着该软件就可以修改关键的系统配置和路径了。

2. 为什么要绕过 UAC ?

在引入 UAC 后,即使我们控制的账号是属于本地管理员组的,也会以普通用户的权限来运行软件。但我们的很多操作是需要管理员权限的,如上一篇文章中的获取访问
token 权限提升 T1134 Windows 令牌窃取及防御 。

这里可能会有个疑问,在获取 token 的文章中,我们不是可以在 cmd 上面以管理员身份来运行,然后在 UAC 窗口点“是”来获取管理员权限的 cmd 吗?为什么还要绕过 UAC ?

这是因为,我们获取主机的权限时,一般只是得到一个执行命令的 shell,是无法点击 UAC 窗口来同意提升权限的,所以我们这个 shell ,只是一个普通权限的 shell ,很多操作都做不了。

3. 如何绕过 UAC ?

在介绍绕过 UAC 的原理前,需要注意的是,Windows10 通过标记其完整性级别来保护流程。 完整性级别是信任指标。 “高” 完整性应用程序是执行修改系统数据(如磁盘分区应用程序)的任务的应用程序,而 “低” 完整性应用程序可执行可能会危害操作系统的任务,例如 Web 浏览器。 具有较低完整性级别的应用无法修改具有较高完整性级别的应用程序中的数据。 当标准用户尝试运行需要管理员访问令牌的应用时,UAC 要求用户提供有效的管理员凭据。

这里的高完整性程序,一般是系统的关键程序(如在 c:\windows\system32\ 目录中的微软签名的程序),这些程序是受信任的,在运行的时候会自动提升权限而不需要在 UAC 窗口中确认。绕过 UAC 的技术就是利用了这些自动提升权限的程序。

注意,要绕过 UAC,必须是该用户属于管理员组。

在下面的 github 项目上比较完整地列出了绕过 UAC 的方式
https://github.com/hfiref0x/UACME
这些技术大致可以分为两类:

  1. 注册表劫持。
  2. dll 劫持。

注册表劫持

注册表一般用来保存一些系统配置,当程序运行时,会读取注册表中的配置来运行。如 Windows 启动项就是保存在注册表中的,当开机时会读取注册表中的启动项来决定启动哪些程序。运行 regedit 可以查看注册表。


注册表劫持的原理是一些高完整性程序会读取注册表中的内容来作为命令执行,而这些内容是普通权限的程序可以修改的,因此只要把这些注册表的内容修改成恶意程序的路径,恶意程序就可以被高完整性程序执行,并且获得高完整性程序的管理员权限。常用的被劫持程序是 eventvwr.exe、mmc.exe 和 fodhelper.exe (windows 10)

通常 HKEY_CURRENT_USER (缩写是HKCU)中的注册表项是当前用户不需要管理员权限也可以修改的(上图箭头的注册表项),这就给注册表劫持提供了机会。

寻找注册表劫持的一般思路如下:

  1. 通过使用SysInternals工具 sigcheck
    (https://docs.microsoft.com/en-us/sysinternals/downloads/sigcheck)查看哪些程序可以自动提升权限。
  2. 通过 Process Monitor
    (https://docs.microsoft.com/en-us/sysinternals/downloads/procmon) 程序来监控受信任程序的注册表操作,查找 NAME_NOT_FOUND 的 HKCU 注册表读取操作,并且该注册表项的值作为命令行被受信任程序读取并执行。

下面以 eventvwr.exe 程序的劫持为例, eventvwr.exe 是 windows 事件管理器, 用 sigcheck 查看,发现它是受信任的程序,可以自动提升权限

sigcheck.exe -m c:\windows\system32\eventvwr.exe

接着打开 process monitor 查看 eventvwr.exe ,把过滤器设置成下面,然后打开 eventvwr.exe

可以看到它对很多注册表进行了读取,从下图可以看到,它对

HKCU\Software\Classes\mscfile\shell\open\command

进行了读取,返回 NAME NOT FOUND ,也就是没有该项,接着它对
HKCR\mscfile\shell\open\command 进行了读取,返回 SUCCESS。

让我们看看 HKCR\mscfile\shell\open\command 中的内容,可以看到 eventvwr.exe 读取了该项并执行 mmc.exe 。

由于eventvwr.exe是先读取
HKCU\Software\Classes\mscfile\shell\open\command ,发现不存在,然后才读取 HKCR\mscfile\shell\open\command 中的内容,并且这两个注册表项名称比较相似,我们可以猜测 eventvwr.exe 在HKCU 中的 command 键存在时,会先读取该键的值来执行。而 HKCU 是当前用户可以修改的 ,如果我们修改成恶意程序的路径,就有可能导致 eventvwr.exe 执行我们的程序,并且继承 eventvwr.exe 的管理员权限。

下面先登录之前搭建的 windows 7 虚拟机,输入 .\admin (登录本机) 和密码

打开 cmd , 查看 admin 账号是否属于本地管理员

net localgroup administrators

发现 admin 账号属于本地管理员,但现在的 cmd 窗口是属于普通权限的,无法对系统文件进行修改,如向 c:\windows\system32 目录添加文件,所以我们要绕过 UAC 提升权限

通过下面命令添加注册表,并执行 eventvwr.exe

reg.exe add hkcu\software\classes\mscfile\shell\open\command /ve /d "c:\windows\system32\cmd.exe /c \"start cmd\"" /f
eventvwr.exe

运行后会新打开一个 cmd 窗口,该窗口为管理员权限,成功绕过 UAC

利用成功后清除注册表

reg.exe delete hkcu\software\classes\mscfile /f >nul 2>&1

这是在 windows 7 中通过劫持注册表绕过 UAC 的方法。该方法在 Windows 10 RS2 (15031) 后的版本失效了。

这里可以使用 Windows 10 中的 fodhelper.exe,该程序也是受信任的程序, 通过下面命令添加注册表,可以劫持 fodhelper.exe 运行恶意程序。

reg.exe add hkcu\software\classes\ms-settings\shell\open\command /ve /d "c:\windows\system32\cmd.exe" /f
reg.exe add hkcu\software\classes\ms-settings\shell\open\command /v "DelegateExecute" /f
fodhelper.exe

绕过后 UAC ,清除注册表

reg.exe delete hkcu\software\classes\ms-settings /f >nul 2>&1

这里推荐使用修改注册绕过 UAC 的方法,因为不需要把文件上传到目标主机上。

dll 劫持

dll 劫持是也是绕过 UAC 常用的方法,在 UACME 项目中很多绕过方法都是使用 dll 劫持。dll 劫持也是一个比较大的主题。

一般操作如下,假设受信任的程序 c:\windows\system32\test\test.exe 会加载 c:\windows\system32\test.dll (不在 KnowsDLLS里面),如果把一个恶意的 dll 文件放到受信任的程序同一目录c:\windows\system32\test\ 上,并且命名为 test.dll, 程序就会优先加载当前目录下的 test.dll 文件(我们的恶意 dll),因此原本要加载的 c:\windows\system32\test.dll 文件就被劫持了。

通过这个思路,可以让受信任的程序加载恶意 dll 来执行 dll 中的代码,从获取管理员权限。

这里还有一个问题,受信任的程序存放的目录一般是系统关键路径,是需要管理员权限才能修改的,我们只有普通权限,是无法把 dll 文件复制到那里的。

这时要用到一个 COM 对象 IFileOperation ,这是一个自动提升权限的 COM 对象。COM 对象可以理解为一个接口,可以通过调用它来实现一些操作。该COM对象包含许多有用的方法,例如文件系统对象(文件和文件夹)的复制/移动/重命名/删除。

COM对象依赖于进程状态API(PSAPI)以标识它们在哪个进程中运行。PSAPI会解析进程 PEB 来获取当前进程的信息,但是攻击者可以获取自己进程的句柄并覆盖PEB来欺骗PSAPI,当 IFileOperation 对象判断当前进程是可信进程时,就会提升权限来运行。

这个操作有点复杂,大致过程是:恶意程序修改自身的 PEB 信息,伪装成 explorer.exe 可信程序,当调用 IFileOperation 对象复制 dll 到可信路径时, IFileOperation 对象认为恶意程序就是可信程序,就会自动提升权限,把 dll 复制到可信目录。

这里有具体的实现方法:
https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Bypass-UAC/Bypass-UAC.ps1

以 sysprep.exe 的 dll 劫持为例

把项目 clone 下来:

git clone https://github.com/FuzzySecurity/PowerShell-Suite.git
cd PowerShell-Suite/Bypass-UAC
powershell -exec bypass
Import-Module .\Bypass-UAC.ps1
Bypass-UAC -Method UacMethodSysprep

成功弹出具有管理员的权限的 powershell 窗口

我们打开 C:\Windows\System32\sysprep 目录,一个新的 dll 已经被复制到该目录下了,每次运行 sysprep.exe 都会加载该 dll

绕过 UAC 的方法有很多,这里只简单介绍了下常用的方式,更多方式可以查看 https://github.com/hfiref0x/UACME 项目,上面目前有 64 种绕过方式,把该项目下载下来,使用 vs 2019 编译后就可以使用所有的绕过方式了。

如要使用 fodhelper.exe 绕过 UAC
Akagi64.exe 33 cmd


Bypass UAC 防御

在本地安全策略-》安全选项-》用户账户控制:管理员批准模式中管理员的提升权限提示的行为设置成同意提示。这样即使是更改系统配置,也会出现 UAC 确认窗口,这个设置可以防御注册表劫持。

把无关用户从本地管理员组中删除。
将Windows更新到最新版本和补丁程序级别,以利用针对UAC绕过的最新保护措施。

安装杀毒软件,对特定位置注册表的操作及恶意 dll 的落地进行查杀。

本文章也在我的公众号发布

权限提升 T1548.002 绕过UAC相关推荐

  1. Windows权限提升—令牌窃取、UAC提权、进程注入等提权

    Windows权限提升-令牌窃取.UNC提权.进程注入等提权 1. 前言 2. at本地命令提权 2.1. 适用范围 2.2. 命令使用 2.3. 操作步骤 2.3.1. 模拟提权 2.3.2. at ...

  2. 操作系统权限提升(十五)之绕过UAC提权-基于白名单DLL劫持绕过UAC提权

    系列文章 操作系统权限提升(十二)之绕过UAC提权-Windows UAC概述 操作系统权限提升(十三)之绕过UAC提权-MSF和CS绕过UAC提权 操作系统权限提升(十四)之绕过UAC提权-基于白名 ...

  3. 第四章 权限提升分析及防御

    查询系统信息systeminfo 如果要查看特定的信息,可以使用systeminfo | findstr /B /C:"OS名称" /C:"OS版本" 主机名H ...

  4. 操作系统权限提升(十二)之绕过UAC提权-Windows UAC概述

    系列文章 操作系统权限提升(一)之操作系统权限介绍 操作系统权限提升(二)之常见提权的环境介绍 操作系统权限提升(三)之Windows系统内核溢出漏洞提权 操作系统权限提升(四)之系统错误配置-Tus ...

  5. 通过Bypass UAC进行权限提升

    什么是UAC 用户账户控制(User Account control,UAC)是windows系统采用的一种控制机制,可以阻止自动安装未经授权的应用 并防止意外更改系统设置,有助于防止恶意软件损坏计算 ...

  6. 内网渗透测试:Windows权限提升思路

    我的Freebuf:https://www.freebuf.com/author/MrAnonymous 我的博客:https://whoamianony.top/ 文章目录 Windows系统内核溢 ...

  7. 《内网安全攻防:渗透测试实战指南》读书笔记(四):权限提升分析及防御

    目录 前言 一.系统内核溢出漏洞提权分析及防范 1.通过手动执行命令发现缺失补丁 (1)MS16-032(KB3139914) 2.利用MSF发现缺失补丁 3.Windows Exploit Sugg ...

  8. Kali木马免杀,权限提升(kali本地木马免杀)

    由于现在版本的木马查杀工具更新之快,木马在计算机上基本是裸奔的,再好的免杀技术也逃不过工具的查杀,下面是我研究很久的本地木马免杀,基本都是网上的百度总结,把可以是实现免杀的木马生成进行了总结. 免杀成 ...

  9. linux系统利用可执行文件的Capabilities实现权限提升

    一.操作目的和应用场景 Capabilities机制是在Linux内核2.2之后引入的,原理很简单,就是将之前与超级用户root(UID=0)关联的特权细分为不同的功能组,Capabilites作为线 ...

最新文章

  1. java 读取txt字符串_java读取txt文档需要匹配文档中的字符串
  2. 很高兴加入 英文_少和外国人说quot;You look youngquot;,她们可能会不高兴!
  3. Linux在超级计算机领域一统天下
  4. ubuntu下安装chrome浏览器和flash插件
  5. 初次接触 Lottie
  6. Sqlite大数据量查询优化比较-转
  7. 树形目录生成器.bat
  8. Ubuntu20.04配置mysql环境及远程连接
  9. ZOJ 1914 Arctic Network
  10. stm32mp1 Cortex M4开发篇6:TIM定时器中断
  11. 测试如何进行有效的需求分析
  12. 效率源希捷硬盘修复(4.2版)及程序下载
  13. 电动汽车动力电池SOC估算模型电池参数辨识模型【10例】
  14. 用友u8安装应用服务器输什么,用友u8服务器安装教程
  15. 一个2022本科生的秋招总结 (大疆、Arm、小米、荣耀、美团、联发科等)
  16. MyBatis级联查询
  17. 【西电—英美国家概况(英美概况/英美文化)2023第一学期】第九章参考课后答案
  18. 离散数学 代数系统思维导图
  19. GPS定位,经纬度附近地点查询–C 实现方法
  20. (分治法)查找最大和次大元素

热门文章

  1. linux 守护进程管理 supervisor 简介 可用于docker容器内守护进程
  2. rtp 多媒体流同步控制 实时传输协议 简介
  3. python3 多线程简介
  4. docker 镜像名 tag 为none 的解决方案
  5. linux c open fopen freopen 文件操作函数
  6. openssl 编译参数选项
  7. Ubuntu命令行下安装,卸载软件包的过程
  8. VFS文件系统结构分析 与socket
  9. Design Pattern - Abstract Factory(C#)
  10. DirectFB编译环境