本文主要介绍 Cobalt Strike 4.3 的基本功能及使用方法,具体分析和实战中使用放在另一篇讲解:Cobalt Strike使用方法——实战篇。

文章目录

  • 一、基本介绍
    • (一) 目录结构
    • (二) 运行命令
    • (三) 通信逻辑
    • (四) 安全性能
  • 二、界面功能
    • (一) 菜单栏
    • (二) 工具栏
    • (三) Session 操作
    • (四) Target 操作

一、基本介绍

Cobalt Strike (CS) 是一个为对手模拟和红队行动而设计的平台,相当于增强版的Armitage,早期以Metasploit为基础框架,3.0版本之后作为独立平台开发,主要用于目标攻击和模拟后渗透行动。

CS集成了端口转发、服务扫描、端口监听、木马生成、钓鱼攻击等功能,可以调用Mimikatz、Psexec等工具,与MSF进行联动,使用插件扩展功能,并且可以利用Malleable C2 profile自定义通信流量特征,是内网大杀器,十分适合作为团队协同攻击工具使用。

(一) 目录结构

CS4.3目录结构如下图所示:

其中主要文件功能:

  • teamserver:运行团队服务器的shell脚本
  • cobaltstrike.jar:用于运行客户端的jar包
  • cobaltstrike:运行客户端的shell脚本,如java -XX:+UseParallelGC -XX:+AggressiveHeap -XX:ParallelGCThreads=4 -jar cobaltstrike.jar $*
  • start.sh:运行客户端的shell脚本,与cobaltstrike作用相同
  • cobaltstrike.exe:Windows客户端程序
  • cobaltstrike.store:SSL秘钥库,可以使用keytool(Java数据证书管理工具)进行修改
  • agscript:连接团队服务器,运行cna插件的命令行工具
  • c2lint:检查profile配置文件的错误异常
  • update.jar:CS升级jar包
  • update.bat:CS升级批处理程序
  • log:日志目录,记录目标连接和操作情况
  • third-party:第三方工具

(二) 运行命令

CS分为客户端 (Client) 与团队服务器 (C2),客户端与团队服务器是多对多的关系,一个团队服务器可以连接多个客户端 (用于信息共享和团队协作),每个客户端也可以连接多个团队服务器 (避免因一个服务器宕机而导致目标丢失),客户端可以管理多个分布式节点,便于团队分布式协作攻击。

团队服务器 通常运行在Linux环境,运行命令:

./teamserver <ip> <passwd> [profile] [YYYY-MM-DD]
# ip:服务端IP
# passwd:客户端与服务端的连接密码
# profile:用户配置文件
# YYYY-MM-DD:所有payload运行结束时间

一般结合nohup命令使teamserver在后台运行,注意nohup默认将运行信息输出到nohup.out文件,若想不输出运行信息需要重定向标准输出/错误:(没有nohup则需要下载coreutils包)

apt-get install coreutils
nohup ./teamserver <ip> <passwd> [profile] [YYYY-MM-DD] >/dev/null 2>&1 &

客户端 可以跨平台,运行在Linux/Windows环境,启动后在对话框输入服务端的ip和连接密码,名字自定义,运行命令:

  • Linux:
java -XX:+UseParallelGC -XX:+AggressiveHeap -XX:ParallelGCThreads=4 -jar cobaltstrike.jar
# -XX:+UseParallelGC 启用垃圾回收并发线程
# -XX:+AggressiveHeap 启用堆优化设置
# -XX:ParallelGCThreads=4 指定垃圾回收并发线程的数量
# 以上配置都是为了优化java垃圾回收性能
  • Windows:运行cobaltstrike.exe

注意:CS团队服务端默认监听50050端口,暴露在公网不安全,运行时最好修改,直接编辑teamserver文件修改端口即可。

(三) 通信逻辑

1.Payload上传和运行

