CobaltStrike4.8用户指南-第十六节附录

科技一颗大心心 2024-12-24 05:13:17
16.1、键盘快捷键

可以使用以下键盘快捷键。

Shortcut(快捷键)

Where(在哪使用)

Action

Ctrl+A

console

选择所有文本

Ctrl+F

console

打开查找工具搜索控制台

Ctrl+K

console

清空控制台

Ctrl+Minus

console

减小字体大小

Ctrl+Plus

console

增加字体大小

Ctrl+0

console

重置字体大小

Down

console

显示命令历史记录中的下一个命令

Escape

console

清除编辑框

Page Down

console

向下滚动半个屏幕

Page Up

console

向上滚动半个屏幕

Tab

console

完成当前命令(在某些控制台类型中)

Up

console

显示命令历史记录中的上一个命令

Ctrl+B

everywhere

将当前选项卡发送到 Cobalt Strike 窗口底部

Ctrl+D

everywhere

关闭当前选项卡

Ctrl+Shift+D

everywhere

关闭除当前选项卡之外的所有选项卡

Ctrl+E

everywhere

清空 Cobalt Strike 窗口的底部(撤消 Ctrl+B)

Ctrl+I

everywhere

选择要交互的会话

Ctrl+Left

everywhere

切换到上一个选项卡

Ctrl+O

everywhere

打开首选项

Ctrl+R

everywhere

重命名当前选项卡

Ctrl+Right

everywhere

切换到下一个选项卡

Ctrl+T

everywhere

截取当前选项卡的屏幕截图(结果发送到团队服务器)

Ctrl+Shift+T

everywhere

截取 Cobalt Strike 的屏幕截图(结果发送到团队服务器)

Ctrl+W

everywhere

在独立窗口中打开当前标签页

Ctrl+C

graph

将sessions安排成一个圆圈

Ctrl+H

graph

按层次结构排列seesions

Ctrl+Minus

graph

缩小

Ctrl+P

graph

保存图形显示的图片

Ctrl+Plus

graph

放大

Ctrl+S

graph

将会话排列在堆栈中

Ctrl+0

graph

重置为默认缩放级别

Ctrl+F

tables

打开查找工具过滤表格内容

Ctrl+A

targets

选择所有主机

Escape

targets

清除选定的主机

Tip:默认键盘快捷键的完整列表可从菜单中获得(Help -> Default Keyboard Shortcuts)

#16.2、Beacon命令行为和 OPSEC 注意事项

一名优秀的操作员应该了解自己的工具,并知道该工具是如何代表自己实现目标的。本文档介绍了 Beacon 的命令,并提供了有关哪些命令会注入远程进程、哪些命令会生成作业以及哪些命令依赖 cmd.exe 或 powershell.exe 的背景信息。

API-only

以下命令内置于 Beacon 中,并依赖 Win32 API 来实现其目标:

cd、 cp、 connect、 download、 drives、 exit、 getprivs、 getuid、 inline-execute、 jobkill、 kill、 link、 ls、 make_token、 mkdir、 mv、 ps、 pwd、 rev2self、 rm、 rportfwd、 rportfwd_local、 setenv、 socks、 steal_token、 token_store、 unlink、 upload

House-keeping Commands

以下命令内置于 Beacon 中,用于配置Beacon或执行内务处理操作。其中一些命令(例如,清除、下载、帮助、模式、注释)不会生成 Beacon 执行的任务。

argue、 beacon_config、 beacon_gate、 blockdlls、 cancel、 checkin、 clear、 data-store、 downloads、 file_browser、 help、 history、 jobs、 mode dns、 mode dns-txt、 mode dns6、 note、 powershell-import、 ppid、 process_browser、 sleep、 socks stop、 spawnto、 sycall-method、 windows_error_code、 ! (run a command from history)

内联执行(BOF)

以下命令以Beacon内部对象文件的形式实现。Beacon 对象文件是按照特定约定编写的编译C程序,在 Beacon 会话中执行。该功能在运行完成后会被清理。

clipboard、 dllload、 elevate svc-exe、 elevate uac-token-duplication、 getsystem、 jump psexec、 jump psexec64、 jump psexec_psh、 kerberos_ccache_use、 kerberos_ticket_purge、 kerberos_ticket_use、 net domain、 reg query、 reg queryv、 remote-exec psexec、 remote-exec wmi、 runasadmin uac-cmstplua、 runasadmin uac-token-duplication、 timestomp

portscan 和 covertvpn 对话框中的网络接口解析也使用 Beacon 对象文件。

OPSEC建议

Beacon 对象文件的内存由 Malleable C2 的进程注入块的设置控制。

后渗透作业(Fork&Run)

许多 Beacon 后渗透功能会生成一个进程并向该进程注入功能。有些人称这种模式为 fork&run。 Beacon 这样做有多种原因:(i) 如果功能崩溃,这可以保护代理。 (ii) 从历史上看,该方案使x86 Beacon能够无缝启动 x64 后渗透任务。这一点至关重要,因为 Beacon 直到 2016 年才推出 x64 版本。 (iii) 某些功能可以针对特定的远程进程。这允许事后操作在不同的上下文中发生,而无需在其他上下文中迁移或生成有效负载。(iv)这一设计决策可将后渗透执行操作产生的大量干扰(线程、可疑内容)阻挡在 Beacon 进程空间之外。以下是使用这种模式的功能:

