Cobalt_Strike使用教程
Cobalt Strike 是一款基于 Java 的渗透测试工具,用于模拟 APT 攻击和内网渗透。它采用 C/S 架构,支持团队协作,并通过 Beacon 实现持久化控制与通信。 2025-12-22 08:49:32 Author: www.freebuf.com(查看原文) 阅读量:4 收藏

Cobalt Strike 是一款基于java语言开发的渗透测试神器,常被业界人称为CS神器。它被广泛用于模拟高 级持久性威胁(Advanced Persistent Threat,APT)和进行内网渗透。自3.0以后已经不在使用 Metasploit框架而作为一个独立的平台使用,分为客户端与服务端 (C/S架构的),服务端是一个,客户端可以有多个,非常适合团队协同作战,多个攻击者可以同时连接到一个团队服务器上,共享攻击资源 与目标信息和sessions,可模拟APT做模拟对抗,进行内网渗透

安装教程

下载链接:https://www.cobaltstrike.com/

下载完成后分成两个文件,分别为:
客户端
服务端
image.png

目录介绍

  • logs:日志记录与目标主机的相关信息;resources:资源文件的目录;

  • scripts:Cobalt Strike 脚本的目录;

  • .cobaltstrike.beacon_keys:Cobalt Strike Beacon (信标) 的密钥信息的文件;

  • agscript:拓展应用的脚本,用于自动化和定制化渗透测试过程;

  • c2lint:用于检查 profile 文件;

  • cobaltstrike:Cobalt Strike 客户端程序(java 跨平台);

  • cobaltstrike.jar:Cobalt Strike 客户端程序(java 跨平台);

  • cobaltstrike.bat:windows 平台快速启动客户端的 bat 文件;

  • cobaltstrike.store:Cobalt Strike 的 ssl 证书文件;

  • CSAgent.jar:用于代理通信的 Java 可执行文件,中文显示通过它实现;

  • icon.jpg:图标;peclone:克隆和操作 PE 文件的工具或脚本;

  • start.sh:用于在 Unix/Linux 系统上启动 Cobalt Strike 客户端的 Shell 脚本;

  • teamserver:启动服务端的 sh 脚本。

服务端配置

以Ubuntu 24.0.3服务器为例:
因为该软件是JAVA编写,所有要安装JAVA环境

sudo apt install openjdk-11-jdk

把下载好的Server放在你的服务器里面,到当前文件下面给执行权限

chmod +x teamserver  
 chmod +x TeamServerImage  

下面开始执行

./teamserver 服务器IP 设置密码

[*] Will use existing X509 certificate and keystore (for SSL)

[*] Starting teamserver
[*] Team Server Version: 4.8 (Pwn3rs)
[*] Setting 'https.protocols' system property: SSLv3,SSLv2Hello,TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
[*] Loading keystrokes.
[*] Loaded 0 keystrokes.
[*] Loading screenshots.
[*] Loaded 0 screenshots.
[*] Loading downloads.
[*] Loaded 0 downloads.
[*] Loading Windows error codes.
[*] Windows error codes loaded
[*] Loading hosted files
[*] Loaded 0 servers with hosted items
[*] Loading beacons
[*] Loaded 0 beacons
[+] Team server is up on 0.0.0.0:50050
[*] SHA256 hash of SSL cert is: c09aa0eebcafc7bc76fb94ead08efb98aff37d0e84bb31b16f50e38e50e00d76
[*] Generating Payload: shell -- Arch: x86 -- Exit Function: Process -- System Call: None
[*] Generating Payload: shell -- Arch: x64 -- Exit Function: Process -- System Call: None

客户端配置

Linux

./cobaltstrike.sh

Windows

.\Cobalt_Strike_CN.bat

image.png

输入服务端 IP,端口默认填 50050,用户名可以任意设置,但不能和已有的重复,密码填写之前启动服务端时设置的密码,填写完成后点击 connect。

image.png

可以看到成功到了客户端的页面
image.png

CobaltStrike的使用方式

监听器

监听器是什么