① 一次性上传并运行一个完整的Payload,这个Payload称为Stageless,即无阶段之意,使用这种方式上传的Payload体积会比较大,但因为不用从服务器下载,相对而言比较安全;

② 先上传一个体积小巧的Stager,Stager负责通过HTTP、DNS等协议从服务器将完整的Payload下载后运行,这个后续下载的Payload称为Stage,Stager下载Stage的过程称为Payload Staging。

2.C2 <—> Client

① C2开启服务器监听端口;

② Client与C2通过TLS协议建立连接,之后保持实时加密通信,C2相当于Client和靶机Beacon之间的信息中转枢纽

3.C2 <—> Beacon

① C2开启监听端口,包括Stage下载端口 (如Stager需要) 和Beacon回连端口;

Stager从Stager Host下载完整的Stage并运行,Stageless则省略下载的过程直接运行,获取Beacon;

③ Beacon进入睡眠状态,睡眠时间到后通过HTTP Get方式向C2发送Metadata;

④ C2响应Metadata,如果存在待执行的任务,C2会在响应数据中下发执行命令;

⑤ Beacon执行完毕后,通过HTTP Post方式向C2返回运行结果,之后再次回到睡眠状态。

(四) 安全性能

CS设置了多重安全通信机制,正是这些安全特性使得CS在稳控方面有独到的优势,具体如下:

1.Client <—> C2

Client和C2之间通过SSL协议通信,使用cobaltstrike.store中的SSL证书和秘钥信息加密通信数据,为去除CS流量特征,躲避安全审查,最好使用自己生成的cobaltstrike.store,使用keytool工具查看和生成cobaltstrike.store文件,初始storepass为123456,可以在服务端启动脚本teamserver中查看,keytool查看以及生成SSL证书和秘钥的基本命令如下:
(每次生成的秘钥是随机的)

# 查看ssl证书信息
keytool -list -v -keystore cobaltstrike.store -storepass 123456
# -list:输出证书信息
# -v:详细模式
# -keystore <storefile>:指定keystore文件
# -storepass <password>:指定证书信息存储密码# 生成新的ssl证书信息
keytool -genkeypair \-keystore cobaltstrike.store \-storepass password \-keypass password \-keyalg RSA \-validity 180 \-alias certificate \-dname "CN=Microsoft IT TLS CA 2, OU=Microsoft IT, O=Microsoft Corporation, L=Redmond, ST=Washington, C=US"
# -genkeypair:生成密钥对(公钥和私钥)
# ‐keypass <password>:指定用于加密私钥的密码
# -keyalg <algorithm>:指定生成密钥对的算法
# -validity <day>:证书有效天数,默认90天
# ‐alias:指定证书别名
# -dname:指定证书所有者信息,这里取浏览器中的CA证书
# CN:通用名称,OU:组织单位名称,O:组织名称,L:城市或区域名称,ST:州或省份名称,C:单位的两字母国家代码

生成新的cobaltstrike.store文件后,要在teamserver启动脚本中修改相应信息。

2.C2 <—> Beacon

首次设置Beacon Payload时,会生成一个C2专有的秘钥对 (公钥/私钥),公钥会嵌入Beacon的Payload Stage,用于加密Beacon发送到C2的Metadata,Beacon在和C2建立连接前会持续发送Metadata,其中包含了随机生成的会话秘钥,建立连接后,C2使用每个Beacon的会话秘钥来加密/解密之后的通信数据。即便HTTP和DNS Beacon,其通信数据也是经过加密的,具有和HTTPS Beacon一样的安全特性。

3.C2 <-HTTPS-> Beacon

cobaltstrike.store中的密钥对和证书信息只用于Client到C2的验证和数据加密,并不应用于HTTPS Beacon,修改证书信息要通过配置Malleable C2 profile文件,具体方法在另一篇文章介绍:Cobalt Strike使用方法——实战篇

二、界面功能

客户端界面如下所示,界面总体分为两部分,上半部分是会话或目标的图形化显示,下半部分是与用户交互的功能或会话的标签页:

