一、一次周五的渗透行动

有一次在周五的下午,我接到一个渗透任务,目标是某家财务公司的内网系统。经过几天的信息收集,我们已经掌握了一些技术栈和内部网络结构。在确认授权后,我们决定选择使用Cobalt Strike进行这次渗透。Cobalt Strike是红队行动中广受欢迎的工具之一,它提供了完整的攻击链支持,从信息收集到最终的数据窃取。

二、搭建你的攻击环境

为了能够顺利进行渗透,我们首先需要搭建一个攻防环境。Cobalt Strike的服务端需要一个稳定的VPS,这里建议选择一个支持国外IP的VPS,可以更好地隐藏攻击源。

  • 选择VPS:美国或荷兰的VPS通常比较好用,确保它具备足够的内存和CPU。
  • 安装Cobalt Strike:在VPS上安装Cobalt Strike的服务端软件,配置好SSL证书以确保通讯的安全性。
  • 配置团队服务器:在CS中,团队服务器用于接收Beacon并与目标机进行交互。在配置过程中注意开放正确的端口,并设置好域名解析。

<pre><code class="language-shell"># 在你的VPS上安装JDK,因为CS依赖于Java sudo apt-get update sudo apt-get install -y openjdk-11-jdk

解压CS并运行服务端

unzip cobaltstrike-trial.zip cd cobaltstrike ./teamserver &lt;your_vps_ip&gt; &lt;password&gt;</code></pre>

三、流量捕获实战

黑客示意图

这次的目标是内网数据窃取,因此在渗透过程中,我们需要搭建一个流量捕获机制来监控和分析目标的网络流量。Cobalt Strike提供了一种叫做Malleable C2的技术,可以灵活地配置流量模式。

  • 定义流量规则:使用Malleable C2配置文件来定义流量伪装策略,比如将CS流量伪装成正常的HTTP流量。
  • 隐藏通讯:通过调整请求和响应的参数来降低被检测的风险。在CS中,可以通过控制台命令来加载特定的流量配置文件。

<pre><code class="language-shell">profile { set host &quot;www.example.com&quot;; parameter &quot;id&quot; { set uri &quot;/images&quot;; randomize &quot;value&quot;; } }</code></pre>

这段配置将Beacon的流量伪装成对正常网站的请求,并且还随机化了参数,增加了检测难度。

四、Payload构造的艺术

在攻击中,恶意Payload的构造是关键。Cobalt Strike允许我们通过简单的界面来生成各种Payload,但为了绕过防御,我们需要对其进行进一步的混淆和免杀处理。

  • 使用外部工具:如Veil、Shellter等混淆工具,可以生成免杀率更高的Payload。
  • 手动混淆:在代码中引入无关的逻辑和垃圾代码,增加分析难度。

黑客示意图

<pre><code class="language-go">package main

import &quot;fmt&quot;

func main() { // 伪装成正常打印程序 fmt.Println(&quot;Hello, world!&quot;) // 加载我们的恶意功能 loadPayload() }

func loadPayload() { // 此处是我们的恶意代码逻辑 fmt.Println(&quot;Executing hidden payload...&quot;) // 省略具体实现 }</code></pre>

通过这样的方式,我们可以有效降低被杀毒软件检测的风险。

五、绕过EDR的对抗

在实战中,EDR的检测是难以绕过的一个环节。Cobalt Strike提供了一些基本的对抗策略,但要真正有效,我们需要结合多种技术。

  • 内存注入:通过内存注入技术,把载荷直接加载到目标进程的内存空间中,避免落地文件被检测。
  • 异构混合:将不同编程语言的代码混合在一起,比如在C++程序中嵌入Go代码,增加反编译难度。

<pre><code class="language-shell">// 示例代码:在Go中使用C++的内存注入 package main

/*

include &lt;windows.h&gt;

void InjectPayload() { // 使用Windows API进行内存注入 } */ import &quot;C&quot;

func main() { C.InjectPayload() }</code></pre>

以上是一个简单的示例,通过这种方式,可以有效提高绕过EDR检测的成功率。

六、渗透后的痕迹清除

在完成渗透后,为避免被追踪,我们需要对痕迹进行清理。Cobalt Strike提供了一些基本的清理命令,但我们通常需要结合手动操作。

  • 日志清理:使用PowerShell脚本清理Windows系统日志。
  • 注册表还原:对于修改过的注册表项进行还原,保证系统的一致性。

黑客示意图

<pre><code class="language-shell"># PowerShell脚本用于清理事件日志 Get-EventLog -LogName Application,Security,System | ForEach-Object { Clear-EventLog $_.Log }

清理注册表操作痕迹

Remove-Item -Path &#039;HKCU:\Software\MaliciousKey&#039;</code></pre>

确保操作完成后没有留下痕迹,是一个成功渗透的重要标志。

七、权威经验分享

在多年的红队行动中,我发现Cobalt Strike的灵活性和强大功能是不可替代的。然而,工具只是辅助,真正重要的是攻击者的思维。始终以目标为导向,在每次渗透中仔细分析环境,制定详细计划,是成功的关键。

  • 学习新技术:不断学习新的免杀、绕过技术,保持对抗能力。
  • 关注最新漏洞:掌握最新的0day漏洞,可以为行动提供更多选择。
  • 团队合作:在每次渗透中,与团队成员紧密合作,分享技能和经验。

这次渗透行动最终以成功获取目标内网数据结束,整个过程对我来说也是一种成长和学习。我希望这篇文章能为同行提供帮助,并激励你们不断探索和进步。请记住,所有技术仅限于授权的安全测试,任何未经授权的攻击行为都是非法的。