横向移动对于红队的任何交战都极为重要。获得初始外壳固然很好,但如果无法离开箱子,那么你可能会陷入困境。
加上微软的 EDR,事情就变得复杂了一点。虽然还有其他解决方案(CrowdStrike、Elastic 等),但我将重点介绍 Defender For Endpoint,因为它是许多企业使用的流行 EDR。
值得注意的是,我正在使用开箱即用的配置,并且没有对我的 Defender for Endpoint 威胁搜寻功能制定任何附加规则。
现在,我们已经证明我们可以绕过 UAC 并提升为管理员,而无需任何警报。如果您还没有阅读我的使用HighBorn 在 Windows Defender for Endpoint 上绕过 UAC 的文章,请仔细阅读。
所以问题是,如果我们可以在一个盒子上获得管理会话,我们可以在不警告 Defender for Endpoint 的情况下横向移动吗?
Active Directory 环境
这是我们极小的 AD 环境。
我们有 David,他是 redteam.local 上的域管理员,在这种情况下,我们让 David 在 Jim 的工作站上执行我们的有效载荷。我们已将我们的权限升级到高完整性信标,并已准备好大干一场。
我们被告知 IIS 服务器上有一些绝密内容。所以我们需要进入该服务器进行枚举。
Havoc C2 开箱即用横向移动技术
Havoc 的开箱即用横向移动技术与 Cobalt Strike 非常相似。我们可以使用 psexec 将服务二进制文件移动到我们的枢纽,然后调用该服务以取回信标。
直接进入我们的场景,我已经在 Jim 的工作站上安装了管理信标。
现在我们可以使用 psexec 模块了,但首先我们需要做一些小技巧。为了执行此攻击,我们需要一个服务二进制文件。由于开箱即用的 Havoc 有效载荷已经过签名,因此我们需要对其进行混淆。
首先,让我们通过 Havoc 生成一个 Windows 服务 EXE 文件并将其保存到我们的桌面。
一旦服务二进制文件被保存,我们就可以使用 Donut 将其转换为 shellcode。
现在我们在 shellcode 中有了我们的服务二进制文件,我们可以通过我的个人 shellcode 工具 Harriet 运行它。
现在我们有了 FUD 服务二进制文件 JumP3r.exe,我们可以在 Havoc 上启动跳跃。
我们的命令将会像这样。
jump-exec psexec IIS-REDTEAM.redteam.local SERVic3 /home/user/Desktop/JumP3r.exe
我们输入 FQDN,命名我们新创建的服务,然后输入我们服务可执行文件的路径。
几秒钟后,我们得到了高完整性的信标。
从 Havoc 的输出中可以看到,我们删除了一个服务二进制文件,并且该二进制文件以 SYSTEM 级权限执行。这很棒,但让我们检查一下 EDR,看看我们是否避开了它们。
太恶心了!看来我们的 psexec 方法已经被攻破了。
那么……我们该怎么办呢?在尝试了多种技术后,绕过 Defender For Endpoint 的答案非常奇怪。
PowerShell。
嗯?PowerShell?是的,我知道。
但这有一些注意事项。最大的一个是,通过 SMB 传输任何东西都会发出警报。作为 POC,我们可以使用此 powershell 行尝试通过 SMB 将我们的有效载荷从 Jim 的工作站复制到 IIS-REDTEAM。
powershell 复制项目-PATH C:UsersdavidDownloadsMalT3st1.exe -目标\IIS-REDTEAM.redteam.localC$UsersdavidDownloadsMalT3st1.exe
由于我们已经知道 David 是 DA,因此我们可以通过 SMB 将 FUD 有效负载复制到 IIS 服务器。然后我们可以通过 PowerShell ScriptBlock 调用它。
powershell 调用命令-ComputerName IIS-REDTEAM -ScriptBlock {“C:UsersdavidDownloadsMalT3st1.exe”}
我们重新获得了高度完整的会话!
但是有 EDR,所以……
真糟糕。如果我们深入研究警报,就会发现这里有几个问题。Copy-Item 可能是移动二进制文件的一种愚蠢方式。
让我们看看能否通过混淆技术打败它。
powershell “$A='copy-item';$B='-PATH';$C='C:UsersdavidDownloadsMalT3st1.exe';$D='-Destination';$E='\IIS-REDTEAM.redteam.localC$UsersdavidDownloadsMalT3st1.exe';“powershell $A $B $C $D $E””
混淆的命令似乎已经成功下载了我们的有效载荷。
现在我们尝试调用它。
powershell 调用命令-ComputerName IIS-REDTEAM.redteam.local-ScriptBlock {“powershell C:UsersdavidDownloadsMalT3st1.exe”}
我们得到了一个高完整性的 shell。但是 EDR 怎么样?
嗯。这很可疑。我们真的只是绕过了 EDR 并调用我们的恶意软件进行横向移动吗?
我们来试试另一种方法吧。预约服务怎么样?
2022 年通过 PowerShell 安排服务?您一定是在开玩笑。EDR 会把它当早餐吃掉,对吧?让我们试一试!
我们的服务器上已经有恶意软件了。因此,让我们尝试使用计划服务来运行它。
这是我们的命令:
powershellinvoke-command-ComputerName IIS-SERVER.redteam.local-ScriptBlock{powershell'$A = New-ScheduledTaskAction-Execute“C:UsersdavidDownloadsMalT3st1.exe”;$T = New-ScheduledTaskTrigger-once-At 13:39pm;$S = New-ScheduledTaskSettingsSet;$D = New-ScheduledTask-Action $A -Trigger $T -Settings $S;Register-ScheduledTask Cron-InputObject $D'}
我们启动命令,看看它是否设置了预定的服务。
到了预定的时间,我们便拿回了信标!
让我们用 EDR 检查一下。这肯定已经被发现了。
不可能。这怎么可能?我的猜测是,现成的 EDR 规则设置为查找“C:Windows”文件夹中放置的二进制文件,并且不会从 Powershell 中的“New-ScheduledTaskAction”命令发出警报,但会使用 Windows API CreateServiceA 发出警报。
我还想知道 ScriptBlock 日志记录是否是开箱即用的。如果您从信标中发出 Powershell 命令,最终 DFE 会捕捉到并发出警报,但如果您将它们间隔几分钟,您可能会不被发现。
混淆 Powershell 命令对此也有很大帮助。您不需要使用 Unicorn 或 Invoke-Obfuscation 或其他任何东西。您只需通过将命令设置为变量即可完成此操作。
同样有趣的是,当我在 Powershell 中弄乱命令时(我在测试中经常这样做),我不会收到很多警报。因此,事件记录似乎实际上只在命令完成时发生,而不是在命令实际启动时发生。
现在,这里有很多变量。也许使用 Harriet 作为 shellcode 加载器有帮助。也许使用 Havoc 对此有帮助。也许我的糟糕 AD 环境和云端的 DFE 在某些事件上存在数据传输断开连接。
这是确定的吗?不,这些都不是确定的。我不确定我是否会在实际的红队交战中相信这一点,但你可能想在紫队活动中或作为防守方尝试一下(当然要征得同意)。
获取战利品
我们看看能否找到这份绝密文件。
看起来它就在 David 的桌面上。让我们下载战利品吧!
我们打开它吧!
哈丽特!你是怎么进入那个服务器的!?
总结
因此,我们这里有几种不同的服务器跳转方法。如果您知道您在参与时不会违反任何 EDR,请使用混淆的有效负载并随意使用内置模块进行跳转。
但是如果你要对抗 EDR,请使用…PowerShell…这听起来甚至不对。希望你学到了一些东西!
其它课程
QT开发底层原理与安全逆向视频教程
linux恶意软件开发对抗与基于ebpf网络安全视频教程(2024最新)
linux文件系统存储与文件过滤安全开发视频教程(2024最新)
linux高级usb安全开发与源码分析视频教程
linux程序设计与安全开发
-
windows恶意软件开发与对抗视频教程
-
windows网络安全防火墙与虚拟网卡(更新完成)
-
windows文件过滤(更新完成)
-
USB过滤(更新完成)
-
游戏安全(更新中)
-
ios逆向
-
windbg
-
还有很多免费教程(限学员
-
更多详细内容添加作者微信
原文始发于微信公众号(安全狗的自我修养):利用 Havoc C2 和 Microsoft EDR 进行横向移动
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论