(一) 菜单栏

  • Cobalt Strike
    New Connection:创建新连接,加入服务端
    Preferences:偏好设置,设置界面样式
    Visualization:视图模式,包括Pivot Graph、Session Table、Target Table三种
    VPN Interfaces:VPN接口管理
    Listenrs:监听器管理
    Script Manager:脚本管理

  • View
    Applications:靶机的应用信息
    Credentials:查看从靶机获取的账户密码
    Downloads:查看从靶机下载的文件
    Event Log:事件日志,可用于团队聊天
    Keystrokes:键盘记录
    Proxy Pivots:查看代理
    Screenshots:查看屏幕截图
    Script Console:脚本控制台,用于加载脚本
    Targets:显示目标靶机
    Web Log:Web日志

  • Attacks
    Packages:生成各种木马文件,包括:

    HTML Application:HTA木马文件
            MS Office Macro:OFFICE宏病毒文件
            Payload Generator:多种语言的Payload Stager
            USB/CD AutoPlay:自动播放运行的木马文件
            Windows Dropper:捆绑文件的木马
            Windows Executable:EXE木马 (Stager)
            Windows Executable(S):EXE木马 (Stageless)

    Web Drive-by:Web服务配置与管理,包括:

    Manage:管理Web服务
            Clone Site:克隆网站
            Host File:开启Web服务,供下载文件
            Scripted Web Delivery:开启Web服务,供下载和执行Payload
            Signed Applet Attack:开启Web服务为自签名Java Applet提供运行环境
            Smart Applet Attack:自动检测Java版本并利用已知的EXP绕过安全检测
            System Profiler:用于获取系统信息

    Spear Phish:鱼叉式攻击

  • Reporting
    Activity report:生成操作报告
    Hosts report:生成主机报告
    Indicators of Compromise:生成威胁报告
    Sessions report:生成会话报告
    Social engineering report:生成社会工程学报告
    Tactics, Techniques, and Procedures:生成策略、技巧和程序报告
    Reset Data:重置数据
    Export Data:导出数据

(二) 工具栏

即菜单栏中的部分功能,具体如下:


① Connect to team server:连接服务端
② Disonnect from team server:断开当前服务端连接
③ Configure Listeners:配置监听器
④ Show sessions in graph view:展示会话列表
⑤ Show sessions in table view:展示视图列表
⑥ Show targets in table view:展示目标列表
⑦ Credentials:查看从靶机获取的账户密码
⑧ Downloaded Files:查看从靶机下载的文件
⑨ Keystrokes:查看键盘记录
⑩ Screenshots:查看屏幕截图
⑪ Generate Windows Executable (Stageless):生成无状态的EXE木马
⑫ Setup java Signed Applet Attack:开启Web服务为自签名Java Applet提供运行环境
⑬ MS Office Macro Attack:生成OFFICE宏病毒文件
⑭ Setup Scripted Web-Delivery (Stageless):开启Web服务,供下载和执行Payload
⑮ Host a file:开启Web服务,供下载文件
⑯ Manage Web Server:管理Web服务
⑰ Help:帮助文档
⑱ About:关于Cobalt Strike

(三) Session 操作

在Pivot Graph或Session Table视图右键点选session,或在Beacon交互命令窗中右键,可对目标进行进一步操作,如下所示:

  • Interact
    打开Beacon交互界面,内置多种命令,使用helphelp <command>查看。注意HTTP和TCP Beacon默认心跳时间为60s,如果要缩短执行命令的响应时间,需要通过 sleep <secs> [jitter] 命令重新设置,secs为睡眠的时间,jitter为睡眠时间抖动的百分比 (0-99);如果存在父Beacon,则心跳时间与父Beacon相同。Beacon命令功能如下所示:

    注意:① Windows环境和Linux环境的Beacon命令有所区别
               ② Session操作、Target操作本质上都相当于使用Beacon命令)

