// 红队渗透 · 2025-05-24

Windows bypassUAC 提权技法详解(二)

在Windows操作系统中,用户账户控制(UAC)旨在防止恶意软件未经授权以管理员权限执行。尽管UAC提高了系统安全性,攻击者仍能利用Windows内置的漏洞绕过UAC,实现权限提升。本文将详细介绍几种常见的通过绕过UAC实现提权的方法。


1. autoElevate 白名单

在Windows操作系统中,用户账户控制(UAC)是一项重要的安全功能,旨在防止恶意软件未经用户确认以管理员身份执行程序。然而,某些Windows自带的系统工具在设计时就默认配置为以管理员权限自动运行,而不弹出UAC提示。其背后的原理是,这些程序在manifest配置文件中通过设置autoElevate属性为True来自动提升权限。

1.1 autoElevate属性

autoElevate是微软用于某些特定系统工具的配置,确保这些程序在运行时可以自动获得管理员权限,无需用户交互或确认。这些程序通常被微软列入白名单,因为它们是经认证的、被认为安全的工具。

以下是一些常见的带有autoElevate属性的Windows自带程序:

  • CompMgmtLauncher.exe:计算机管理工具
  • msconfig.exe:系统配置
  • taskmgr.exe:任务管理器
  • perfmon.exe:性能监视器
  • cleanmgr.exe:磁盘清理工具
  • sdclt.exe:备份与还原
  • dccw.exe:显示颜色校准
  • eventvwr.exe:事件查看器
  • fodhelper.exe:功能启用助手
  • ComputerDefaults.exe:计算机默认设置工具

这些程序会在执行时自动提升权限,不会弹出UAC提示,从而成功绕过UAC保护。攻击者可以利用这一点,执行具有管理员权限的恶意操作。

1.2 查找autoElevate程序

利用工具如sigcheck或strings可以检测系统中具有autoElevate属性的程序。例如,以下命令可以帮助批量查找这些程序:

使用strings工具查找:

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

使用sigcheck工具查找:

sigcheck.exe -m C:\Windows\System32\*.exe | findstr "autoElevate"

这两个命令会列出系统中所有带有autoElevate属性的程序,攻击者可以基于这些程序执行提权操作。

1.3 利用方式

手动操作:

如果攻击者可以访问Windows注册表,便可以手动创建或修改Shell\Open\command键值对,指向cmd.exe路径。这样可以实现通过管理员权限执行命令,获得高权限的Shell。

代码实现:

可以参考以下实现方法:

参考代码实现

2. DLL劫持

2.1 背景与原理

DLL劫持(Dynamic-Link Library Hijacking)是一种常见的提权技术,攻击者利用程序加载动态链接库(DLL)时的路径搜索顺序,诱使目标程序加载恶意的DLL文件,而非其预期的合法DLL文件。通常,这种攻击方式依赖于目标程序没有正确指定DLL的加载路径,或者存在路径搜索漏洞,导致恶意DLL被加载并执行。

为了确保DLL劫持攻击的成功,攻击者通常会选择一个需要管理员权限执行的正常程序,并通过在程序的工作目录或某个可搜索到的路径下放置恶意DLL来实现提权。

2.2 劫持过程

  1. 选择目标程序:首先,攻击者需要选择一个正常的程序,该程序会在执行时加载DLL文件,并且该程序未能正确指定DLL的加载路径。

  2. 创建恶意DLL:接下来,攻击者会创建一个恶意的DLL文件,文件名应与目标程序所需加载的DLL相同,并将其放置在目标程序可能搜索到的路径中。

  3. 诱导程序加载恶意DLL:通过将恶意DLL放置在目标程序的工作目录或系统搜索路径中,当程序运行时,它会错误地加载恶意DLL文件,导致执行攻击者注入的恶意代码。

3. SSPI绕过UAC

3.1 SSPI概述

在Windows操作系统中,**Security Support Provider Interface(SSPI)**是一套用于与不同身份验证协议(如Kerberos、NTLM等)交互的接口。SSPI允许程序通过各种身份验证和加密协议提供安全服务,包括身份验证、消息加密、数字签名等。利用SSPI进行UAC绕过是一种较为高效的提权方法,攻击者可以通过特定的身份验证操作绕过UAC提示,从而提升权限。

常见的SSPI协议包括:

  • NTLM:Windows NT LAN Manager协议,用于网络环境中的身份验证。
  • Kerberos:广泛用于Windows域的身份验证协议。
  • Negotiate:自动选择使用Kerberos或NTLM,取决于支持情况。

3.2 SSPI绕过UAC的原理

SSPI绕过UAC的核心在于,SSPI允许通过网络协议进行身份验证,而身份验证操作通常不需要用户的交互,因此可以绕过UAC的提示。身份验证请求在系统级别进行处理,而无需直接向用户请求权限,从而能够避免UAC的阻碍。通过精确操控SSPI的调用和交互,攻击者可以通过特定的身份验证请求直接提升进程的权限。

其中,一个著名的攻击方法是利用Negotiate协议,攻击者通过触发特定的身份验证操作来绕过UAC,并且通过SSPI触发提升权限的操作。由于Negotiate协议会根据环境选择Kerberos或NTLM协议,攻击者可以通过操控身份验证请求,触发管理员权限的操作。

3.3 SSPI绕过UAC的实现步骤

实现SSPI绕过UAC的过程通常包含以下步骤:

  1. 启动SSPI通信:攻击者通过SSPI API与Windows系统建立安全通信,选择合适的身份验证协议(例如Kerberos或NTLM)。

  2. 选择目标程序:攻击者选择一个需要管理员权限执行的程序(如Windows系统自带的管理工具),并通过SSPI协议触发该程序的身份验证操作。该操作将以管理员权限执行,而不弹出UAC提示。

  3. 触发特权操作:成功建立SSPI通信后,攻击者通过特定的SSPI API触发程序的特权操作,从而提升当前进程的权限。

通过这种方式,攻击者不仅能够避免UAC的干扰,还能在操作过程中避免被传统反病毒软件和安全监控工具检测到。

总结

本文详细介绍了Windows常见的三种提权方法:autoElevate白名单、DLL劫持与SSPI绕过UAC。了解这些技术背后的原理和攻击步骤,不仅有助于渗透测试人员识别潜在的安全漏洞,还能够帮助系统管理员增强防御措施,降低系统被攻击的风险。

原文 https://blog.csdn.net/2301_79518550/article/details/145670839