视频教程和更多福利在我主页简介或专栏里
(不懂都可以来问我 专栏找我哦)
更多文章分享:Track 安全社区 — 掌控安全在线教育- Track 知识社区 - 掌控安全在线教育 - Powered by 掌控者
在这篇文章中将介绍如何在启用了Windows Defender的Windows机器上规避OpenEDR,并且如何将权限提升到高完整性用户(High Integrity User),然后转储机器凭证。
大多数EDR通过挂钩用户模式Windows dll来监视API调用。例如,如果程序使用kernel32.dll来调用Windows API函数,这些函数会调用ntdll.dll中的Native API,EDR就会将自己挂钩到这些DLL中,监控任何可疑的API调用,比如VirtualAlloc或CreateThread,这些函数通常用于加载shellcode。
为了规避这些钩子,我们将使用DInvoke,它可以在内存中复制DLL并动态加载API调用,而不是从DLL加载API调用。
为了完成这个项目,我在一台Windows虚拟机上工作,安装了Visual Studio,并且同时运行着Windows Defender和OpenEDR,且已将管理员的文档文件夹添加为这两个程序的排除项,以便我们可以正常工作。
为了简化操作,我将修改一个已经创建好的shellcode加载器,它使用了DInvoke,原作者是Kara-4search。
打开项目后,我们看到它有硬编码的shellcode,我们可以将其替换为我们自己的代码。
然而,我将对其进行修改,使其从一个.bin文件加载shellcode,该文件将从我的Web服务器下载。
我将添加System.Net库。
我们可以使用WebClient的DownloadData函数从URL将文件作为字节下载。
现在我将暂时保存项目。我将使用InvisibilityCloak对其进行混淆,就像我在以前的文章中做的那样,以确保它能够绕过签名检测。
我将把项目重命名为“Jinzo”,然后反转所有字符串。
现在,让我们打开项目,我们将看到它已经被混淆了。
在编译之前,我将更改属性,使其成为一个 Windows 应用程序。这样,受害者用户就看不到打开的控制台。
现在,我将替换所有 "DInvoke" 这个词的实例。
现在将其编译为发布版,并选择 x64 架构。
现在我们的加载器已经准备好了。
为了确保Defender不会将这个可执行文件检测为恶意软件,我将运行DefenderCheck。
没有发现威胁!
现在让我们切换到我的Kali机器,创建我们的shellcode,它将是一个Sliver C2 beacon。
我将启动Sliver。
并生成一个HTTP beacon。
我本可以直接生成输出文件为shellcode,但在我的实验中,我发现如果我先生成一个可执行文件,然后用Donut转换为.bin格式,这样更能避开检测。
我将使用Donut将beacon转换为.bin格式,使用 -e 3 进行加密,并使用 -b 1 不添加Amsi绕过,因为所使用的Amsi绕过会被检测到。
现在,我将启动我的Python HTTP服务器,从中下载shellcode。
并在Sliver中启动HTTP监听器。
现在,一切准备就绪,我们将可执行文件交给我们的虚拟受害者!
我将登录到OpenEDR平台,关闭所有旧的警报,并只筛选在我们对受害者运行有效载荷时可能创建的新警报。
现在让我们以受害者用户身份登录Windows,我将其命名为lain,假设我们成功地诱使用户下载了我们的可执行文件。此用户同时启用了OpenEDR和Defender(如果你在重现此操作,请确保在Defender中禁用样本提交)。
现在让我们点击可执行文件,模拟我们的受害者用户,并且我们从我们的beacon获得了连接!
现在让我们使用beacon并运行 sa-whoami,这是一个 BOF(Beacon Object File),它以更安全的方式运行 whoami /all
,因为从 shell 运行它可能会触发 OpenEDR 中的警报(可以通过在 Sliver 中执行 armory install sa-whoami
来添加)。
我们看到用户是管理员组的一部分,但不在高完整性进程中,这意味着我们必须绕过 UAC(用户访问控制)才能获取具有完全管理员权限的 shell。
以下仓库包含了可以加载到 Sliver 中的有用 Beacon Object Files,用于绕过 UAC。
我将使用 CmstpElevatedCOM 方法来获取以管理员身份运行的新Beacon进程。
我们得到了一个新的Beacon!现在让我们使用它并再次运行 sa-whoami。
我们现在拥有了高完整性 shell!
现在,凭借这些权限,你可以尝试窃取数据,帮助我们稍后进行横向渗透,比如说从 Lsass 中转储所有凭证。然而,问题是 EDR 会密切监视 Lsass。我们尝试的任何与 Lsass 内存交互的操作都会在 OpenEDR 中生成以下警报:
为了避免直接攻击 Lsass,我打算先尝试转储 SAM(安全账户管理器),这将更加符合 OPSEC。
我甚至不会使用 Sliver 中的默认 mimikatz Beacon Object File,因为它会导致我们的 beacon 被 Defender 拦截,取而代之的是,我将使用 SharpSAMDump。
在 Visual Studio 中编译该项目会生成一个 .NET 可执行文件,我们可以使用 execute-assembly 执行它。
(忽略这些错误,如果你检查代码,会发现它已经处理了异常,因此错误不会导致我们的 beacon 崩溃。)
现在我们已经获得了管理员的哈希值,可以尝试使用 Impacket 的 secretsdump.py 来查看我们是否能获取更多的哈希值。
我们使用 -skip-sam
标志,因为我们已经通过 SharpSAMDump 获取了 SAM 凭据,并且使用 secretsdump.py 进行 SAM 转储有时会触发 Defender 警报。
我们得到了丰厚的收获,获得了一堆凭据!由于这是一个域控制器,我们得到了 NTDS.dit 的内容,还获得了可以用 Rubeus 或 GetTGT.py 请求 TGT 的 Kerberos 密钥。
现在,让我们看看在 EDR 中产生了多少警报。
主要是“在遏制中虚拟运行”的警报,OpenEDR 有一个功能,它将在一种虚拟沙箱中运行未知的可执行文件和进程,它并没有阻止我们做我们在这里所做的事情,但是在我的实验中,如果我们试图弄乱太多的进程内存(就像我之前解释的那样转储 Lsass),或者有时在写入文件时阻止我们。由于我们没有执行任何操作,因此我们没有收到任何重大警报,但它仍然表明蓝队正在运行未知的可执行文件,除非我们诱骗他们忽略它(假设我们知道他们运行一些自定义内部软件,我们可以尝试像该软件一样重命名我们的文件)。
“将文件添加到应用程序控制”警报只是简单地警报创建了一个新文件,这很容易被忽视,因为我已经看到此警报实际上针对任何新文件(包括安全文件)触发。
除了这些警报之外,它没有检测到我们的文件是恶意的,没有检测到权限升级,也没有检测到我们的凭证转储,我们能够成功完成大部分红队攻击生命周期,而不会触发任何重大警报。
视频教程和更多福利在我主页简介或专栏里
(不懂都可以来问我 专栏找我哦)
更多文章分享:Track 安全社区 — 掌控安全在线教育- Track 知识社区 - 掌控安全在线教育 - Powered by 掌控者