Beacon Commands
===============Command                   Description-------                   -----------argue                     进程参数污染,利用虚假参数(通常很多)执行敏感操作绕过AVblockdlls                 限定子进程只能加载带有Microsoft签名的dll,使AV无法通过dll加载对恶意程序进行监控browserpivot              注入靶机IE浏览器进程并开启HTTP代理,攻击者可以通过此代理继承靶机IE已获取的凭证cancel                    取消正在进行的下载cd                        改变目录checkin                   使用DNS Beacon时,使靶机强制回连C2chromedump                从Chrome浏览器目录文件获取账户密码clear                     清除Beacon内的任务队列connect                   从当前Beacon连接到一个等待连接的TCP Beaconcovertvpn                 部署隐蔽VPNcp                        复制文件dcsync                    从域控制器中提取账户哈希desktop                   查看并与靶机桌面交互dllinject                 将反射型DLL注入进程dllload                   使用LoadLibrary()将DLL加载到进程download                  下载文件downloads                 列出下载下载的文件drives                    列出目标盘符elevate                   生成提权环境的会话execute                   在靶机执行命令(无输出)execute-assembly          在靶机内存中执行本地.NET程序exit                      结束当前Beacon会话getprivs                  在当前凭证基础上提权getsystem                 获取SYSTEM权限getuid                    获取当前用户身份hashdump                  导出账户哈希help                      帮助文档,"help+命令"查看命令的使用方法inject                    在特定进程生成会话inline-execute            在当前会话中运行BOF(使用Beacon Api开发的文件)jobkill                   结束CS长时间运行的后开发作业进程jobs                      列出CS所有长时间运行的后开发作业(post-exploitation),这些作业由CS执行恶意功能时临时创建jump                      与远程主机新建连接生成新的会话kerberos_ccache_use       从ccache文件中导入kerberos票据应用于当前会话kerberos_ticket_purge     从当前会话中清除kerberos票据kerberos_ticket_use       从ticket文件中导入kerberos票据应用于当前会话keylogger                 开启键盘记录,可以将其注入指定的进程kill                      结束进程link                      从当前Beacon连接到一个等待连接的SMB Beaconlogonpasswords            利用mimikatz获取账户密码和哈希ls                        显示当前目录文件make_token                生成指定域用户的令牌,用于传递凭证,身份冒充mimikatz                  运行mimikatz命令mkdir                     新建目录mode dns                  使用DNS A作为数据信道(仅限DNS Beacon)mode dns-txt              使用DNS TXT作为数据信道(仅限DNS Beacon)mode dns6                 使用DNS AAAA作为数据信道(仅限DNS Beacon)mv                        移动文件net                       net命令,如net view、net user等note                      为当前Beacon做备注    portscan                  扫描端口powerpick                 通过unmanaged powershell执行命令powershell                通过powershell.exe执行命令powershell-import         导入powershell脚本ppid                      为Beacon会话中执行的命令分配父进程printscreen               使用PrintScr方法屏幕截图,可以将其注入至特定进程ps                        显示进程列表psinject                  在特定进程中执行powershell命令pth                       使用Mimikatz哈希传递pwd                       显示当前目录reg                       查询注册表键值remote-exec               在靶机使用psexec、powershell、wmic执行命令rev2self                  恢复为原始令牌rm                        删除文件或目录rportfwd                  新建端口转发,端口转发的流量由CS服务端做中转rportfwd_local            新建端口转发,端口转发的流量先途径CS客户端,再借由CS客户端和服务端已经建立的隧道做流量中转run                       在靶机执行命令 (有输出)runas                     以其他用户身份执行命令runasadmin                以admin权限执行命令runu                      选择特定的父进程执行命令screenshot                屏幕截图,可以将其注入至特定进程screenwatch               每次Beacon check-in进行屏幕截图,直至jobkill将其进程结束,可以将其注入至特定进程setenv                    设置环境变量shell                     通过cmd或shell执行命令shinject                  将shellcode注入进程shspawn                   Spawn process and inject shellcode into itsleep                     设置Beacon的延迟时间(心跳时间)socks                     在靶机开启SOCKS4反向代理,监听端口在C2主机socks stop                停止SOCKS4代理spawn                     派生新的会话spawnas                   派生具有其他用户权限的会话spawnto                   Set executable to spawn processes intospawnu                    选择特定的父进程派生新的会话spunnel                   Spawn and tunnel an agent via rportfwdspunnel_local             Spawn and tunnel an agent via Cobalt Strike client rportfwdssh                       使用SSH连接远程主机ssh-key                   使用SSH连接远程主机steal_token               从指定进程中窃取令牌timestomp                 将一个文件的时间戳应用到另一个文件unlink                    与父/子Beacon断开会话连接upload                    上传文件
  • Access
    Dump Hashes:获取账户哈希
    Elevate:提权,将提权后的会话弹回监听器
    Golden Ticket:生成黄金票据并将其注入到当前会话
    Make Token:转换当前登录凭证
    One-liner:用一次性powershell命令派生会话,该命令会在Beacon会话靶机上临时运行一个服务器,供本地下载stage并运行,一次下载后服务随即关闭
    Run Mimikatz:运行mimikatz sekurlsa::logonpasswords命令
    Spawn As:派生具有其他用户权限的会话

  • Explore
    Browser Pivot:注入靶机IE浏览器进程并开启HTTP代理,攻击者可以通过此代理继承靶机IE已获取的凭证
    Desktop(VNC):通过VNC远程控制靶机桌面
    File Browser:文件浏览
    Net View:运行net view命令
    Port Scan:端口扫描
    Process List:详细的图形化进程列
    Screenshot:屏幕截图

  • Pivoting
    SOCKS Server:在靶机开启SOCKS4反向代理,监听端口在C2主机
    Listener:设置pivot监听器,从而避免大量的靶机Beacon直接与C2通信
    Deploy VPN:部署隐蔽VPN

  • Spawn
    派生新的会话

  • Session
    Note:为当前Beacon做备注
    Color:为会话标记颜色
    Remove:移除会话
    Sleep:设置Beacon的延迟时间(心跳时间)
    Exit:退出会话

