CobaltStrike-用“混淆”绕过Windows防火墙

对所有红队成员来说,在不惊动组织的情况下传输载荷是项永恒的挑战。像所有其他安全方案一样,Windows防火墙利用CobaltStrike工具后也在检测通用有效载荷方面效果更明显了。

在这个例子中,我们将探讨用Cobalt Strike生成一个Pwershell,并展示我们如何对其操控,让其执行绕过Windows10电脑的防火墙。但这还不是从Windows防火墙中隐藏自己载荷最优雅或简单的方案,只能说是办法之一,且行之有效。

创建载荷的过程如下:

截屏时间:3月14日16:50:50

这样就生成了带有一个Powershell命令的载荷文本。

CobaltStrike-用“混淆”绕过Windows防火墙

如果在感染者电脑上运行该命令,Windows防火墙会将其视为威胁,发出警告内容。

CobaltStrike-用“混淆”绕过Windows防火墙

为了绕过Windows防火墙,我们需要首先理解CobaltStrike生成载荷的原理,然后再更改其中的一些签名,希望让Windows防火墙认为是安全的。

首先,显而易见的是载荷命令的格式是基于64位编码,或者通过编码命令Powershell标记看到。

想解码该命令,我们需要裁掉powershell.exe -nop -w hidden –encodedcommand这部分,保留其它部分。

然后用以下命令解码其他字符串。

echo ‘base64 payload’ | base64 –d

得到的字符串包含了一个64位解码串,但不能进行解码和spit out gibberish,因为这个字符串夜视Gzip压缩,从PowerShell命令的IEX(New-Object IO.StreamReader(New-Object IO.Compression.GzipStream($s[IO.Compression.CompressionMode]::Decompress))).ReadToEnd())部分看是可以看见的。

现在我们需要理解一些命令中是什么,因为这其实是触发Windows防火墙的部分。例如:载荷。通过一些谷歌搜索,我发现这个PowerShell脚本正是做这个的:

http://chernodv.blogspot.com.cy/2014/12/powershell-compression-decompression.html

$data = [System.Convert]::FromBase64String(‘gzip base64’)

$ms = New-Object System.IO.MemoryStream

$ms.Write($data, 0, $data.Length)

$ms.Seek(0,0) | Out-Null

$sr = New-Object System.IO.StreamReader(New-Object System.IO.Compression.GZipStream($ms, [System.IO.Compression.CompressionMode]::Decompress))

$sr.ReadToEnd() | set-clipboard

这个脚本首先是基于64位解码字符串,将其解压,整个代码就都呈现给我们了。其也会将输出内容复制到剪切板并粘贴到一个文本文件中,留着备用。

被Windows防火墙检测出来的$var_code变量承有载荷,我们需要更换一下,以绕过防火墙。

解码$var_code后是一系列ASCII字符,但完全解码并不是这里所需要的。

$enc=[System.Convert]::FromBase64String(‘encoded string’)

我们可以通过以下部分进行阅读:

$readString=[System.Text.Encoding]::ASCII.GetString($enc)

CobaltStrike-用“混淆”绕过Windows防火墙

上述内容显示的是用户代理和我们攻击者IP的一些信息。

现在的目标是将目前的载荷取走,并让其混淆,迷惑Windows防火墙。这种情况最好的工具由Daniel Bohannon开发的Invoke Obfuscation.项目的Github页面可以在此找到。

开始Invoke-Obfuscation命令的是:

Import-Module .\Invoke-Obfuscation.psd1

Invoke-Obfuscation

CobaltStrike-用“混淆”绕过Windows防火墙

现在我们需要确定需要混淆的载荷。可以通过以下命令

Set scriptblock ‘final_base64payload’

CobaltStrike-用“混淆”绕过Windows防火墙

该工具需要我们的脚本(script block),然后问我们如何进行。这种情况下,我选择了压缩,然后1。这并不意味着其他选项不行,但我发现这个在写的时候可以用。Invoke-Obfuscation可以展现其魔法,然后打印出来一个PowerShell命令,这个很可能绕过Windows防火墙。

CobaltStrike-用“混淆”绕过Windows防火墙

然后打出来,以及你想保存作为PowerShell脚本的路径。

Out c:\payload.ps1

CobaltStrike-用“混淆”绕过Windows防火墙

目前解压载荷就是这样。

所以,我们还是需要将“[Byte[]]$var_code = [System.Convert]::FromBase64String”这段内容用从Invoke-Obfuscation中新建的载荷来替换。为了达到这一点,我确定了一个新的变量,我称其为$evil,只需要将内容从Invoke-Obfuscation中输出。

重要—在Invoke-Obfuscation的输出中,你需要清除最后面的部分,因为那是执行命令的命令。我们不需要这个,因为Cobalt Strike模板会为我们做这些。

保存编辑好的脚本,放入到PowerShell中,并执行。在CobaltStrike中,结果应该是一个浮标,如果你用的是@sec_groundzero Aggressor Script,则是一个马虎的通知。

CobaltStrike-用“混淆”绕过Windows防火墙

如果我们用Process Hacker检查vanilla CS载荷和修改的CS载荷。注意不要改变浮标下划线的行为。

原创文章,作者:猫小编,如若转载,请注明出处:http://www.mottoin.com/109283.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code