在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 劫持过程
-
选择目标程序:首先,攻击者需要选择一个正常的程序,该程序会在执行时加载DLL文件,并且该程序未能正确指定DLL的加载路径。
-
创建恶意DLL:接下来,攻击者会创建一个恶意的DLL文件,文件名应与目标程序所需加载的DLL相同,并将其放置在目标程序可能搜索到的路径中。
-
诱导程序加载恶意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的过程通常包含以下步骤:
-
启动SSPI通信:攻击者通过SSPI API与Windows系统建立安全通信,选择合适的身份验证协议(例如Kerberos或NTLM)。
-
选择目标程序:攻击者选择一个需要管理员权限执行的程序(如Windows系统自带的管理工具),并通过SSPI协议触发该程序的身份验证操作。该操作将以管理员权限执行,而不弹出UAC提示。
-
触发特权操作:成功建立SSPI通信后,攻击者通过特定的SSPI API触发程序的特权操作,从而提升当前进程的权限。
通过这种方式,攻击者不仅能够避免UAC的干扰,还能在操作过程中避免被传统反病毒软件和安全监控工具检测到。
总结
本文详细介绍了Windows常见的三种提权方法:autoElevate白名单、DLL劫持与SSPI绕过UAC。了解这些技术背后的原理和攻击步骤,不仅有助于渗透测试人员识别潜在的安全漏洞,还能够帮助系统管理员增强防御措施,降低系统被攻击的风险。
原文 https://blog.csdn.net/2301_79518550/article/details/145670839