(四) Target 操作

在Target Table视图右键点选session,可对目标进行进一步操作,如下所示:

  • Jump
    通过psexec、ssh、winrm等远程命令工具新建会话:如果Listener是SMB/TCP Beacon,则新建会话与当前会话为级联关系;如果Listener是HTTP/HTTPS/DNS Beacon,则新建会话与当前会话为并列关系。

  • <user>@<pid>
    显示所有靶机的session操作

  • Scan
    端口扫描

  • Services
    显示已扫描出的靶机开放的服务

  • Host
    修改主机的操作系统、名字、备注、颜色等属性

Cobalt Strike使用教程——基础篇相关推荐

  1. Midjourney|文心一格prompt教程[基础篇]:注册使用教程、风格设置、参数介绍、隐私模式等

    Midjourney|文心一格prompt教程[基础篇]:注册使用教程.风格设置.参数介绍.隐私模式等 开头讲一下为什么选择Midjourney和文心一格,首先Midjourney功能效果好不多阐述: ...

  2. 基于c++和asio的网络编程框架asio2教程基础篇:1、基本概念和使用说明

    基于c++和asio的网络编程框架asio2教程基础篇:1.基本概念和使用说明 由于asio2没有写技术文档,因此打算写几篇文章介绍一下如何使用它,主要是针对新手. 1.asio2如何使用? asio ...

  3. 基于c++和asio的网络编程框架asio2教程基础篇:2、各个回调函数的触发顺序和执行流程

    基于c++和asio的网络编程框架asio2教程基础篇:2.各个回调函数的触发顺序和执行流程 以tcp举例: tcp服务端流程: #include <asio2/asio2.hpp>int ...

  4. 付呗聚合支付快速教程 基础篇①——基本介绍和配置

    文章目录 一.对接手册 二.商户后台 三.银行分账 四.其他介绍 一.对接手册 付呗聚合支付对接手册 第一步自然是商务对接 本专栏是作为付呗的普通级商户,商户后台 使用付呗开发平台的支付API,接入到 ...

  5. ESP32-C3入门教程 基础篇⑪——Non-Volatile Storage (NVS) 非易失性存储参数的读写

    文章目录 一.前言 二.NVS介绍 三.操作流程 3.1 读操作流程 3.2 写操作流程 四.关键函数 五.随机整数 读写示例 六.对象/数组 读写示例 七.总结 八.参考 一.前言 本文基于VS C ...

  6. ESP32-C3入门教程 基础篇②——GPIO口输入,按键的长按和短按

    文章目录 一.前言 二.硬件准备 三.知识要点 3.1 GPIO使用 3.2 时钟节拍 四.参考例程 五.功能简述 六.源码实现 6.1 中断方式 6.2 定时扫描 七.源码详解 一.前言 本文基于V ...

  7. Redis进阶教程—基础篇-叶向阳-专题视频课程

    Redis进阶教程-基础篇-217人已学习 课程介绍         该系列教程涵盖了redis的方方面面,大亮点是实战经验分享总结.系列视频包含Redis基础篇.Redis提升篇.从零编写Redis ...

  8. 视频教程-Redis进阶教程—基础篇-NoSQL

    Redis进阶教程-基础篇 雅座Java架构师,架构开发公司百万级订单支付平台 叶向阳 ¥49.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取优惠 ...

  9. python人生苦短_人生苦短,我用Python(教程基础篇)

    人生苦短,我用Python(Python快速教程 - 基础篇) Life is short, you need Python 人生苦短,我用Python Python简介 本章将介绍Python的最基 ...

