前言:你应该去发光,而不是被照亮!
一、初识UAC
1.用户帐户控制(UAC)简介
在本文中,我们将简要介绍一下用户帐户控制,即UAC。我们还将研究它如何潜在地保护免受恶意软件的攻击并忽略UAC提示可能给系统带来的一些问题。
2.什么是用户帐户控制(UAC)?
Microsoft的Windows Vista和Windows Server 2008操作系统引入了一种良好的用户帐户控制架构,以防止系统范围内的意外更改,这种更改是可以预见的,并且只需要很少的操作量。 换句话说,它是Windows的一个安全功能,它支持防止对操作系统进行未经授权的修改,UAC确保仅在管理员授权的情况下进行某些更改。如果管理员不允许更改,则不会执行这些更改,并且Windows系统保持不变。
3.UAC如何运行?
UAC通过阻止程序执行任何涉及有关系统更改/特定任务的任务来运行。除非尝试执行这些操作的进程以管理员权限运行,否则这些操作将无法运行。如果您以管理员身份运行程序,则它将具有更多权限,因为它将被“提升权限”,而不是以管理员身份运行的程序。
一些没有管理员权限无法完成的操作:
注册表修改(如果注册表项在HKEY_LOCAL_MACHINE下(因为它影响多个用户),它将是只读的) 加载设备驱动程序 DLL注入 修改系统时间(时钟) 修改用户帐户控制设置(通过注册表,可以启用/禁用该设置,但您需要正确的权限才能执行此操作) 修改受保护的目录(例如Windows文件夹,Program Files) 计划任务(例如,以管理员权限自动启动) UAC不会自动阻止恶意软件,其目的不是确定程序是否是恶意软件。这同样取决于用户。如果将以管理员权限执行程序,则将提醒用户并且需要用户确认。-
在开启了UAC之后,如果用户是标准用户, Windows 会给用户分配一个标准Access Token. 如果用户以管理员权限登陆,会生成两份访问令牌,一份是完整的管理员访问令牌(Full Access Token),一份是标准用户令牌 具体的表现形式是如下图,当我们需要其他特权的时候,会弹出窗口,询问你是否要允许以下程序对此计算机更改?如果你有完整的访问令牌(即,你以设备管理员的身份登录,或者你属于管理员组),则可以选择是,然后继续进行。但是,如果已为你分配了标准的用户访问令牌,则会提示你输入具有特权的管理员的凭据。
二、Bypass-UAC提示框的方法
1.白名单程序绕过
有些系统程序是直接获取管理员权限,而不会触发UAC弹框,这类程序称为白名单程序,例如:slui.exe、wusa.exe、taskmgr.exe、msra.exe、eudcedit.exe、eventvwr.exe、CompMgmtLauncher.exe,rundll32.exe,explorer.exe等等。 常见的利用方式有:
DLL注入(RDI技术),一般注入到常驻内存的可信进程,如:explorer DLL劫持,常和注册表配合使用达到劫持目的
DLL劫持
exe文件运行时会加载许多dll文件,这些dll文件的加载顺序是
程序所在目录 系统目录即
SYSTEM32
目录 16位系统目录即SYSTEM
目录PATH
环境变量中列出的目录 同时,dll加载也遵循着Know DLLs注册表项
的机制:Know DLLs注册表项指定的DLL是已经被操作系统加载过后的DLL,不会被应用程序搜索并加载。在注册表Windows
目录 程序加载目录(SetCurrentDirecctory
) HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerKnownDLLS处可以看见这些dll
在knowdlls表项中的dll是预先就加载进内存空间的,被诸多应用调用着,改动需要高权限。
如果我们在应用程序找到正确的dll之前,将我们自己创造的dll放入优先级更高的搜索目录让应用程序优先加载此dll文件,这就造成了dll劫持。但这只是dll劫持的其中一种途径,他有这些途径:
(1) DLL替换:用恶意的DLL替换掉合法的DLL (2) DLL搜索顺序劫持:当应用程序加载DLL的时候,如果没有带指定DLL的路径,那么程序将会以特定的顺序依次在指定的路径下搜索待加载的DLL。通过将恶意DLL放在真实DLL之前的搜索位置,就可以劫持搜索顺序,劫持的目录有时候包括目标应用程序的工作目录。 (3) 虚拟DLL劫持:释放一个恶意的DLL来代替合法应用程序加载的丢失/不存在的DLL (4) DLL重定向:更改DLL搜索的路径,比如通过编辑%PATH%环境变量或 .exe.manifest/.exe.local文件以将搜索路径定位到包含恶意DLL的地方。 (5) WinSxS DLL替换:将目标DLL相关的WinSxS文件夹中的恶意DLL替换为合法的DLL。此方法通常也被称为DLL侧加载 (6) 相对路径DLL劫持:将合法的应用程序复制(并有选择地重命名)与恶意的DLL一起放入到用户可写的文件夹中。在使用方法上,它与(签名的)二进制代理执行有相似之处。它的一个变体是(有点矛盾地称为)“自带LOLbin”,其中合法的应用程序带有恶意的DLL(而不是从受害者机器上的合法位置复制)。
白名单程序
odbcad32.exe
方法:
打开C:Windowssystem32odbcad32.exe,然后通过以下方法打开powershell或者cmd
2.伪装进程PEB绕过UAC
上面在利用COM接口的ShellExec执行命令的时候,因为执行该操作的进程身份是不可信的,所以会触发UAC弹窗。为了能够迷惑系统,通过修改PEB结构,让系统误认为这是一个可信进程,伪装的可信进程可以是calc.exe、rundll32.exe、explorer.exe等。
3.无文件技术
“无文件攻击”是一种攻击策略,其出发点就是避免将恶意文件放在磁盘上,以逃避安全检测。无文件四种攻击形式: 恶意文档比如:在word中加入恶意的宏代码实现命令执行,又或者邮件中。 恶意脚本常用的脚本引擎:powershell.exe,cscript.exe,cmd.exe 和 mshta.exe,同样不生成恶意二进制文件。 恶意本地程序交互例如:rundll32.exe、wmi等,详细参考这里。 恶意内存代码直接生成纯shellcode,通过其他方式加载到内存执行。
4.UACME项目
利用方式主要可以分为两大类
各类UAC白名单程序的DLL劫持(Dll Hijack) 各类提升权限的COM接口利用(Elevated COM interface) 项目的主程序为Akagi,其中包含了所有的method,使用vs2019本地编译后可以使用akagi32 41或者akagi64 41启动程序,41这个指的是README中描述的方法索引,运行后可以直接得到管理员权限的cmd窗口。
getsystem``getuid
项目的Source目录存储的是所有子项目的源码,其中Source/Shared存放的是被所有子项目共同引用的一些函数。# 三、使用Metasploit绕过UAC的一些方法``首先通过explloit获得目标主机的meterprter。获得meterpreter会话1后,输入以下命令以检查是否是system权限
三、windows绕过UAC的一些方式
1.Windows权限升级绕过UAC保护
此模块将通过进程注入使用可信任发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。
代码语言:javascript复制msf > use exploit/windows/local/bypassuac
msf exploit windows/local/bypassuac) > set session 1
msf exploit(windows/local/bypassuac) > exploit
现在以下命令以确定system权限特权.
代码语言:javascript复制getsystem
getuid
很好, 这里我们获得了NT AUTHORITYSYSTEM 权限,现在如果你输入“ shell ”命令,你将获得具有管理员权限的命令提示符。
2.Windows权限提升绕过UAC保护(内存注入)
此模块将通过进程注入使用可信任的发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。在普通技术中,该模块使用反射式DLL注入技术并只除去了DLL payload 二进制文件,而不是三个单独的二进制文件。但是,它需要选择正确的体系架构(对于SYSWOW64系统也使用x64)。如果指定exe::custom,应在单独的进程中启动 payload 后调用ExitProcess()。
代码语言:javascript复制msf > use exploit/windows/local/bypassuac_injection
msf exploit(windows/local/bypassuac_injection) > set session 1
msf exploit(windows/local/bypassuac_injection) > exploit
现在输入以下命令以确定system权限特权。
代码语言:javascript复制getsystem
getuid
最终你将获得NT AUTHORITYSYSTEM 权限,现在如果你输入“ shell ”命令,你将获得具有管理员权限的命令提示符。
3.绕过Windows UAC保护(通过FodHelper注册表项)
此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定exe:custom,则应在单独的进程中启动payload后调用ExitProcess()。
代码语言:javascript复制msf > use exploit/windows/local/bypassuac_fodhelper
msf exploit(windows/local/bypassuac_fodhelper) > set session 1
msf exploit(windows/local/bypassuac_fodhelper) > exploit
从给定的meterprer中,您可以看到meterpreter会话2已打开,现在输入以下命令以确定system权限特权。
代码语言:javascript复制getsystem
getuid
很好, 这里我们获得了NT AUTHORITYSYSTEM 权限,现在如果你输入“ shell ”命令,你将获得具有管理员权限的命令提示符。
4.Windows权限升级绕过UAC保护(通过Eventvwr注册表项)
此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows事件查看器时调用的自定义命令来绕过Windows UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定EXE ::Custom,则应在单独的进程中启动payload后调用ExitProcess()。
代码语言:javascript复制msf > use exploit/windows/local/bypassuac_eventvwr
msf exploit(windows/local/bypassuac_eventvwr) > set session 1
msf exploit(windows/local/bypassuac_eventvwr) > exploit
从给定的meterpreter中,您可以看到meterpreter会话2已打开,现在输入以下命令以确定system权限特权。
代码语言:javascript复制getsystem
getuid
您将再次获得NT AUTHORITYSYSTEM 权限。
5.Windows权限升级绕过UAC保护(通过COM处理程序劫持)
此模块将通过在hkcu配置单元中创建COM处理程序注册表项来绕过Windows UAC。当加载某些较高完整性级别进程时,会引用这些注册表项,从而导致进程加载用户控制的DLL。这些DLL包含导致会话权限提升的payload。此模块修改注册表项,但在调用payload后将清除该项。这个模块需要payload的体系架构和操作系统匹配,但是当前的低权限meterpreter会话体系架构中可能不同。如果指定exe::custom,则应在单独的进程中启动payloa后调用ExitProcess()。此模块通过目标上的cmd.exe调用目标二进制文件。因此,如果cmd.exe访问受到限制,此模块将无法正常运行。
代码语言:javascript复制msf > use exploit/windows/local/bypassuac_comhijack
msf exploit(windows/local/bypassuac_comhijack) > set session 1
msf exploit(windows/local/bypassuac_comhijack) > exploit
从给定的meterpreter中,您可以看到meterpreter会话2已打开,现在键入以下命令以确定system权限特权。
代码语言:javascript复制getsystem
getuid
最后使用shell进行连接。
总结:
绕过UAC的保护有很多种方式,有白名单的、还有注册表劫持等等。本文仅作研究学习分享。