Beacon 是 Cobalt Strikes payload,用于模拟高级攻击者。使用 Beacon 通过 HTTP、HTTPS 或 DNS 出网。你还可以通过控制 Windows 命名管道上的对等Beacon来限制哪些主机出网。
Beacon 非常灵活,支持异步和交互式通信。异步通信缓慢,Beacon 会回连服务器,下载任务,然后休眠。交互式通信是实时发生的。
Beacon 的网络流量指标具有可塑性。使用 Cobalt Strike 的malleable C2重新定义 Beacon 的通信。可以将Beacon活动伪装成其他恶意软件或混合合法流量。
#7.2、Beacon控制台右键单击Beacon会话并选择Interact以打开该 Beacon 的控制台。
这个控制台是你的 Beacon 会话的主用户界面。这个 Beacon 控制台允许你看向Beacon发送了哪些任务和 Beacon何时下载任务。这个Beacon控制台也是命令输出和展示其他信息的地方。
Beacon 控制台的输入和输出之间是一个状态栏。该状态栏包含有关当前会话的信息。在默认配置中,状态栏显示目标的 NetBIOS 名称、当前会话的用户名和 PID,以及Beacon的上次check-in时间。
向 Beacon 发出的每个命令,无论是通过 GUI 还是控制台,都会显示在该窗口中。如果队友发出命令,Cobalt Strike 会在命令前显示他们的昵称。
使用Cobalt Strike中,你可能会在 Beacon 控制台操作花费大量的时间。所以花时间熟悉它的命令非常重要。在 Beacon 控制台中键入help以查看可用的命令。键入 help+命令名称以获取该命令的详细帮助。
#7.3、Beacon菜单在一个 Beacon 上或在一个 Beacon 的控制台内单击右键来获取 Beacon 菜单。
Access :包含对凭据的操作和提权的一些选项Explore :包含提取信息并与目标系统交互的选项Pivoting :可以通过一个 Beacon 来配置工具来搭建流量隧道。Session :管理当前Beacon会话,包括设置高亮颜色,删除和退出会话。Cobalt Strike 的一些可视化(枢纽图和会话表)允许你一次选择多个 Beacon。通过菜单发生的大多数操作将应用于所有选定的 Beacon 会话。#7.4、异步和交互操作请注意,Beacon 是异步负载。命令不会立即执行。每个命令都会进入一个队列。当 Beacon 签入(连接到你)时,它会下载这些命令并一一执行。此时,Beacon 还会为报告它的任何输出。如果出错,使用clear命令清除当前Beacon的命令队列。
默认情况下,Beacon每60秒回连一次。可以使用Beacon的 sleep 命令来更改此设置。使用 sleep + 秒指定 Beacon 回连频率。还可以指定0到 99 之间的抖动因子作为第二参数。 Beacon 将根据指定为抖动因子的随机百分比来改变每次回连的时间。例如,sleep 300 20,将强制 Beacon 以 20% 的抖动百分比休眠 300 秒。这意味着,Beacon 将在每次签入后随机休眠 240 -300 秒。
要使Beacon每秒多次回连,请使用 sleep 0。这就是交互模式。在此模式下命令将立即执行。在你的隧道流量通过它之前你必须使得你的 Beacon 处于交互模式下。一些Beacon命令(如browerpivot、desktop等)会自动的使Beacon在下次连接到你时处于交互式模式下。
#7.5、运行命令Beacon 的 shell 命令将通过 Beacon 调用受感染主机上的 cmd.exe 执行命令。命令完成后,Beacon 将会回显命令执行结果。
使用run命令来执行不使用 cmd.exe 的命令。运行命令会将输出显示处理。
使用execute 命令在后台运行程序并但不捕获输出。
使用powershell命令在受感染的主机上通过PowerShell执行命令。使用powerpick命令在没有 powershell.exe 的情况下执行 PowerShell cmdlet。此命令依赖于 Lee Christensen 开发的非托管 PowerShell 技术。powershell和powerpick命令将使用你当前的令牌(token)。
psinject 命令会将非托管PowerShell注入特定进程并从该位置运行 cmdlet。
powershell-import 命令将 PowerShell 脚本导入到Beacon中。将来使用 powershell、powerpick 和psinject命令时,将可以使用导入脚本中的 cmdlet。 Beacon 一次仅保存一个 PowerShell 脚本。导入一个空文件可以清除从 Beacon 导入的脚本。
execute-assembly 命令将一个本地的 .NET 可执行文件作为 Beacon 的后渗透任务来运行。你可以将参数传递给此程序集,就像它是从一个Windows命令行接口运行一样。此命令也继承你的当前令牌。
如果你希望 Beacon 从特定目录执行命令,请在Beacon控制台中使用cd命令切换 Beacon 进程的工作目录。 pwd 命令查看当前工作目录。
setenv 命令将设置一个环境变量。
Beacon 可以执行 Beacon 对象文件而无需创建新进程。 Beacon 对象文件是已编译的 C 程序,按照特定约定编写,在 Beacon 会话中运行。使用 inline-execute [args] 执行具有指定参数的Beacon对象文件。有关详细信息,请参阅Beacon Object Files章节。
#7.6、会话传递Cobalt Strike 的 Beacon 最初是一个稳定的生命线,让你可以保持对受害主机的访问权限。从一开始,Beacon 的主要目的就是向其他的 Cobalt Strike 监听器传递访问权限。
使用spawn命令为监听器生成一个会话。 spawn 命令接受架构(例如 x86、x64)和监听器作为其参数。
默认情况下,spawn 命令将在 rundll32.exe 中派生一个会话。管理员通过警报可能会发现 rundll32.exe 定期连接到互联网这一奇怪现象。找到一个更好的程序(例如,Internet Explorer)并使用spawnto命令来声明在派生新会话时候会使用 Beacon 中的哪个程序。
spawnto 命令要求你根据需要指定体系结构(x86 或 x64)以及用于派生会话的程序的完整路径。单独输入spawnto并按Enter键以指示 Beacon 返回其默认行为。
使用inject命令,后跟进程 ID 和监听器名称,以将会话注入到特定进程中。使用 ps 获取当前系统上的进程列表。使用inject [pid] x64将64位Beacon注入到x64进程中。
spawn 和 inject 命令都将一个 payload stage 注入进内存中。如果 payload stage 是 HTTP、HTTPS 或 DNS Beacon 并且它无法连接到你,那么你将看不到一个会话。如果 payload stage 是一个绑定的 TCP 或SMB的 Beacon,这些命令会自动地尝试连接到并控制这些 payload。
使用 dllinject [pid] 将反射DLL注入到进程中。
使用shinject [pid] [architecture] [/path/to/file.bin]命令将从本地文件注入shellcode 到目标进程中。使用shspawn [architecture] [/path/to/file.bin]命令会先派生一个新进程(这个新进程是 spawn to 命令指定的可执行文件)
使用dllload [pid] [c:\path\to\file.dll]在另一个进程中加载磁盘上的 DLL文件。
#7.7、备用父进程使用ppid [pid]为 Beacon 会话运行的程序分配备用父进程。这是一种使你的活动与目标的正常动作融合的方法。当前Beacon会话必须拥有调用备用父进程的权限,并且最好备用父进程与你的 Beacon 存在于同一桌面会话中。键入 ppid(不带任何参数),会让 Beacon 使 用其本身的进程作为父进程、不使用伪造的父进程。
runu 命令将以另一个进程作为父进程执行命令。此命令将以其备用父进程的权限和桌面会话运行。当前 Beacon 会话必须拥有到备用父进程的完整权限。 spawnu 命令将派生一个临时进程,作为指定进程的子进程,并将一个 Beacon payload stage 注入进此进程。
spawnto的值控制用哪一个程序来作为临时进程。
#7.8、欺骗进程参数每个 Beacon 都有一个内部命令列表,用于伪装参数。当 Beacon 执行一个匹配该列表的命令时,Beacon 将:
以挂起状态启动匹配的进程(带有伪造的参数)
用真实参数更新进程内存
恢复进程
这样,主机的仪器记录一个进程启动时将看到伪造的参数。这有助于掩盖你的真实活动。
使用argue [命令] [伪造参数]将命令添加到此内部列表中。 [命令] 部分可以包含环境变量。使用 argue [命令] 从此内部列表中移除一个命令。单独使用 argue 列出此内部列表中的命令。
进程匹配逻辑是精确的。如果Beacon 尝试启动“net.exe”,它将不会匹配 net、NET.EXE 或 c:\windows\system32\net.exe。它只会匹配 net.exe。
x86 Beacon 只能在x86子进程中伪装参数。同样,x64 Beacon 只能在x64子进程中伪装参数。
真实参数被写入保存伪造参数的内存空间。如果真实参数长度超过伪造参数,命令启动将失败。
#7.9、阻止子进程中的 DLL使用 blockdlls start 可要求 Beacon 使用二进制签名策略启动子进程,该策略会阻止非 Microsoft DLL 进入进程空间。使用 blockdlls stop 来禁用此行为。此功能在 Windows 10以上才支持。
#7.10、上传和下载文件download - 此命令下载请求的文件。文件名中带空格的文件不需要用引号括起来。Beacon设计用于缓慢而低调地提取数据。在每次检查中,Beacon将下载每个任务文件的固定块。这块的大小取决于 Beacon 当前的数据通道。HTTP 和 HTTPS 通道以512KB的块提取数据。
downloads - 用于查看当前 Beacon 正在进行的文件下载列表。
cancel- 发出此命令,后跟文件名,以取消正在进行的下载。您可以在取消命令中使用通配符,一次取消多个文件下载。
upload - 此命令将文件上传到主机。
timestomp - 当您上传文件时,有时需要更新其时间戳,以便与同一文件夹中的其他文件融合。这条命令可以做到这一点。timestomp 命令将一个文件的修改时间、访问时间和创建时间匹配到另一个文件。
前往 Cobalt Strike 的View -> Downloads,查看你的团队迄今为止下载的文件。此选项卡仅显示已完成的下载。
下载的文件存储在团队服务器上。要将文件带回你的系统,请在此处选中它们,然后按下 Sync Files。。Cobalt Strike 然后将所选文件下载到你系统上选择的文件夹中。
#7.11、文件浏览器Beacon 的文件浏览器提供了浏览受感染系统上的文件的功能。转到Beacon -> Explore -> File Browser 打开它。
你还可以使用 file_browser 命令,从当前目录开始打开文件浏览器选项卡。
文件浏览器将请求 Beacon 当前工作目录的列表。结果到达后,文件浏览器将弹出。
文件浏览器的左侧是一个树形视图,将已知驱动器和文件夹组织到一个视图中。文件浏览器的右侧显示当前文件夹的内容。
每个文件浏览器都会缓存收到的文件夹列表。彩色文件夹表示该文件夹的内容在该文件浏览器的缓存中。你可以浏览缓存文件夹,而无需生成新的文件列表请求。按Refresh键可要求 Beacon 更新当前文件夹的内容。
深灰色文件夹表示该文件夹的内容不在此文件浏览器的缓存中。单击树形图中的文件夹,Beacon 会生成一个任务来列出该文件夹的内容(并更新其缓存)。双击右侧当前文件夹视图中的深灰色文件夹也可执行同样的操作。
要向上进入上一层文件夹,请点击右侧文件夹详细信息视图上方文件路径旁边的文件夹按钮。如果父文件夹在此文件浏览器的缓存中,你将立即看到结果。如果父文件夹不在文件浏览器的缓存中,浏览器将生成一个任务以列出父文件夹的内容。
右键单击文件即可下载或删除它。
要查看哪些驱动器可用,请点击List Drives
文件系统命令
你可能更喜欢从 Beacon 控制台浏览和操作文件系统。
使用 ls 命令列出当前目录下的文件。使用 mkdir 创建目录,使用rm删除文件或文件夹,使用 cp 复制文件到目的地,使用 mv 移动文件。
#7.12、Windows注册表使用 reg_query [x86|x64] [HIVE\path\to\key] 查询注册表中的特定键值。该命令将打印该键内的值以及任何子键的列表。x86/x64 选项是必需的,它会强制 Beacon 使用注册表的 WOW64 (x86) 或本地视图。 reg_query [x86|x64] [HIVE\path\to\key] [value] 将查询注册表键值中的特定值。
#7.13、捕捉按键和屏幕截图Beacon的按键记录和截屏工具旨在注入另一个进程,并将结果报告给 Beacon。
要启动按键记录器,请使用键盘记录器keylogger pid x86注入 x86 进程。使用keylogger pid x64注入 x64 进程。单独使用keylogger ,将键盘记录程序注入临时进程。按键记录器将监控被注入进程的按键操作,并将其报告给 Beacon,直到该进程终止或你杀死按键记录器后渗透任务。
请注意,多个按键记录器可能会相互冲突。每个桌面会话只能使用一个按键记录器。
要截屏,请使用 screenshot pid x86 将截屏工具注入 x86 进程。使用 screenshot pid x64 将截图工具注入 x64 进程。screenshot 本身会将截屏工具注入一个临时进程。
使用screenwatch 命令(可选择使用临时进程或注入显式进程)将持续截屏,直到你停止 screenwatch 后渗透工作。
使用printscreen命令(也可使用临时进程和注入选项)以另一种方法截屏。该命令使用 PrintScr 键将截图放到用户的剪贴板上。该功能可从剪贴板中恢复截图并将其报告给你。
当 Beacon 收到新的截图或击键信息时,它会向 Beacon 控制台发布一条信息。不过,截图和击键信息无法通过 Beacon 控制台获取。转到 View -> Keystrokes,查看所有 Beacon 会话中记录的击键。转到 View -> Screenshots ,浏览所有 Beacon 会话的截图。这两个对话框都会随着新信息的到来而更新。通过这些对话框,操作员可以轻松监控所有 Beacon 会话的按键和屏幕截图。
#7.14、控制Beacon作业多个 Beacon 功能在另一个进程中作为作业运行(例如,击键记录器和屏幕截图工具)。这些作业在后台运行,并在可用时报告其输出。使用 jobs 命令查看 Beacon 中正在运行哪些作业。使用 **jobkill [job number]**终止作业。
#7.15、作业浏览器任务浏览器是一个图形用户界面元素,可简化后渗透任务的管理。
作业浏览器提供以下功能:
Interact – 打开控制台窗口并查看作业输出Kill – 终止正在运行的作业Name– 为作业命名Hide/Show Output – 允许用户隐藏 Beacon 控制台的作业输出(对于具有大量输出的长时间运行作业(例如 SharpHound)特别有用)要打开特定Beacon的作业浏览器,请右键单击Beacon(或打开的控制台窗口)并选择Jobs。
也可以使用这种方法选择多个Beacon
要打开所有信标的任务浏览器,请打开View 菜单并选择 All Jobs。
#7.16、进程浏览器进程浏览器的作用显而易见,它能让Beacon显示目标的进程列表,并向你展示这些信息。转到 [beacon] -> Explore -> Show Processes 打开进程浏览器。
你也可以使用命令 process_browser 从当前目录开始打开进程浏览器选项卡。
左侧以树形结构显示进程。 Beacon 的当前进程以黄色突出显示。
右侧显示进程详情。可以利用进程浏览器快捷的进行进程令牌冒充、部署截屏工具或部署按键记录器。
选中一个或多个进程,然后按标签页底部的相应按钮。
如果你选中多个 Beacon 并让它们显示进程,Cobalt Strike 将显示一个进程浏览器,其中还说明进程来自哪个主机。进程浏览器的这种变体是一种方便快捷的方式,可以同时在多个系统中部署 Beacon 的后渗透工具。
只需按进程名称排序,选择目标系统上感兴趣的进程,然后按下Screenshot 或 Log Keystrokes按钮,即可将这些工具部署到所有选中的系统上。
#7.17、桌面控制要与目标主机上的桌面交互,请转至 [beacon] -> Explore -> Desktop (VNC)。这会将 VNC 服务器暂存在当前进程的内存中,并通过 Beacon 建立隧道连接。
VNC 服务器准备就绪后,Cobalt Strike 会打开一个名为Desktop HOST@PID的选项卡。
你还可以使用 Beacon 的桌面命令将 VNC 服务器注入特定进程。使用 desktop pid architecture low|high。最后一个参数用于指定 VNC 会话的质量。
Desktop选项卡底部有几个按钮。它们是
如果您无法在桌面选项卡中输入,请检查 Ctrl 和 Alt 按钮的状态。当任一按钮被按下时,所有的按键输入都将带有 Ctrl 或 Alt 修饰符。按下 Ctrl 或 Alt 按钮以关闭此行为。确保View only选项也未被选中。为了防止你意外移动鼠标,View only选项默认被选中。