红队分享-如何挖掘Windows Bypass UAC(第一课)

倾旋
倾旋
技术分享|2020-3-2|最后更新: 2023-6-22|
type
status
date
slug
summary
tags
category
icon
password
URL

什么是UAC

用户帐户控制(User Account Control,简写作UAC)是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制。其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权,以达到帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统的效果。
先观察一下:
  • 在Windows 7下打开注册表
notion image
  • 在Windows 7上管理计算机
notion image
  • 在Windows 10上管理计算机
notion image
有的需要授权、有的不需要,是因为UAC是分授权等级的:
首先请按Win+R,输入gpedit.msc,打开组策略。
然后我们在左侧窗口找到“计算机配置–Windows设置–安全设置–本地策略–安全选项”,再在右侧窗口找到“用户帐户控制: 管理员批准模式中管理员的提升权限提示的行为”,双击该条目,打开设置窗口,如下图:
notion image
  • 不提示直接提升:关闭UAC,需要权限时直接提升权限。
  • 在安全桌面上提示凭据:需要权限时在安全桌面上输入管理员密码提升权限。
  • 在安全桌面上同意提示:需要权限时在安全桌面上选择“允许”提升权限。
  • 提示凭据:需要权限时在普通窗口中输入管理员密码提升权限。
  • 同意提示:需要权限时在普通窗口中选择“允许”提升权限。
  • 非 Windows 二进制文件的同意提示:(默认设置)当非 Microsoft 应用程序的某个操作需要提升权限时,选择“允许”提升权限。

为什么有的应用程序不需要提示UAC?

因为普通应用执行权限有限,某些操作必然会要求更高的管理员权限。此时,通常就需要一个权限提升的操作。程序可以向系统请求提权,系统会将此请求通过提一个提示框,请用户确认。
如果当前用户的用户组权限不是管理员,提权操作是要求输入管理员密码的,这点和在Linux中的相应操作类似。
  • 程序只能在运行前要求提权。如果已经在运行了,那么将失去申请提权的能力
  • 权限提升仅对此次进程有效
提升权限的操作大致有两个:
  • 自动提权请求
  • 手动提权请求
手动提权就是“以管理员身份运行”,自动提权请求就是程序本身就一运行就开始申请权限,如:注册表编辑器
在开发的过程中,程序员若要开发一个程序,可以在编译器配置,写入一个配置文件,用于向系统标识该应用程序是必须要管理员权限运行的。

manifest文件

这个文件本质上是一个XML文件,用于标识当前应用程序的配置属性。
notion image
  • aslnvoker 默认权限
  • highestAvailable 最高权限
  • requireAdministrator 必须是管理员权限
我编译选项调整为requireAdministrator,当用户运行程序后,将获得管理员权限会话,不需要绕过UAC了。
manifest中其实还有其他属性,如:autoElevate(自动提升)
拥有自动权限提升属性的文件,当默认以管理员权限运行,不需要经过用户的授权。

寻找auto Elevate

工具地址:https://github.com/g3rzi/Manifesto
notion image
通过不断遍历autoElevate属性,寻找自动权限提升的程序。
notion image
我使用Powershell启动:C:\Windows\system32\eudcedit.exe
发现没有弹出UAC确认,没有继承Powershell的权限,它的权限是High。
假设,如果C:\Windows\system32\eudcedit.exe存在一个DLL劫持漏洞,那么普通用户就可以用低权限绕过UAC确认,以高权限执行任意代码。

手动Bypass UAC

C:\Windows\system32\odbcad32.exe 该程序用于配置ODBC数据源,但提供了一个输入点,那就是文件浏览器,通过文件浏览器我们可以打开一个管理员权限的Powershell。
notion image
notion image
使用Powershell启动其他程序,也都是以管理员权限运行:
下一章,将分析几个UAC的绕过例子。
©2021-2024 倾旋. All rights reserved.