Cobalt Strike 的监听器是服务端配置的端口监听服务,用于等待并接收目标主机上 Beacon(信标)的连接请求,是服务端与 Beacon 通信的核心组件。

监听器的作用

  • 接收 Beacon 上线请求,建立服务端与目标主机的通信通道;

  • 转发操作人员下达的攻击指令到 Beacon;

  • 回传 Beacon 收集的目标主机信息(如系统数据、执行结果等)。

创建监听器

点击Cobalt Strike -> Listeners->Add
image.png

可以看到监听方式有八种,正常选择HTTP协议就行。
image.png

image.png

木马生成

选择有效载荷,再选择Windows可执行文件。
image.png

生成木马(注意这边如何没做任何免杀或者特征处理,会被杀软给杀掉,要先关闭才能进行上线!!!)
image.png

可看到桌面生成了我们的木马,开始点击进行上线
image.png
可以看到上线成功!!!
shell 后面跟正常的windows命令,基本上都可以执行,可以看到显示了用户信息

shell whoami

image.png

选中受害机,右键点击并选择 beacon 选项,就能和受害机展开交互。受害机默认每 60 秒会向服务端回传一次数据,为了让实验效果更直观,我们可以把这个回传时间调整为 1 秒。不过要注意,实际渗透测试中不建议设置这么快的回传频率,否则很容易被目标主机的安全防护设备检测到。

sleep 1

image.png

大概流程差不多就是这样。
image.png

Beacon介绍

Beacon 是 Cobalt Strike 核心的恶意 payload(植入程序),也叫信标木马,是攻击者植入目标受害机的核心组件也是红队渗透测试中实现持久化控制目标主机的关键工具。其核心特点是隐蔽性强、功能模块化,适配不同渗透场景需求。

核心功能

  1. 通信交互:与 CS 服务端的监听器建立稳定连接,接收客户端下发的攻击指令,回传目标主机的执行结果、系统信息、文件数据等。

  2. 系统操作:执行系统命令(如shellwhoami)、查看进程 / 服务、管理文件(上传 / 下载)、获取屏幕截图、记录键盘输入等。

  3. 权限提升:支持调用提权模块(如利用系统漏洞、破解本地账号密码),获取目标主机的管理员权限甚至 SYSTEM 权限。

  4. 横向移动:集成psexecwmismb beacon等模块,可通过目标主机渗透内网中其他主机,扩大攻击范围。

  5. 持久化控制:通过添加注册表启动项、创建计划任务、植入服务等方式,实现受害机重启后 Beacon 自动上线,长期控制目标。

Beacon的类型

  1. HTTP/HTTPS Beacon

    HTTP Beacon 和 HTTPS Beacon 统称为 Web Beacon。在默认配置下,这两种 Beacon 会通过HTTP GET 请求从 CS 服务端获取下发的任务
    完成任务后再通过 HTTP POST 请求将执行结果及收集到的目标主机数据回传给服务端。

  2. DNS Beacon

    依赖 DNS 协议完成通信,通过 DNS 查询(如 A 记录、TXT 记录)从服务端获取任务指令,再利用 DNS 响应数据包回传执行结果与主机信息。因多数网络默认开放 DNS 53 端口,穿透性极强,但受 DNS 解析机制限制,数据传输延迟较高,适合 HTTP/HTTPS 流量被严格封禁的场景。

  3. SMB Beacon

    基于 SMB 协议并通过 Windows 命名管道(Named Pipe)通信,无外部网络流量特征,隐蔽性拉满。该类型仅适用于内网环境,无法跨网段通信,常用于内网横向移动,可借助已控制主机的 SMB 服务,静默控制同一网段内的其他受害机。

Beacon命令:

**********************************************************
 一、进程与注入操作(Process & Injection)**********************************************************