Fork&Run Only

covertvpn

execute-assembly

powerpick

Target Explicit Process Only

browserpivot

psinject

Fork&Run or Target Explicit Process

chromedump

dcsync

desktop

hashdump

keylogger

logonpasswords

mimikatz

net *

portscan

printscreen

pth

screenshot

screenwatch

ssh

ssh-key

OPSEC建议

使用 spawnto 命令更改 Beacon 将启动的进程,以执行后渗透作业。默认进程是 rundll32.exe(你可能不希望使用它)。ppid 命令也将更改这些工作运行的父进程。blockdlls 命令将停止某些安全产品的用户空间挂钩。 Malleable C2 的process-inject块可以对进程注入过程进行大量控制。 Malleable C2 的 post-ex 块为这些 postex DLL 本身提供了多个 OPSEC 选项。对于具有显式注入选项的功能,请考虑注入到当前的 Beacon 进程中。Cobalt Strike 可检测并执行不同于远程注入的自我注入。

显式注入不会在后渗透作业完成后清理任何内存。建议注入到可以安全终止的进程中,以清理内存中的artifacts。

进程程执行

这些命令产生一个新进程:

execute

run

runas

runu

OPSEC建议

ppid 命令将更改由execute 运行的命令的父进程。 ppid 命令不会影响 runas 或runu。

进程执行(cmd.exe)

shell 命令依赖于 cmd.exe。使用 run 运行命令,无需cmd.exe即可获得输出结果。

pth 命令依靠 cmd.exe 通过命名管道向 Beacon 传递令牌。传递令牌的命令模式是某些基于主机的安全产品寻找的指标。请阅读《如何使用 Mimikatz 传递哈希值https://blog.cobaltstrike.com/2015/05/21/how-to-pass-the-hash-with-mimikatz/》,了解如何手动执行此操作。

进程执行(powershell.exe)

以下命令启动 powershell.exe 以代表你执行某些任务。

jump

winrm

jump winrm64

powershell

remote-exec winrm

OPSEC建议

使用 ppid 命令更改powershell.exe运行所在的父进程。使用POWERSHELL_COMMAND Aggressor脚本钩子更改 PowerShell 命令及其参数的格式。Jump winrm、jump winrm64和 powershell [导入脚本时] 命令处理的PowerShell内容太大,无法容纳在单个命令行中。为了解决这个问题,这些功能在 Beacon 会话中的独立 Web 服务器上托管一个脚本。使用 POWERSHELL_DOWNLOAD_CRADLE Aggressor Script 钩子来构建用于下载这些脚本的下载平台。

进程注入(远程)

后渗透利用作业命令(前面提到的)也依赖于进程注入。注入远程进程的其他命令是:

dllinject

dllload

execute-dll <pid>

inject

shinject

OPSEC建议

Malleable C2 的process-inject块对进程注入过程提供了很多控制。当 beacon 退出注入的进程时,它不会从内存中清除自身,并且当 stage.sleep_mask 设置为 true 时,它将不再被屏蔽。随着 4.5 版本的发布,大部分堆内存将被清除并释放。如果您不想在渗透期间留下内存痕迹,建议不要退出Beacon。当你完成渗透任务后,建议重新启动所有目标系统以删除任何残留的内存中的artifacts。

进程注入(Spawn&Inject)

这些命令派生一个临时进程并向其中注入payload或 shellcode:

elevate uac-token-duplication

execute-dll

shspawn

spawn

spawnas

spawnu

spunnel

spunnel_local

OPSEC建议

使用spawnto命令设置要使用的临时进程。ppid 命令可为大多数命令设置父进程。blockdlls 命令将阻止某些安全产品的用户态钩子。Malleable C2 的process-inject块可对进程注入过程进行大量控制。Malleable C2 的 post-ex 块提供了调整 Beacon 内存规避选项的选项。

创建服务

以下Beacon内部命令可创建服务(在当前主机或远程目标上)以运行命令。这些命令使用 Win32 API 创建和操作服务。

elevate svc-exe

jump psexec

jump psexec64

jump psexec_psh

remote-exec psexec

OPSEC建议

这些命令默认使用由随机字母和数字组成的服务名称。Aggressor 脚本的PSEXEC_SERVICE 钩子允许你更改这一行为。这些命令中的每一个(jump psexec_psh 和remote-exec psexec 除外)都会生成一个服务 EXE 并将其上传到目标。 Cobalt Strike 的内置服务 EXE 生成 rundll32.exe [不带参数],向其中注入payload,然后退出。这样做是为了立即清理可执行文件。使用 Artifact Kit 可以更改生成的 EXE 的内容和行为。

#16.3、Unicode 支持

Unicode 是将世界语言中的字符映射到一个固定的数字或编码点。本文档介绍了 Cobalt Strike 对Unicode文本的支持。

编码