最新文章

  1. Nat. Mach. Intel. | 突变后蛋白蛋白结合力的拓扑网络树预测模型
  2. C/C++头文件区别
  3. tomcat6 优化初步
  4. DCMTK:全局类型和常量定义
  5. Flume学习笔记(一)安装与简单使用
  6. python系统状态_python实现系统状态监测和故障转移实例方法
  7. Java String和Date的转换 Date类型操作
  8. easyui的一个bug记录
  9. 修改服务器监听端口命令,如何更改prometheus监控系统启动的默认端口号
  10. Android10(Q,API-29)以上版本无法在存储卡目录创建文件夹的问题
  11. 【禁止重复造轮子Day01】省市级连的递归
  12. 20条理由告诉你,为什么当前的深度学习成了人工智能的死胡同?
  13. 小程序页面跳转的几种方式
  14. 基于电力行业信息安全基线的量化管理系统研究与应用
  15. 使用POI提取Word文件的内容(纯文本、带html格式)
  16. python从零开始到精通_「Python 入门学习指南」0基础小白助你从入门到精通!
  17. 量子力学的诡异现象—朱清时教授
  18. 用Unity写一个12306验证器的恶搞图生成软件
  19. matlab将图片旋转的代码_从零开始的matlab学习笔记——(27)图像旋转与动态图...
  20. 解决 BM8563 RTC时间乱跳问题

热门文章

  1. 计算机英语 单词201-300
  2. JAVA计算机毕业设计二手儿童闲置物品交易平台Mybatis+系统+数据库+调试部署
  3. 立大志为什么得不了中志? 我们缺少了合理期望
  4. Python入门---顺序与选择结构
  5. 华工计算机工程学院,计算机工程学院赴华工兄弟学院交流学习
  6. 锁模块之当前读和快照读
  7. 最简便的lightGBM GPU支持的安装、验证方法
  8. 国内外MCU厂商及产品线最全盘点
  9. 『论文笔记』TensorFlow1.6.0+Keras 2.1.5+Python3.5+Yolov3训练自己的数据集!
  10. 织信informat低代码平台怎么样?