argue            # 进程参数欺骗,隐藏命令行参数
blockdlls        # 阻止子进程加载非 Microsoft 官方DLL,降低检测风险
dllinject        # 反射式DLL注入,内存加载DLL到目标进程
dllload          # 通过LoadLibrary加载DLL(传统注入方式)
inject           # 通用进程注入,将Beacon注入指定进程
ps               # 显示目标主机进程列表
psinject         # 向进程注入PowerShell代码/脚本
shinject         # 向进程注入原生Shellcode
shspawn          # 创建新进程并注入Shellcode
kill             # 终止指定进程
ppid             # 设置父进程PID,用于进程伪造(防溯源)
spawn            # 创建新的Beacon会话(派生会话)
spawnas          # 以指定用户身份创建Beacon会话
spawnto          # 设置spawn的可执行文件路径(自定义派生进程)
spawnu           # 在指定PID的进程下创建Beacon会话

**********************************************************
二、凭据获取与票据操作(Credentials & Kerberos)**********************************************************
dcsync           # 从域控制器同步用户凭据哈希(域渗透核心)
hashdump         # 提取本地SAM数据库中的密码哈希
logonpasswords   # Dump当前系统登录用户的明文凭据(依赖Mimikatz)
mimikatz         # 运行Mimikatz模块,执行票据/凭据提取等操作
kerberos_ccache_use # 从ccache文件加载Kerberos票据
kerberos_ticket_purge # 清除当前会话的Kerberos票据
kerberos_ticket_use   # 从文件导入Kerberos票据
pth              # 传递哈希(Pass-the-Hash),使用哈希登录远程主机
wdigest          # 读取WDigest协议存储的明文凭据(需注册表配合)

**********************************************************
三、通信模式配置(Communication Mode)
 **********************************************************
mode dns         # 切换Beacon通信模式为DNS-A记录
mode dns-txt     # 切换为DNS-TXT记录通信
mode dns6        # 切换为DNS-AAAA记录(IPv6)通信
mode http        # 切换为HTTP/HTTPS通信模式
connect          # 通过TCP直连到Beacon(适用于内网直连场景)
link             # 通过命名管道连接Beacon(IPC通道)
unlink           # 断开与TeamServer的会话连接(临时离线)
checkin          # 强制Beacon立即向TeamServer回连(手动触发心跳)

**********************************************************
四、文件系统操作(File System)
**********************************************************
cd               # 切换当前工作目录
cp               # 复制文件/目录
download         # 从目标主机下载文件到TeamServer
downloads        # 列出正在进行的下载任务(查看下载进度)
drives           # 列出目标主机的磁盘分区(C:/D:/等)
ls               # 列出当前目录的文件/目录
mkdir            # 创建新目录
mv               # 移动/重命名文件/目录
pwd              # 查看当前工作目录
rm               # 删除文件或目录
timestomp        # 模仿/修改文件时间戳(防溯源,伪造文件修改时间)
upload           # 从TeamServer上传文件到目标主机

**********************************************************
五、权限提升(Privilege Escalation)
**********************************************************
elevate          # 自动尝试多种提权方式(如MS17-010、BypassUAC等)
getprivs         # 启用当前Token的所有权限(令牌权限提升)
getsystem        # 尝试获取SYSTEM系统权限(本地提权核心)
make_token       # 创建指定用户的Token(令牌伪造)
rev2self         # 恢复到原始Token(退出模拟的用户身份)
steal_token      # 从指定进程中窃取Token(令牌窃取)
runas            # 使用指定账号执行命令/程序
runasadmin       # 以管理员权限执行命令/程序
runu             # 以其他权限级别执行命令/程序

**********************************************************
六、远程控制与横向移动(Remote Control & Lateral Movement)
**********************************************************
browserpivot     # 注入浏览器进程实现会话劫持(如Chrome/Edge)
desktop          # VNC远程桌面,控制目标主机图形界面
net              # 执行Windows net命令(如net user、net share)
psexec           # 通过服务创建远程Beacon会话(PSEXEC横向)
psexec_psh       # 通过PowerShell创建远程Beacon会话(无文件)
winrm            # 通过WinRM协议生成远程Beacon会话
wmi              # 通过WMI执行命令/创建会话(横向移动)
ssh              # 使用SSH协议连接远程系统(Linux/Windows SSH)
ssh-key          # 使用SSH密钥登录远程系统(免密登录)
portscan         # 扫描目标网段的端口(内网探测)

