一、一次周五的渗透行动
有一次在周五的下午,我接到一个渗透任务,目标是某家财务公司的内网系统。经过几天的信息收集,我们已经掌握了一些技术栈和内部网络结构。在确认授权后,我们决定选择使用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 <your_vps_ip> <password></code></pre>
三、流量捕获实战

这次的目标是内网数据窃取,因此在渗透过程中,我们需要搭建一个流量捕获机制来监控和分析目标的网络流量。Cobalt Strike提供了一种叫做Malleable C2的技术,可以灵活地配置流量模式。
- 定义流量规则:使用Malleable C2配置文件来定义流量伪装策略,比如将CS流量伪装成正常的HTTP流量。
- 隐藏通讯:通过调整请求和响应的参数来降低被检测的风险。在CS中,可以通过控制台命令来加载特定的流量配置文件。
<pre><code class="language-shell">profile { set host "www.example.com"; parameter "id" { set uri "/images"; randomize "value"; } }</code></pre>
这段配置将Beacon的流量伪装成对正常网站的请求,并且还随机化了参数,增加了检测难度。
四、Payload构造的艺术
在攻击中,恶意Payload的构造是关键。Cobalt Strike允许我们通过简单的界面来生成各种Payload,但为了绕过防御,我们需要对其进行进一步的混淆和免杀处理。
- 使用外部工具:如Veil、Shellter等混淆工具,可以生成免杀率更高的Payload。
- 手动混淆:在代码中引入无关的逻辑和垃圾代码,增加分析难度。

<pre><code class="language-go">package main
import "fmt"
func main() { // 伪装成正常打印程序 fmt.Println("Hello, world!") // 加载我们的恶意功能 loadPayload() }
func loadPayload() { // 此处是我们的恶意代码逻辑 fmt.Println("Executing hidden payload...") // 省略具体实现 }</code></pre>
通过这样的方式,我们可以有效降低被杀毒软件检测的风险。
五、绕过EDR的对抗
在实战中,EDR的检测是难以绕过的一个环节。Cobalt Strike提供了一些基本的对抗策略,但要真正有效,我们需要结合多种技术。
- 内存注入:通过内存注入技术,把载荷直接加载到目标进程的内存空间中,避免落地文件被检测。
- 异构混合:将不同编程语言的代码混合在一起,比如在C++程序中嵌入Go代码,增加反编译难度。
<pre><code class="language-shell">// 示例代码:在Go中使用C++的内存注入 package main
/*
include <windows.h>
void InjectPayload() { // 使用Windows API进行内存注入 } */ import "C"
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 'HKCU:\Software\MaliciousKey'</code></pre>
确保操作完成后没有留下痕迹,是一个成功渗透的重要标志。
七、权威经验分享
在多年的红队行动中,我发现Cobalt Strike的灵活性和强大功能是不可替代的。然而,工具只是辅助,真正重要的是攻击者的思维。始终以目标为导向,在每次渗透中仔细分析环境,制定详细计划,是成功的关键。
- 学习新技术:不断学习新的免杀、绕过技术,保持对抗能力。
- 关注最新漏洞:掌握最新的0day漏洞,可以为行动提供更多选择。
- 团队合作:在每次渗透中,与团队成员紧密合作,分享技能和经验。
这次渗透行动最终以成功获取目标内网数据结束,整个过程对我来说也是一种成长和学习。我希望这篇文章能为同行提供帮助,并激励你们不断探索和进步。请记住,所有技术仅限于授权的安全测试,任何未经授权的攻击行为都是非法的。