Unicode 是字符到数字(代码点)的映射,但它不是一种编码。编码是通过将单个序列或字节序列映射到该映射中的代码点来为它们分配含义的一致方法。

Java 应用程序在内部使用 UTF-16 编码存储和处理字符。UTF-16 是一种使用两个字节表示常用字符的编码。较罕见的字符用四个字节表示。Cobalt Strike 是一个 Java 应用程序,在内部,Cobalt Strike 能够存储、操作和显示世界上各种书写系统的文本。在 Java 核心平台上,这并不存在真正的技术障碍。

在 Windows 世界中,情况有些不同。Windows 中表示字符的选项可以追溯到 DOS 时代。DOS 程序使用 ASCII 文本和漂亮的方框图字符。将数字 0-127 映射为 US ASCII 和将 128-255 映射为漂亮的方框图字符的常用编码有一个名字。它就是编码 437。编码段 437 有多种变体,将漂亮的方框图字符与特定语言的字符混合在一起。这种编码集合被称为 OEM 编码。如今,每个 Windows 实例都有一个全局 OEM 编码设置。该设置决定了如何解释程序写入控制台的字节输出。要正确解释 cmd.exe 的输出,了解目标的 OEM 编码非常重要。

有趣的事情还在继续。DOS 程序需要方框绘图字符,但 Windows 程序不一定需要。因此,Windows 有 ANSI 编码的概念。这是一个全局设置,就像 OEM 编码一样。ANSI 编码决定了 ANSI Win32 API 如何将字节序列映射到代码点。一种语言的 ANSI 编码放弃了漂亮的方框图字符,转而使用在该编码所设计的语言中有用的字符。编码并不一定局限于将一个字节映射为一个字符。可变长度编码可以用单字节表示最常用的字符,然后用多字节序列表示其他字符。

但 ANSI 编码并不是全部。 Windows API 通常同时具有 ANSI 和 Unicode 变体。 API 的 ANSI 变体接受并解释文本参数,如上所述。 Unicode Win32 API 需要使用 UTF-16 编码的文本参数。

在 Windows 中,可能存在多种编码情况。OEM 编码可以用目标配置语言来表示一些文本。ANSI 编码可以表示更多文本,主要是目标语言配置的文本。UTF-16编码可以包含任何码位。还有 UTF-8,它是一种可变长度编码,对 ASCII 文本来说空间效率高,但也可以包含任何码位。

Beacon

Cobalt Strike 的 Beacon 会报告目标的 ANSI 和 OEM 编码,作为会话元数据的一部分。Cobalt Strike 会根据需要,使用这些值将文本输入编码为目标编码。Cobalt Strike 还会根据需要,使用这些值对目标编码的文本输出进行解码。

一般来说,文本与目标编码之间的转换对你来说是透明的。如果你在配置为同一种语言的目标上工作,事情就会按你的预期进行。

在混合语言环境中工作时,命令之间会出现不同的行为。例如,如果输出包含西里尔字母、中文和拉丁字母的字符,有些命令会正确处理。而其他命令则不会。

Beacon 中的大多数命令都使用目标机的 ANSI 编码来编码输入和解码输出。目标机配置的 ANSI 编码可能只能将字符映射到少数书写系统的码位。如果当前目标的 ANSI 编码没有映射西里尔字符,那么 make_token 将无法正确处理使用西里尔字符的用户名或密码。

Beacon 中的某些命令使用 UTF-8 作为输入和输出。一般来说,这些命令在处理混合语言内容时会达到预期效果。这是因为 UTF-8 文本可以将字符映射到任何 Unicode 编码点。

下表记录了哪些 Beacon 命令使用 ANSI 编码以外的其他编码来解码输入和输出:

命令

输入编码

输出编码

hashdump

UTF-8

mimikatz

UTF-8

UTF-8

powerpick

UTF-8

UTF-8

powershell

UTF-16

OEM

psinject

UTF-8

UTF-8

shell

ANSI

OEM

note :熟悉 mimikatz 的人会注意到,mimikatz 内部使用 Unicode Win32 API 和 UTF-16 字符。UTF-8从何而来?Cobalt Strike 与 mimikatz 的接口以 UTF-8 发送输入,并将输出转换为 UTF-8。

SSH Sessions

Cobalt Strike 的 SSH 会话使用 UTF-8 编码进行输入和输出。

Logging

Cobalt Strike 的日志是 UTF-8 编码的文本。

Fonts

你的字体在显示某些书写系统的字符时可能会受到限制。要更改 Cobalt Strike 字体:

转至 Cobalt Strike -> Preferences -> Cobalt Strike 更改 GUI 字体值。这将更改 Cobalt Strike 在其对话框、表格和界面其余部分中使用的字体。

进入 Cobalt Strike -> Preferences -> Console,更改 Cobalt Strike 控制台使用的字体。

Cobalt Strike -> Preferences -> Graph中有一个字体选项,可以更改 Cobalt Strike 的数据透视图使用的字体。

#说明

本文由笔者在Cobalt Strike官方用户指南原文(https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/welcome_main.htm)基础上编译,如需转载请注明来源。

0 阅读:1

科技一颗大心心

简介:感谢大家的关注