**********************************************************
七、代理与转发(Proxy & Forward)
**********************************************************
covertvpn        # 部署CovertVPN,建立加密VPN通道
rportfwd         # 远程端口转发,将目标端口映射到TeamServer
socks            # 启动SOCKS4代理,代理目标主机的网络流量
socks stop       # 停止SOCKS4代理服务

**********************************************************
八、杂项操作(Miscellaneous)
**********************************************************
cancel           # 取消正在进行的下载任务
clear            # 清除Beacon的任务队列(终止待执行任务)
exit             # 退出当前Beacon会话(销毁会话)
getuid           # 显示当前Beacon的用户身份信息
help             # 查看所有Beacon命令的帮助信息
jobkill          # 终止后台运行的任务(如portscan、download)
jobs             # 查看后台运行的任务列表(查看任务状态)
note             # 为当前目标主机添加备注(渗透测试标记)
powerpick        # 无托管运行PowerShell代码(内存执行,无powershell.exe)
powershell       # 调用powershell.exe执行命令(传统方式)
powershell-import # 导入PowerShell脚本到内存(后续调用)
screenshot       # 截取目标主机当前屏幕截图
setenv           # 设置目标主机的环境变量
shell            # 执行CMD命令,返回命令输出结果
sleep            # 设置Beacon的睡眠/抖动策略(控制回连频率)
run              # 执行程序/命令,返回输出结果(与shell类似)

Staged和Stageless的区别

Steged(有阶段)

  1. Stager(第一阶段)
    是一段超小体积的 Shellcode(通常仅几十到几百字节),无任何核心功能,唯一作用是:与 CS 服务端建立基础网络连接,并向 CS 服务端发起 Stage(第二阶段)的下载请求。由于其代码量极少、行为单一,几乎不包含可被杀软识别的恶意特征。规避静态查杀比较好。

  2. Stage(第二阶段)
    是 CS Beacon 的完整功能主体,包含所有核心模块(如命令执行、进程注入、凭据提取、C2 通信等),体积通常为几十 KB 到上百 KB。该部分由 Stager 从 CS 服务端下载后,通过内存加载的方式注入目标进程执行,全程无磁盘落地,大幅降低被杀软动态查杀的概率。

Stageless(无阶段)

  1. 减少 C2 交互痕迹:仅需与 C2 建立常规会话,无分阶段的二次下载行为,降低被流量监控、EDR 识别的概率。

  2. 内存执行更隐蔽:可通过反射式 DLL 注入、PowerShell 内存加载等方式直连运行,规避杀软对 “可疑下载 + 磁盘落地” 的恶意行为检测。

对比维度Staged(分阶段)Stageless(无阶段)
载荷体积Stager 体积极小(通常几十到几百字节)体积大(通常几十 KB 到上百 KB),包含完整功能模块
网络依赖强依赖 C2 连接:Stager 必须从 C2 下载 Stage,否则失效弱依赖 C2:仅需最终的 C2 通信,无需额外下载载荷
执行流程分两步:先执行 Stager,再下载并执行 Stage一步到位:一次性执行完整载荷
检测风险① Stager 特征易被 AV/EDR 识别;② 存在二次网络下载行为,易被流量检测① 载荷体积大,特征更明显,易被静态查杀;② 无二次下载,流量更简洁
适用传输场景适用于传输空间受限的场景(如缓冲区溢出、短小的注入点)适用于传输空间充足的场景(如进程注入、可执行文件投递)
稳定性受网络波动影响大(Stage 下载失败则载荷失效)稳定性高,无额外下载步骤
C2 兼容性需 C2 服务器支持 Stager 的 Stage 分发逻辑无需 C2 额外分发载荷,仅需正常的会话通信

总结

  • Staged的核心优势是体积小,适配传输空间受限的场景,但依赖二次网络下载,稳定性和抗检测性较弱。

  • Stageless的核心优势是稳定性高、无额外网络依赖,适配大多数常规渗透场景,但体积大易被静态查杀。


文章来源: https://www.freebuf.com/articles/sectool/463226.html
如有侵权请联系:admin#unsafe.sh