Cobalt Strike使用教程——基础篇

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

一、基本介绍

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                     进程参数污染,利用虚假参数(通常很多)执行敏感操作绕过AV
    blockdlls                 限定子进程只能加载带有Microsoft签名的dll,使AV无法通过dll加载对恶意程序进行监控
    browserpivot              注入靶机IE浏览器进程并开启HTTP代理,攻击者可以通过此代理继承靶机IE已获取的凭证
    cancel                    取消正在进行的下载
    cd                        改变目录
    checkin                   使用DNS Beacon时,使靶机强制回连C2
    chromedump                从Chrome浏览器目录文件获取账户密码
    clear                     清除Beacon内的任务队列
    connect                   从当前Beacon连接到一个等待连接的TCP Beacon
    covertvpn                 部署隐蔽VPN
    cp                        复制文件
    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 Beacon
    logonpasswords            利用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 it
    sleep                     设置Beacon的延迟时间(心跳时间)
    socks                     在靶机开启SOCKS4反向代理,监听端口在C2主机
    socks stop                停止SOCKS4代理
    spawn                     派生新的会话
    spawnas                   派生具有其他用户权限的会话
    spawnto                   Set executable to spawn processes into
    spawnu                    选择特定的父进程派生新的会话
    spunnel                   Spawn and tunnel an agent via rportfwd
    spunnel_local             Spawn and tunnel an agent via Cobalt Strike client rportfwd
    ssh                       使用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
    修改主机的操作系统、名字、备注、颜色等属性

  • 19
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值