UAC绕过
我们可能以为,拿到了管理员权限的 shell 已经大功告成了,实际上并不是这样。帐号与帐号之间有权限的差异,而管理员上下文的会话则有完整度(Integrity)的差异。对于管理员用户,默认完整度是中等,如果要充分利用管理员的权限,所需要的完整度等级是高,而SYSTEM上下文的完整度是 SYSTEM。
举个实际例子的话,攻击者发送了一份带有宏的恶意文件,并且受害者打开了它使得载荷得以成功执行,受害者当前的帐号是本机的本地管理员。但是返回的 beacon 却是中等完整度的,一些敏感操作无法执行,例如添加新的用户、使用 mimikatz 导出 SAM 数据库等。以下3个截图分别是中等完整性、高级完整性、以及系统级完整性的截图,我们可以通过命令 whoami /groups 查看。至于具体怎么操作,直接运行cmd.exe则默认以中等完整度运行,右键选择以管理员权限运行,则是高级完整度。通过PsExec生成SYSTEM权限的cmd.exe,则是系统级完整度。
UAC 用于允许管理员用户不对每个执行的进程授予管理员权限。这通过使用默认用户的低权限令牌来实现的。当管理员以管理员身份执行某个进程时,将执行 UAC 提升,使用特权令牌创建进程。如果用户属于管理员组,则某些程序会自动提升。这些二进制文件在其清单中具有值为 True 的 autoElevate 选项。需要注意的是,这些二进制文件由 Microsoft 签名的。
为了绕过 UAC,即从中等完整性等级提升到高完整性等级,攻击者会使用这种二进制文件来执行任意代码,因为它将以高级完整性等级执行,例如 fodHelper.exe。
关于 UAC 的绕过方式有多种,但背后的根本原因是一致的:以高完整度的上下文执行程序或代码。UACME (https://github.com/hfiref0x/UACME) 工具利用了 Windows 内置的自动以高完整度运行的程序实现UAC绕过,在目前依然有效。在编译后选择合适的 key 以及要运行的程序,便可以提升完整度等级了。