安装和设置
系统要求
Cobalt Strike的最低系统要求
2 GHz +以上的cpu
2 GB RAM
500MB +可用空间
在Amazon的EC2上,至少使用较高核数的CPU(c1.medium,1.7 GB)实例主机。
支持的操作系统
以下系统支持Cobalt Strike Team Server:
Kali Linux 2018.4 - AMD64
Ubuntu Linux 16.04,18.04 - x86_64
Cobalt Strike客户端在以下系统上运行:
Windows 7及更高版本
MacOS X 10.13及以上版本
Kali Linux 2018.4 - AMD64
Ubuntu Linux 16.04,18.04 - x86_64
更新Cobalt Strike
要充分利用Cobalt Strike的功能,您必须使用许可证密钥更新许可产品。试用程序中包含执行此操作的更新程序
此程序接受许可证密钥并为您获取最新的Cobalt Strike版本。授权的Cobalt Strike软件包括防病毒的逃避功能,并删除了试用程序中未授许可申明。
windows
1.进入到到Cobalt Strike文件夹
2.双击update.bat
Linux
输入以下内容:
cd /path/to/cobaltstrike
./update
MacOS X
1.进入到Cobalt Strike文件夹
2.双击“ Update Cobalt Strike.command”
确保使用许可证密钥更新team server和客户端软件。Cobalt Strike通常根据每个用户获得许可。team server不需要单独的许可证。
如何重置许可证密钥
Cobalt Strike的更新程序只会询问您的密钥一次。之后,它会记住你的钥匙。如果需要更改密钥,只需删除存储在主目录中的.cobaltstrike.license文件即可。再次运行更新程序,Cobalt Strike将要求您提供新密钥。
安装Cobalt Strike
Cobalt Strike依赖于Oracle Java 1.8,Oracle Java 11或OpenJDK 11环境。
Linux
1.为Linux 设置推荐的Java环境
2.解压cobaltstrike-trial.tgz
tar zxvf cobaltstrike-trial.tgz
MacOS X
1.为MacOS X 设置推荐的Java环境
2.双击cobaltstrike-trial.dmg文件以安装它。
3.将Cobalt Strike文件夹拖到“应用程序”文件夹中。
windows
1.为Windows 设置推荐的Java环境
2.在下载并安装Cobalt Strike之前禁用防病毒软件。
3.使用您喜欢的zip工具将cobaltstrike-trial.zip解压到您首选的安装位置。
启动Cobalt Strike
Team Server
Cobalt Strike分为客户端和服务器端。该服务器端被称为团队服务器,是Beacon有效负载的控制器,同时Cobalt Strike也具有社会工程学功能。团队服务器还存储Cobalt Strike收集的数据,并管理日志记录。
Cobalt Strike团队服务器必须以root身份运行在所支持的操作系统上。要启动Cobalt Strike团队服务器,请使用Cobalt Strike Linux软件包附带的teamserver脚本。
./teamserver 服务器IP地址 密码
团队服务器有两个必要参数和两个可选参数。第一个是团队服务器的IP地址。Cobalt Strike使用此值作为其默认的服务器主机。第二个是您的团队成员用于将Cobalt Strike客户端连接到团队服务器的密码。
第三个参数是可选的。此参数指定Malleable C2通信配置文件。
第四个参数也是可选的。此参数指定以YYYY-MM-DD为格式的结束日期。团队服务器会将此结束日期嵌入其生成的每个Beacon中。Beacon有效负载将拒绝在此结束日期或之后运行。如果Beacon有效载荷在此结束日期或之后唤醒,它也将被运行退出。
当团队服务器启动时,它将发布团队服务器SSL证书的SHA256哈希值。您应该将此哈希值分发给您的团队成员。当您的团队成员连接时,Cobalt Strike客户端会在向团队服务器进行身份验证之前询问是否验证此哈希。这是防止中间人攻击的重要保护。
Cobalt Strike Client
Cobalt Strike客户端连接到团队服务器。要启动Cobalt Strike客户端,请使用软件包中附带的启动程序。不带任何参数。当Cobalt Strike客户端启动时,您将看到一个连接对话框。
Linux下:
Windows下:
在“host”字段中指定团队服务器的ip地址。团队服务器的默认端口是50050.很少有人更改此设置。“user”字段是团队服务器上的用户名称。将此更改为您的名称。“password”字段是团队服务器的密码。点击Connect连接到Cobalt Strike团队服务器。如果这是您与此团队服务器的第一次连接,Cobalt Strike将询问您是否识别此团队服务器的SSL证书的SHA256哈希值。如果需要,请点击OK,Cobalt Strike客户端将连接到服务器。Cobalt Strike还会记住这个SHA256哈希,以便以后方便连接。
您可以通过Cobalt Strike - > Preferences - > Fingerprints管理这些哈
希值。
Cobalt Strike会跟踪您连接的团队服务器并记住您的信息。从连接对话框的左侧选择其中一个团队服务器配置文件,以使用其信息自动填充连接对话框。您也可以通过Cobalt Strike - > Preferences - > Team Servers修改此连接。
功能参考
Application Browser
要查看受控的应用程序,请进入View -> Applications。这将打开一个Applications选项卡,其中包含一个列表,显示System Profiler受控的所有应用程序信息。
Analyst技巧
应用程序浏览器有很多信息可用于对目标攻击的方法。以下是如何充分利用此输出的方法:
内部IP地址字段是从没有危险的未知签名Java小程序中收集的。如果此字段显示为unknown,则表示Java applet可能没有被运行。如果您在此处看到IP地址,则表示未签名的Java小程序已被执行。
Internet Explorer将输出用户安装的基本版本信息。随着Internet Explorer获取到更新信息后 , 它的输出的版本信息不会被更改。Cobalt Strike使用JScript.dll 版本号来判断Internet Explorer的补丁等级。进入到support.microsoft.com并搜索JScript.dll的内部版本号(版本字符串中的第三个数字)以将显示其Internet Explorer更新版本信息。
应用程序旁边的A * 64表示它是x64位应用程序。
Attacks-->web Dive-by-->system profiter
Client-side Reconaissance
Artifact Kit
Cobalt Strike使用Artifact Kit生成其可执行文件和DLL。Artifact Kit是一款商业框架,用于构建可逃逸某些防病毒产品的可执行文件和DLL的检查。
Artifact Kit理论
传统的防病毒产品使用签名来识别已知的恶意信息。如果我们将已知的恶意shellcode嵌入到可执行文件中,则防病毒产品将识别shellcode并将可执行文件标记为恶意软件。
为了逃避这种检测,攻击者以某种方式混淆shellcode并将其嵌套于二进制文件中是很常见的。这种混淆可以逃避那些使用简单字符串搜索来识别恶意代码的反病毒产品。
有许多防病毒产品在进行了病毒库更新后,防病毒产品会模拟虚拟沙箱中可执行文件的来检查。通过每个模拟的运行步骤,防病毒产品会在模拟的进程空间中检查已知的错误。如果出现已知错误,则防病毒产品会将可执行文件或DLL标记为恶意。这种技术使许多编码器和加载器会被AV检查到,而这些编码器和加载器试图隐藏基于签名的防病毒产品中的已知错误。
Cobalt Strike与此相反,防病毒沙箱有局限性。它不是一个完整的虚拟机。防病毒沙箱无法模拟系统行为。Artifact Kit是可执行文件和DLL模板的集合,它依赖于反病毒产品不会模拟的某些行为来恢复位于二进制文件内的shellcode。
其中一种技术[参见:Artifact Kit中的 src-common/bypass-pipe.c]生成可执行文件和DLL,它们通过命名管道为自己提供shellcode。如果防病毒沙箱不能模拟命名管道,它将找不到已知的恶意shellcode。
Artifact Kit无效的原因
当然,反病毒产品可能会破坏Artifact Ki的特定功能。如果反病毒软件供应商为您使用的Artifact Kit进行数字签名检查,那么它创建的可执行文件和DLL将被AV检查到。随着时间的推移,这种情况开始发生在Cobalt Strike 2.5及以下的版本中。如果您想从Artifact Kit中发挥最大的作用,那么您将使用其中一种技术作为基础来构建您自己的Artifact Kit套件。
即使这远远还够,因为反病毒厂商首先要确定可执行文件或DLL是否存在已知风险或未知风险或未发现和可执行文件或DLL。其中一些防病毒产品会自动将未知的可执行文件和DLL自动发送给反病毒厂商进行进一步分析并告警用户。并将未知的可执行文件和DLL视为恶意。这取决于反病毒产品及其设置。
注意:在这种情况下,没有任何“混淆”可用。你面对的是另一种检查方式,需要相应地改变。以此和处理应用程序白名单相同的方式来处理这些情况。需要尝试找到一个已知可用程序(例如,powershell),它将使你的有效负载可有效执行。
如何使用Artifact Kit
从授权的Cobalt Strike 进入Help -> Arsena来下载Artifact Kit。
Strategic Cyber LLC将Artifact Kit分发为.tgz文件。使用tar命令将其解压缩。Artifact Kit包含build.sh脚本。在Kali Linux上运行此脚本,使用Minimal GNU for Windows Cross Compiler构建默认的Artifact Kit技术。
Artifact Kit构建过程
Artifact Kit构建脚本为每个Artifact Kit技术创建一个包含模板的文件夹。要使用Cobalt Strike技术,请转到Cobalt Strike - > Script Manager,然后从该文件夹中加载artifact.cna脚本。
我们鼓励您修改Artifact Kit及其代码,以满足您的特定需求。虽然熟练的C程序员可以使用Artifact Kit做更多的事情,但非程序员也可以使用Artifact Kit。例如,一个主要的反病毒产品喜欢在每次发布时都在Cobalt Strike的试用版中为可执行文件写入数字签名。直到Cobalt Strike 2.5后,Cobalt Strike的试用版和许可版在其可执行文件和DLL中使用了命名管道技术。该供应商将为可执行文件使用的命名管道字符串也写一个数字签名。逃避它们的数字签名,可在执行后释放其本身的字符特征,就像在管道技术的源代码中更改管道的名称一样简单。
Artifact Kit使用
Cobalt Strike许可证授权文件
Cobalt Strike的许可版本需要有效的授权文件才能启动。授权文件是加密的blob,它提供有关Cobalt Strike产品许可的信息。此信息包括:许可证密钥,许可证到期日期以及与许可证密钥绑定的ID号。
如何获得授权文件
内置的更新程序在运行(built-in update program )时从Cobalt Strike的更新服务器请求一个授权文件。即使您的Cobalt Strike版本是最新的,更新程序也会下载新的授权文件。这允许授权文件与Strategic Cyber LLC的记录中的许可日期保持同步。
许可证到期后会发生什么
Cobalt Strike将在其授权文件到期时阻止启动。如果授权文件在Cobalt Strike运行时失效,则不会产生任何影响。许可的Cobalt Strike产品仅在启动时检查授权文件。
授权文件什么时候到期
当您的Cobalt Strike许可证到期时,您的授权文件将过期。如果续订Cobalt Strike许可证,请运行更新程序在运行(built-in update program )以使用最新信息刷新授权文件。
进入到Help -> System Information以查找授权文件何时到期。查找“ Other”部分下查找“有效”值。请记住,客户端信息和Team Server信息可能具有不同的值(取决于使用的许可证密钥以及上次刷新授权文件的时间)。
当Cobalt Strike的授权文件在其有效期限的30天内发出警告时,它也会发出警告。
如何将授权文件传输至封闭环境
授权文件是cobaltstrike.auth。更新程序始终将此文件与cobaltstrike.jar放在一起。在封闭环境中使用Cobalt Strike:
1.下载https://www.cobaltstrike.com/download上的Cobalt Strike试用包
2.从互联网连接系统更新Cobalt Strike试用包
3.将更新的cobaltstrike 文件夹的内容复制到您的环境中。最重要的文件是cobaltstrike.jar和cobaltstrike.auth。
Cobalt Strike是否致电Strategic Cyber LLC
在更新过程中,Cobalt Strike不会给Strategic Cyber LLC“致电”。授权文件由更新过程生成。
如何使用旧版本的Cobalt Strike并刷新授权文件
Cobalt Strike 3.8及以下版本不检查或要求授权文件。
Cobalt Strike 3.9及更高版本检查与cobaltstrike.jar文件位于同一目录的cobaltstrike.auth文件。从另一个文件夹更新Cobalt Strike并将新的cobaltstrike.auth文件复制到包含旧版Cobalt Strike的文件夹中。授权文件与产品的特定版本无关。
什么是客户ID值
客户ID是与Cobalt Strike许可证密钥关联的4字节数字。Cobalt Strike 3.9及更高版本将此信息嵌入Cobalt Strike生成的payload stagers 和 stages generated中
如何在Cobalt Strike artifact中找到客户ID值
客户ID值是Cobalt Strike 3.9及更高版本中Cobalt Strike payload stager的最后4个字节。
此屏幕截图是来自试用版的HTTP stager。试用版的客户ID值为0.此stager的最后4个字节(0x0,0x0,0x0,0x0)显示了这一点。
HTTP Payload Stager(Cobalt Strike Trial)
客户ID值也存在于payload stage,但还有更多的恢复步骤。Cobalt Strike不会在其网络流量或工具的其他部分中使用客户ID值。
如何使用此ID保护不同的红队基础架构受交叉标识的影响
如果每个team server上都有唯一的授权文件,则每个team server和源自它的 artifacts将具有不同的ID。
每次运行更新程序时,Cobalt Strike的更新服务器都会生成一个新的授权文件。每个授权文件都有一个唯一的ID。Cobalt Strike仅传输team server的ID。它不会从GUI或无客户端的授权文件传播ID
Beacon
Beacon是Cobalt Strike有效载荷,用来模拟高级的攻击。使用Beacon通过HTTP,HTTPS或DNS来建立通信。您还可以通过控制Windows命名管道上的点对点Beacons来限制哪些主机可以通信。
Beacon非常灵活,支持异步和交互式通信。异步通信延迟低又慢。Beacon会将任务返回给服务器请求,并下载任务,然后进入睡眠状态。交互式通信是实时执行。Beacon的网络指标具有malleable性。重新定义Beacon与Cobalt Strike malleable C2之间的建立。这可以使您将Beacon活动作为其他恶意软件或混淆加密的流量为合法流量。
Beacon控制台
右键单击Beacon会话并选择 interact(交互)以打开Beacon的控制台。控制台是Beacon会话的主要用户界面。Beacon控制台允许您查看向Beacon发出的任务以及何时下载它们。Beacon控制台也是命令输出和其他信息输出的地方。
Beacon控制台
在Beacon控制台的输入和输出之间是一个状态栏。此状态栏包含有关当前会话的信息。在其默认配置中,状态栏显示目标的NetBIOS名称以及当前会话的用户名和PID以及Beacon的最后记录时间。
通过GUI或控制台发送给Beacon的每个命令都将显示在此窗口中。如果其他队友发出命令,Cobalt Strike将使用他们的handle来预先修复命令。
您可能会花费大部分时间在Beacon控制台中使用Cobalt Strike。在Beacon控制台中键入help以查看其可用的命令。键入help后跟命令名称以获取详细帮助。
Beacon 菜单
右键单击Beacon或Beacon控制台内部以访问Beacon菜单。这与用于打开Beacon控制台的菜单相同。ACCESS菜单包含操作授信material和提升访问权限的选项。Explore菜单包含用于提取信息与目标系统交互的选项。通过Pivoting菜单,您可以设置工具以通过Beacon隧道进行传输流量。Session菜单是您管理当前Beacon会话的位置。
Beacon 菜单
Cobalt Strike的一些可视化(pivot图和会话表)允许您一次选择多个Beacon 。通过此菜单产生的大多数操作都将适用于所有选定的Beacon会话。
异步和交互式操作
请注意,Beacon是异步有效负载。命令不会立即执行。每个命令都进入队列。当Beacon验入(连接到您)时,它将下载这些命令并逐个执行。此时,Beacon还会显示它为您提供的任何输出。如果输入有误,请使用clear命令清除当前Beacon的命令队列。
默认情况下,Beacons每60秒验入一次。您可以使用Beacons sleep命令更改此设置。使用sleep命令然后以秒为单位来指定Beacon应该验入的频率时间。您还可以指定0到99之间的第二个数字。此数字是波动因素。Beacon会根据您指定为波动因素的随机百分比来改变每个 Beacons 的验入时间。例如,sleep 300 20将使Beacon以20%的波动百分比来休眠300秒。这意味着,每次进入Beacon后,Beacon将在240到300秒之间休眠一段随机值。
要每秒多次检查Beacon,请尝试sleep 0。这是交互模式。在此模式下,命令将立即执行。您必须先让Beacon进行交互,然后才能将流量通过隧道传输。一些Beacon命令(例如,browserpivot和desktop等)将在下次验入时自动将Beacon置于交互模式。
运行命令
Beacon的shell命令将Beacon通过受害主机上的cmd.exe执行命令。命令执行完成后,Beacon将向您显示输出信息。
使用不带cmd.exe的run命令执行。run命令会将输出显示给您。在后台运行的程序执行命令时并不能捕获到其输出。
使用powershell命令在受害的主机上使用PowerShell执行命令。使用powerpick命令在不使用powershell.exe的情况下执行PowerShell cmdlet。此命令依赖于Lee Christensen开发的Unmanaged PowerShell技术。powershell和powerpick命令将使用您当前的令牌。
psinject命令将向特定进程中注入非托管PowerShell,并从该位置运行您的Cmdlet。
PowerShell导入命令将PowerShell脚本导入到Beacon。PowerShell、Powerpick和psinject命令将导入脚本中的Cmdlet。Beacon一次只能保存一个PowerShell脚本。导入空文件以从Beacon中清除导入脚本。
execute assembly命令将运行本地.NET可执行文件作为Beacon post-exploitation job.。可以将参数传递给此程序集,就像它是从Windows命令行界面运行的一样。此命令还将继承您当前的令牌。
如果您希望Beacon从特定目录执行命令,请使用Beacon控制台中的cd命令切换Beacon进程的当前目录。该PWD命令将显示当前目录,该SETENV命令将设置环境变量。
会话传递
使用spawn命令为侦听器生成的会话。spawn命令接受一个系统架构(例如,x86,x64)和一个侦听器作为其参数。
默认情况下,spawn命令将在rundll32.exe中生成一个会话。可能会被管理员会发现rundll32.exe定期连接到Internet很异常。找到一个更好的程序(例如,Internet Explorer)并使用spawnto命令来使Beacon应该将会话注入到哪个程序中。spanwto命令要求您根据需要指定要生成的程序的系统架构和完整路径。键入spawto并按Enter键显示Beacon返回其默认行为。
inject和spawn命令都将所需侦听器的stager注入到内存中。这个stager试图回连您,将请求的有效负载转移到内存中。如果stager无法通过任何网络防火墙出口限制,您将无法获得会话。
使用dllinject [pid]将反射DLL注入进程。使用shinject [pid] [architecture] [/path/to/file.bin]命令将shellcode从本地文件注入到目标进程中。使用shspawn [archicture] [/path/to/file.bin]生成的“spawn to”进程,并将指定的shellcode文件注入到该进程中。
使用[archicture] [/path/to/file.bin] 在另一个进程中加载磁盘上的DLL。
替换父进程
使用ppid [pid]为Beacon会话运行的程序分发备用父进程。这是一种让您的执行行为与目标上的正常执行行为融为相似的方法。当前的Beacon会话必须拥有备用父进程的权限,如果备用父进程与Beacon位于同一桌面会话中,则最好。键入ppid,不带任何参数,在没有欺骗父进程的情况下进行Beacon会话启动。
runu命令将以另一个进程作为父进程执行命令。此命令将以其备用父进程的权限和桌面会话一起运行。当前的Beacon会话必须拥有备用父进程的最高权限。如果另一个父进程在另一个桌面会话中,就可以了。spawu命令在runu上生成一个会话(通过powershell.exe),以另一个进程作为父进程。这些命令是在桌面会话之间移动而不进行远程进程注入的一种方法。
欺骗进程参数
每个Beacon都有一个内部的命令列表,它应该带有欺骗参数。当Beacon运行与列表匹配的命令时,Beacon:
1.以挂起状态启动匹配的进程(使用伪参数)
2.使用真实参数更新进程内存
3. 恢复进程
结果是记录进程启动的主机工具将看到伪参数。这有助于掩饰您的真实执行行为。
使用argue [command] [fake arguments]将命令添加到此内部列表。[command]部分可以包含环境变量。使用argue [command]从此内部列表中删除命令。argue,它本身列出了这个内部列表中的命令。进程匹配逻辑是准确的。如果Beacon尝试启动“net.exe”,它将无法与其内部列表中的net,NET.EXE或c:\windows\system32\net.exe匹配。它只会匹配net.exe。x86 Beacon只能欺骗x86子进程中的参数。同样,x64 Beacon只能欺骗x64子进程中的参数。真正的参数将被写入到包含伪参数的内存空间中。如果实参数比伪参数长,则命令将启动失败。
上传和下载文件
该download命令将下载请求的文件。不需要在文件名周围提供带空格的引号。Beacon是为低速度和缓慢的数据传输而建立的。在每次连接期间,Beacon将下载其任务要获取的每个文件的固定块。这个数据块的大小取决于Beacon当前的数据通道。HTTP和HTTPS通道以512KB块的形式提取数据。
输入downloads 命令来查看当前Beacon正在进行的文件下载列表。使用cancel命令,后跟文件名,将取消正在进行的文件下载。您可以在cancel命令中使用通配符,一次取消多个文件下载。
进入Cobalt Strike中的View->Downloads,查看您的团队成员迄今为止已下载的文件。只有已完成的下载才会显示在此选项卡中。下载的文件存储在团队服务器上。要将文件传回到系统中,请在此处突出显示它们,然后按“同步文件”。最后,Cobalt Strike会将所选文件下载到系统上您选择的文件夹中。
该upload命令将文件上传到主机中。
上传文件时,有时需要更新其时间戳,使其与同一文件夹中的其他文件混合。使用timestomp命令执行此操作。timestomp命令将一个文件的修改、访问和创建时间与另一个文件匹配。
文件系统命令
使用ls命令列出当前目录中的文件。使用mkdir创建目录。rm将删除文件或文件夹。cp将文件复制到目标文件中。mv移动文件
Windows注册表
使用reg query [x86 | x64] [HIVE \ path \ to \ key]查询注册表中的特定项。此命令将输出该键和任何子键列表中的值。需要x86/x64选项,并强制Beacon使用注册表的WOW64(x86)或本机视图。reg queryv [x86 | x64] [HIVE \ path \ to \ key] [value]将查询注册表项中的特定值。
Keystrokes and Screenshots
Beacon用于记录键盘和截屏的工具,旨在注入到另一个进程中,并将其结果报告给您的Beacon。要启动键盘记录器,请使用keylogger pid将其注入到x86进程中。使用keylogger pid x64注入到x64进程中。explorer.exe是此工具的一个很好的候选者。单独使用keylogger将键盘记录器注入到临时进程中。键盘记录器将监控来自注入进程的键入,并将其报告给Beacon,直到进程终止或您终止键盘记录器。请注意,多个键盘记录程序可能会相互冲突。每个桌面会话仅使用一个键盘记录器。要截取屏幕截图,请使用screenshot pid将屏幕截图工具注入到x86进程中。使用screenshot pid x64注入到x64进程中。同样,explorer.exe也是这个工具的一个很好的候选者。截图命令的这个变换将采用一个屏幕截图并退出。截图本身将把截图工具注入到一个临时进程中。您可以使用screenshot pid architecture time让屏幕截图工具运行几秒钟,并在每次Beacon检入时输出屏幕截图。这是一种观察用户桌面的简便方法。
当Beacon接收到新的屏幕截图或按键时,它将向Beacon控制台发送消息。但是,屏幕截图和键入信息无法通过Beacon控制台获得。进入 View -> Keystrokes,查看所有Beacon会话中记录的键入信息。进入View -> Screenshots,浏览所有Beacon会话的屏幕截图。这两个对话框都会随着新信息的出现而更新。这些对话框使一个操作员可以轻松监控所有Beacon会话的键入和屏幕截图。
管理Post-Exploitation Jobs
Beacon将每个shell,powershell和键盘记录器实例视为一项任务。这些任务在后台运行,并在可用时输出其信息。使用jobs命令查看Beacon中正在运行的任务。使用jobkill取消一项任务。
SOCKS代理
使用SOCKS 8080在端口8080(或您选择的任何其他端口)上设置SOCKS4A代理服务器。这将设置一个SOCKS代理服务器,通过Beacon传输流量。Beacon的睡眠时间增加了你通过它的任何流量的延迟。使用sleep 0可以每秒多次进行Beacon连接。Beacon的HTTP数据通道对pivoting目标的响应最快。如果您想通过DNS传输流量,请使用DNS txtrecord通信模式。您可以使用proxychains隧道通过Beacon来传输其他工具。使用socks stop来禁用SOCKS代理服务器。
Reverse Pivoting
使用rportfwd命令通过Beacon设置 reverse pivot。rportfwd命令将绑定受感染目标上的端口。任何到此端口的连接都将导致您的Cobalt Strike服务器启动到另一个主机和端口的连接,并在这两个连接之间中继流量。Cobalt Strike通过Beacon隧道传输此流量。rportfwd的语法是:rportfwd [bind port] [forward host] [forward port]
使用rportfwd stop [bind port]禁用反向端口转发
权限提升
某些后期利用命令需要系统管理员级别的权限。Beacon提供了几个选项来帮助您提升访问权限。Beacon的许多权限提升选项都接受一个监听器作为参数。这是使用SMB Beacon的理想情况。SMB Beacon使用命名管道发送其输出并通过另一个Beacon获取其任务。SMB Beacon与权限提升攻击相结合,可以避免您计算如何提高进出权限的麻烦。
通过漏洞提升
键入elevate以列出使用Cobalt Strike注册的权限提升漏洞。运行elevate[exploit name][listener]尝试使用特定的漏洞进行提升
要启动权限提升漏洞利用集合,请下载Elevate Kit。Elevate Kit是一个Aggressor脚本,它将几个开源特权提升漏洞集成到Cobalt Strike中。https://github.com/rsmudge/ElevateKit
使用方法:
1.下载此git
git clone https://github.com/rsmudge/ElevateKit.git
2.将elevate.cna加载到Cobalt Strike中。
转到Cobalt Strike - > Scripts,按Load,选择elevate.cna
3.与Beacon交互,选择Interact
4.键入“elevate”以查看可用权限升级攻击列表
5.键入\'elevate <exploit name>\'以执行攻击
使用已知凭据进行提升
使用runas [DOMAIN \ user] [password] [command]]以另一个使用其凭据的用户身份运行命令。runas命令不会返回任何输出。不过,您可以使用非特权中的runa
使用spawnas [DOMAIN \ user] [password] [listener]以另一用户身份使用其凭据生成会话。此命令使用PowerShell在内存中加载负载
获得SYSTEM
使用getsystem模拟SYSTEM帐户的令牌,此级别的访问权限可允许您执行管理员用户无法执行的特权操作.
UAC Bypass
Microsoft在Windows Vista中引入了用户帐户控制(UAC),并在Windows 7中对其进行了改进.UAC在UNIX中与sudo非常相似。用户使用普通权限进行日常操作。当用户需要执行特权操作时 - 系统会询问他们是否想要提升他们的权利。
Cobalt Strike附带两个UAC旁路攻击。如果当前用户不是管理员,则这些攻击将不起作用。要检查当前用户是否在Administrators组中,请使用shell whoami /groups
elevate uac-dll [listener] 将在具有提升权限的进程中生成会话。此攻击使用UAC漏洞将Artifact Kit生成的DLL复制到特权位置。然后它运行一个应用程序,该应用程序(a)在运行时具有完全权限,(b)易受DLL劫持的攻击。这些步骤加载启动Beacon会话的DLL。此攻击适用于Windows 7和未修补的Windows 8及更高版本。如果Always Notify处于最高设置,则此攻击将不起作用。
elevate uac-token-duplication [listener] 将在具有提升权限的进程中生成会话。这种攻击使用一个UAC漏洞,允许非提升进程使用从提升进程中窃取的令牌启动任意进程。此漏洞要求攻击删除分配给提升令牌的多个权限。此攻击适用于Windows 7及更高版本。如果Always Notify处于最高设置,则此攻击要求提升的进程已在当前桌面会话中运行(作为同一用户)。此漏洞使用PowerShell生成会话。
使用runasadmin [command]运行具有提升权限的任意命令。runasadmin命令使用UAC令牌复制攻击。
Elevate Kit包含UAC旁路选项,可以更好地与最新版本的Windows配合使用
Privileges
键入getprivs以启用分配给当前访问令牌的权限。
Mimikatz
Beacon集成了mimikatz。使用mimikatz命令将任何命令传递给mimikatz的命令调度程序。例如,mimikatz standard::coffee会返回coffee信息。Beacon将注入与目标的本机架构匹配mimikatz实例。一些mimikatz命令必须作为SYSTEM权限才能运行。在命令前面加上!符号来强制Mimikatz在运行您的命令之前提升到system权限。例如:mimikatz !lsa::cache将恢复系统缓存的salt密码哈希
有一段时间,您可能需要使用Beacon的当前访问令牌运行mimikatz命令。使用@前缀命令强制mimikatz模拟Beacon的当前访问令牌。例如,mimikatz !lsa::cache将使用Beacon的当前访问令牌在mimikatz中运行dcsync命令。
有时您可能需要使用Beacon的当前访问令牌运行mimikatz命令。在命令前面加上@以强制mimikatz模拟Beacon的当前访问令牌。例如,mimikatz @lsadump::dcsync将使用Beacon的当前访问令牌在mimimikatz中运行dcsync命令。
Credential and Hash获取
要转储哈希值,请进入[beacon] - > Access - > Dump Hashes。您也可以使用Beacon控制台中的hashdump命令。这些命令将生成一个注入LSASS的进程,并为当前系统上的本地用户转储密码哈希值。该logonpasswords命令将使用mimimikatz为登录到当前系统的用户读取明文密码和哈希。logonpasswords命令与[beacon] -> Access -> Run Mimikatz相同
使用dcsync [DOMAIN.FQDN]从域控制器中为所有帐户提取密码哈希值。此技术使用Windows API构建来在域控制器之间同步信息。它需要域管理员信任关系。Beacon使用mimikatz来执行这项技术。如果需要特定的密码哈希,请使用dcsync[domain.fqdn][domain\user]
使用这些命令转储的凭据由Cobalt Strike收集并存储在凭证数据模型中。进入View - > Credentials以获取当前团队服务器上的凭据。
Port Scanner
Beacon有一个内置端口扫描器。使用portscan [targets] [ports] [discovery method]来启动端口扫描器程序。您可以指定以逗号分隔的目标范围列表。端口也是如此。例如,端口扫描172.16.48.0/24 1-1024,8080将在端口1到1024和8080上扫描主机范围172.16.48.0到172.16.48.255。
有三种发现主机存活的选项。arp方法使用ARP请求来发现主机是否处于存活状态。icmp方法发送ICMP echo请求来检查目标是否处于存活状态。none选项告诉portscan工具假定所有主机都处于存活状态。
端口扫描程序将在Beacon check ins之间运行。当它有结果需要输出时,它会将信息发送到Beacon控制台。Cobalt Strike将处理此信息并使用发现的主机更新目标模型。
网络和主机枚举
Beacon的网络模块提供了在Windows Active Directory网络中查询和发现目标的工具。使用net dclist命令查找目标加入的域的域控制器。使用net view命令在目标加入的域中查找目标。这两个命令也填充目标模型。net computers命令通过查询域控制器上的计算机帐户组来查找目标。
Beacon的网络模块包含基于Windows网络枚举API构建的命令,这些命令可直接替代Windows中的许多内置网络命令。这里还有一些特殊的功能。例如,使用net localgroup\\target列出另一个系统上的组。使用net localgroup \\target group name列出另一个系统上组的成员。这些命令在横向移动时非常有用,当您必须找到另一个系统上的本地管理员时。
使用help net获取Beacon网络模块中所有命令列表。使用help net command获取获取每个单独命令的帮助。
信任关系
当用户登录到Windows主机时,将生成访问令牌。此令牌包含有关用户及其权限的信息。访问令牌还保存将用户身份验证到同一Active Directory域上的另一个系统所需的信息。您可以从另一个进程中窃取一个令牌并并将其应用于您的Beacon中。执行此操作时,您可以作为该用户与域中的其他系统进行交互。
使用steal_token [process id]来模拟现有进程中的令牌。如果要查看正在运行的进程,请使用ps。getuid命令将输出您当前的令牌。使用rev2self恢复原始令牌。
如果您知道某个用户的凭据; 使用make_token [DOMAIN \ user] [password]生成传递这些凭据的令牌。此令牌是当前令牌的副本,具有修改后的单一登录信息。它会显示您当前的用户名。这是预期的结果。
使用mimikatz通过Beacon传递哈希值。Beacon命令mimikatz sekurlsa :: pth / user:[user] / domain:[DOMAIN] / ntlm:[hash] / run:“powershell -w hidden将创建一个带有令牌设置的进程来根据您提供的信息来单点登录。使用steal_token从此新进程中获取令牌,您将继承其单点登录的权限。
Kerberos票据
使用kerberos_ticket_use [/path/to/ticket]将kerberos票据注入当前会话中。这将允许Beacon使用此票据中的权限与远程系统进行交互。尝试使用mimikatz 2.0生成的Golden Ticke
使用kerberos_ticket_purge清除与您的会话关联的任何kerberos票据
横向移动
一旦您拥有域管理员或是目标上本地管理员的域用户的令牌,您就可以滥用此信任关系来控制目标。Cobalt Strike的Beacon有几种内置横向移动选项。
使用Beacon的psexec [target] [share] [listener]在远程主机上执行有效负载。此命令将为您的侦听器生成Windows服务可执行文件,将其复制到您指定的共享,创建服务,启动服务以及自行清除。默认共享包括ADMIN $和C $。
使用psexec_psh [target] [listener]使用PowerShell在远程主机上执行有效负载。此命令将创建一个服务来运行PowerShell单行程序,启动它并自行清除。如果您不想接触磁盘,这种横向移动方法很有用。
Beacon的winrm [target] [listener]命令将使用WinRM在远程主机上执行有效负载。此选项要求在目标系统上启用WinRM。它默认是关闭的。此选项使用PowerShell在目标上加载有效负载。
最后,使用wmi [target] [listener]通过Windows Management Instrumentation传递有效负载。此命令使用PowerShell在目标上加载有效负载。
其他命令
Beacon还有一些其他命令未介绍
该clear命令将清除Beacon的任务列表。如果你输入了错误命令,可以用该命令清除。
输入exit以退出Beacon控制台。
使用kill [pid]来终止进程
使用timestomp将一个文件的Modified,Accessed和Created时间与另一个文件的时间相匹配
DNS Beacon
混合HTTP和DNS Beacon
混合HTTP和DNS Beacon有效载荷是最受欢迎的Cobalt Strike功能。这个有效负载使用DNS请求向您发送信号。这些DNS请求是针对您的Cobalt Strike团队服务器授权的域的查找。DNS响应告诉Beacon进入睡眠状态或连接到您下载任务。DNS响应还将告诉Beacon如何从您的团队服务器下载任务。
DNS
Beacon流程图
最初,此有效负载将通过HTTP GET连接下载其所有任务。DNS Beacon的目的是最小化有效负载直接连接到您的被受控端。随着时间的推移,很明显在某些情况下,也可以通过DNS下载任务。
数据通道
今天,混合HTTP和DNS Beacon可以通过HTTP,DNS A记录,DNS AAAA记录或DNS TXT记录下载任务。更好的是,这种有效负载在目标上时能够灵活地在这些数据通道之间切换。使用Beacon的mode命令更改当前Beacon的数据通道。mode http是HTTP数据通道。mode dns是DNS A记录数据通道。 mode dns6是DNS AAAA记录通道。并且,模式dns-txt是DNS TXT记录数据信道。
HTTP数据通道使用HTTP POST请求将信息发送回您。DNS数据通道将为您的团队服务器准备的数据嵌入到一个长主机名中。此主机名的最大长度由malleable c2 maxdns选项设置。DNS TXT通道将使用该值的100%。DNS AAAA通道将使用该值的50%。DNS A通道将使用该值的25%。
请注意,只有任务可用时,DNS信标才会验入。使用checkin命令在下次调用home时请求DNS Beacon检查。
Listener设置
Windows/Beacon_DNS/Reverse_HTTP有效载荷阶段通过HTTP连接。当您创建这个监听器时,请注意,您正在配置的主机和端口的cobalt strike,它将用于通过HTTP转移这个载荷。当您选择设置此有效负载时,Cobalt Strike要知道在端口53上安装的DNS服务器信息。
windows/beacon-dns/reverse-dns-txt有效载荷使用dns-txt记录下载和准备混合http和dns-beacon。创建此侦听器时,请注意您正在配置此负载将用于HTTP通信的端口。同样,Cobalt Strike要知道在端口53上安装的DNS服务器。
如果使用HTTP stager设置Hybrid HTTP和DNS Beacon有效负载,请注意您仍然可以请求DNS TXT记录。许多Cobalt Strike功能将允许您指定 listener name (DNS)以强制使用DNS TXT记录stager。
DNS Beacon域
创建监听器并点击Save后,Cobalt Strike将要求您提供要登录的域列表。您的Cobalt Strike团队服务器系统必须对您指定的域具有权威性。创建DNS A记录并将其指向您的Cobalt Strike团队服务器。使用DNS NS记录将多个域或子域委派给Cobalt Strike团队服务器的A记录。
监听器配置
要测试DNS配置,请打开终端并键入nslookup
jibberish.beacon.domain
。如果您获得0.0.0.0的A记录应答 - 那么您的DNS设置正确。如果您没有收到应答,那么您的DNS配置不正确,混合HTTP和DNS
Beacon将无法与您通信。
确保您的DNS记录引用网络接口上的主要地址。Cobalt Strike的DNS服务器将始终从您的网络接口的主地址发送响应。DNS解析器在从一台服务器请求信息时会丢弃回复,但会收到另一台服务器的回复。
如果您位于NAT设备后面,请确保使用公共IP地址作为NS记录,并将防火墙设置为允许端口53上的UDP流量转发到此系统上。Cobalt Strike包括一个控制Beacon的DNS服务器。
DNS Beacon Setup and Use
HTTP和HTTPS Beacon
windows/beacon-http/reverse-http是Cobalt Strike的http beacon。此beacon将检查任务并使用HTTP GET请求来下载它们。这个信标用HTTP POST请求发送数据。一旦您创建了监听器并点击Save,Cobalt Strike将要求您提供一个域列表,以提供给beacon指向。创建指向您的团队服务器的IP地址或其重定向的DNS A记录。如果你没有控制的域名服务器,则在此框中输入您的团队服务器的IP地址。
HTTP
Beacon
windows / beacon_https / reverse_https是Cobalt Strike的HTTPS Beacon。Beacon的这种方式将SSL加密其通信。您可以使用HTTPS Beacon 的有效SSL证书。
手动代理设置
HTTP和HTTPS Beacon使用与Internet Explorer相同的代理设置。如果用户运行的Beacon是从context,HTTP和HTTPS通信,并将自动向代理服务器验证自身请求。有时,这些默认值是不可取的。
可以使用备用代理配置导出不稳定 Beacon artifac。进入到 Attacks -> Packages -> Windows Executable (S)。点击代理字段旁边的the … 按钮。这将打开一个对话框来更改 Beacon artifac的代理设置。
手动代理设置
(手动)代理设置对话框提供了几个选项来更改Beacon发送HTTP和HTTPS请求的方式。proxy type字段配置代理类型。proxy host 和proxy port字段告诉Beacon代理所在的位置。username和password字段是可选的。这些字段指定Beacon用于向代理进行身份验证的凭据。
选中 the Ignore proxy settings; use direct connection 框强制Beacon尝试其HTTP和HTTPS请求而无需通过代理。
点击 Set按钮弹出以使用所需的代理设置更新 Beacon 对话框。点击Reset按钮将代理配置设置回默认值。
没有使用Beacon侦听器来本身指定手动代理设置的选项。这是因为beacon http和https stager不支持这些选项。
如何创建 HTTP Beacon Listener
SMB Beacon
windows/beacon_smb/bind_pipe 是Cobalt Strike的SMB Beacon,SMB Beacon使用命名管道通过父级Beacon进行通信。这种点对点通信在同一主机上与Beacons一起工作,它也适用于整个网络,Windows在SMB协议中封装命名管道通信。因此,名称为SMB Beacon
对于Beacon的大多数功能,您可以将SMB Beacon用作目标侦听器。影响本地主机的功能将通过设置的TCP进行连接转移,以避免基于本地主机的防火墙的IRE拦截。Beacon的横向移动功能将SMB Beacon放置到命名管道上。
您还可以导出stagless SMB Beacon可执行文件或DLL。进入到Attacks - > Packages - > Windows Executable(S)并选择SMB Beacon监听器。
启动SMB Beacon的操作将自动链接到它。如果您运行一个不稳定性的SMB Beacon有效负载,则必须链接到该有效负载以以控制它。
SMB Beacon的localhost-only TCP stager将绑定到New Listener对话框中指定的端口上。SMB Beacon的名为pipe stager的远程主机将绑定到Malleable C2配置文件中的pipename_stager选项。
SMB Beacon有效负载将绑定到Malleable C2配置文件中的pipename选项。
链接和取消链接
从Beacon控制台,使用Link[IP Address]将当前Beacon链接到正在等待连接的SMB Beacon。当前Beacon检入时,其链接的对等端也将签入。
为了融入正常流量,链接的Beacon使用Windows命名管道进行通信。此流量封装在SMB协议中。这种方法有一些注意事项:
1.具有SMB Beacon的主机必须接受端口445的连接
2.您只能链接由同一Cobalt Strike实例管理的Beacon。
如果在尝试链接到Beacon后收到错误5(拒绝访问):窃取域用户的令牌或使用shell net use \\host\IPC$ /U:DOMAIN\user password 与主机建立会话。此管理员用户不是必需的。任何有效的域用户都可以。完成会话后,尝试再次链接到Beacon。
要销毁Beacon链接,请在父级或子级中使用unlink [ip address]。稍后,您可以再次链接到未链接的Beacon中(或从另一个Beacon链接到它)
Pivot拓扑图
pivo拓扑图以自然的方式显示您的SMB Beaco链接。进入到Cobalt Strike - > Visualization - > Pivot Graph以启用显示此拓扑图。
Pivot拓扑图
每个Beacon会话都有一个图标。与会话表一样:每个主机的图标表示其操作系统。如果图标为红色并带有闪电图状,则Beacon将在具有管理员权限的进程中运行。较暗的图标表示要求Beacon会话退出,并且它需要确认此命令。
防火墙图标表示Beacon的最后一个出口点(例如,代理、防火墙或重定向器)。Beacon将使用一条绿色虚线表示它使用HTTP、HTTPS或DNS端口网络。
将一个Beacon会话连接到另一个Beacon会话的橙色箭头表示两个信标之间的链接。Cobalt Strike的Beacon使用Windows命名管道以这种点对点的方式控制Beacons。命名管道是Windows上的进程间通信机制。主机到主机的命名管道流量封装在SMB协议中。红色箭头表示Beacon链接已断开。
单击Beacon来选择它。您可以通过在所需主机上单击并拖动一个框来选择多个信标。按ctrl和shift键以选择或取消选择单个Beacon。
右键单击Beacon,弹出一个菜单,其中包含可用的后期利用选项。
右键单击没有选定Beacon的pivo拓扑图以配置此图的拓扑图。
SMB Beacon设置和使用
TCP Beacon
windows/beacon-tcp/bind-tcp是Cobalt Strike的tcp Beacon。TCP Beacon使用TCP套接字通过父Beacon进行通信。这种点对点通信与同一主机和网络上的Beacon一起工作。
对于beacon的大多数特性,您可以使用tcp beacon作为目标侦听器。
您还可以导出一个不稳定的stageless TCP Beacon executable or DLL,进入到attacks->packages->windows executable(s)并选择您的TCP Beacon侦听器。
执行 Beacon的操作将自动连接到它。如果您运行的是不稳定的TCP Beacon负载,则必须连接到该负载以控制它。
TCP Beacon stager将绑定到New Listener对话框中指定的端口。TCP Beacon有效负载将绑定到单独的端口,在Malleable C2配置文件中指定为tcp_port选项。
连接和取消链接
在Beacon控制台中,使用connect [ip address]将当前会话连接到等待连接的TCP Beacon。当前会话签入时,其链接的对等方也将签入。
从Beacon控制台,使用Connect[IP address]将当前会话连接到正在等待连接的TCP Beacon。当前会话签入时,其链接的对等方也将签入。
要取消Beacon链接,请在父级或子级中使用unlink [ip address]。稍后,您可以从同一主机(或不同的主机)重新连接到TCP Beacon。
TCP Beacon的使用
Browser Pivoting
Browser Pivot 是一种用于劫持受感染用户的经过身份验证的Web会话的浏览器攻击。Cobalt Strike使用注入32位和64位Internet Explorer的代理服务器实现Browser Pivot 。浏览此代理服务器时,您将保存cookie信息,验证HTTP会话身份和客户端SSL证书。Browser Pivot 是一种通过有针对性的攻击来展示风险的方法。
要设置Browser Pivot ,请进入到[beacon] - > Explore - > Browser Pivot。选择要注入的Internet Explorer进程。您还可以决定将Browser Pivot 代理服务器绑定到哪个端口上。
你注入的过程非常重要。注入Internet Explorer以继承用户经过身份验证的Web会话。最新版本的Internet Explorer为每个选项卡生成一个进程。如果您的目标使用最新版Internet Explore,则必须将其注入子选项卡以继承会话状态。
通常,子选项卡共享所有会话状态。有一个例外。InternetExplorer11似乎打破了它共享客户端SSL状态的方式。这是不可预测的。如果您注入到与客户机SSL会话关联的选项卡进程中,那么它将运行。
通过查看Browser Pivo设置对话框中的PPID值来标识Internet Explorer子选项卡进程。当ppid引用explorer.exe时,该进程不是子选项卡。当PPID引用iexplore.exe时,该进程是子选项卡。
设置Browser Pivo后,将Web浏览器设置为使用Browser Pivot Proxy服务器。Browser Pivot Proxy服务器是HTTP代理服务器。
使用
启动Browser Pivo后,您可以将目标用户作为目标用户浏览。请注意,Browser Pivo代理服务器将为您访问的启用SSL的网站提供其SSL证书。这是运行的必要条件。
Browser Pivo代理服务器会在检测到SSL错误时要求您将主机添加到浏览器的信任存储区。将这些主机添加到信任库中, 按刷新以使SSL保护的站点正确加载。
要停止Browser Pivot代理服务器,请在其Beacon控制台中键入browserpivot stop
关闭“Browser Pivot tab”选项卡以停止browser pivoting代理服务器。
如果用户关闭您正在使用的选项卡,则需要重新注入browser pivoting代理服务器。Browser Pivot tab选项卡将在无法连接到浏览器中的browser pivoting代理服务器时发出警告。
怎样运行
Internet Explorer将其所有通信委托给名为WinINet的库。任何程序都可以使用此库,为其使用者管理cookie,SSL会话和服务器身份验证。Cobalt Strike的browser pivoting功能利用了WinINet透明地管理每个进程的身份验证和重新认证这一特定。通过将Cobalt Strike的Browser Pivoting技术注入用户的Internet Explorer进程中,可以免费获得这种透明的重新认证。
Internet Explorer将其所有通信委托给一个名为wininet的库。这个库,任何程序都可以使用它,为其用户管理cookie、ssl会话和服务器身份验证。Cobalt Strike的browser pivoting利用了这一个功能,即Wininet在每个进程的基础上透明地管理身份验证和重新验证。通过将Cobalt Strike的Browser Pivoting技术注入用户的Internet Explorer进程中,可以免费获得这种透明的重新认证。
Browser Pivoting
在KALI主机中访问
凭据管理器
管理凭据
进入到View - > Credentials,并与Cobalt Strike的凭证模型进行交互。按添加以向凭证模型添加条目。
您可以按住shift并点击保存按钮 以使其对话框保持打开状态,以便更轻松地向模块添加新凭据。选择复制将突出显示的记录复制到剪贴板。使用导出以pwdump格式导出凭证。
管理凭据使用
数据模型
概述
Cobalt Strike 3.0的团队服务器是Cobalt Strike在参与期间收集的信息的的助理。Cobalt Strike解析其Beacon有效负载的输出,以提取目标,服务和凭据的信息作为报告输出。
如果您想导出Cobalt Strike的数据,您可以通过 Reporting -> Export Data来实现。Cobalt Strike提供了将数据导出为TSV和XML格式文件的选项。Cobalt Strike客户端的导出数据功能将合并您当前连接的所有团队服务器的数据。
Targets
您可以通过View - > Targets与Cobalt Strike的目标信息进行交互。此选项卡显示与目标可视化相同的信息。选择添加按钮将新目标添加到Cobalt Strike的数据模型中。
Services
在目标显示中,右键单击主机,然后选择tServices。这将打开Cobalt Strike的服务浏览器。在这里,您可以浏览服务,为不同的服务分配注释,以及删除服务记录。
Credentials
进入到View - > Credentials,并与Cobalt Strike的凭证模型进行交互。按添加以向凭证模型添加条目。您可以按住shift并点击保存按钮 以使其对话框保持打开状态,以便更轻松地向模块添加新凭据。选择复制将突出显示的记录复制到剪贴板。
Maintenance
Cobalt Strike收集的所有数据都存储在 您从团队服务器启动的同一位置的数据/子文件中。
如果您想清除Cobalt Strike的数据模型,请停止团队服务器,并删除数据/文件夹及其内容。Cobalt Strike将在您下次启动团队服务器时重新创建数据/文件夹
如果您要存档数据模型,请停止团队服务器,并使用您最喜欢的程序将数据/文件夹及其文件存储到其他位置。要还原数据模型,请停止团队服务器,并将旧内容还原到数据/文件夹。Cobalt Strike的数据模型将其所有状态和状态元数据保存在数据/文件夹中。
Reporting -> Reset Data重置Cobalt Strike的数据模型,无需重新启动团队服务器。
管理下载文件
进入Cobalt Strike中的View->Downloads,查看您的团队迄今为止下载的文件。只有已完成的下载才会显示在此选项卡中。下载的文件存储在团队服务器上。要将文件穿回系统,请在此处突出显示它们,选择 Sync File按钮”。然后,Cobalt Strike会将所选文件下载到系统上您选择的文件夹中。
Cobalt Strike中管理文件下载
导出数据
进入到Reporting -> Export Data,以从Cobalt Strike中导出数据,Cobalt Strike客户端将汇总您连接到的每个团队服务器的数据,并使用Cobalt Strike的数据模型中的数据导出TSV和XML格式的文件。
ExternalC2(第三方命令和控制台)
Cobalt Strike的外部命令和控制(External C2)接口允许第三方程序充当Cobalt Strike与其Beacon有效载荷之间的通信层。
自Cobalt Strike 3.6以来,已存在此功能和标准的测试版。该标准还未被认为是最终的,也未得到支持。此功能仍在开发和考虑中。
如果您现在想尝试一下,请参阅External C2标准规范,如下连接。
一些“商业”问题
如果您想将规范中的示例(附录B)修改为第三方C2,您可以为规范中包含代码的3-clause BSD license f
如果您想参考外部C2规范,请转到此页面。随着文档和资源的丰富,此页面将进行更新。
第三方参考
以下是引用,使用或构建外部C2的第三方项目和帖子列表:
·external_c2_framework由乔纳森·埃查瓦里亚编写。用于构建外部C2客户端和服务器的Python框架。
·ExternalC2 Library由瑞恩·汉森编写。带有Web APi,WebSockets和直接套字节的.net库。包括测试和评论。
·Tasking Office 365 for Cobalt Strike C2 由MWR Lab编写 。用于Cobalt Strike的Office 365 C2的讨论和演示。
·Shared File C2 by Outflank BV. POC to use a file/share for command and control.
File Browser
Beacon的文件浏览器是一个在受控主机上查看文件。
进入到[Beacon] - > Explore - > File Browser打开它。
文件浏览器
右键单击要下载或删除的文件。
要上传文件夹,请按左上角文件路径旁边的文件夹按钮。要查看哪些驱动器可用,请点击 List Drives.按钮
请注意,文件浏览器中的每个操作都会创建Beacon执行的任务。文件浏览器无法使用您请求的信息刷新其内容,直到Beacon检入下一个。如果您的Beacon处于高睡眠间隔,则使用文件浏览器将不会令人愉快。建议您使用具有低信标睡眠时间(例如,少于10秒)的文件浏览器。
请注意,文件浏览器中的每个操作都会创建Beacon执行的任务。在下一个Beacon验入之前,文件浏览器无法使用您请求的信息刷新其内容。如果您的Beacon处于高睡眠间隔,您使用文件浏览器将很慢,建议您使用具有低Beaco睡眠时间(例如,少于10秒)的文件浏览器。
Golden Ticket
Golden Ticket是一张自行生成的Kerberos票据。最常见的是使用域管理员权限伪造Golden Ticket
Golden Ticket需要四条信息:
1.要伪造票据的用户
2.要为其伪造票据的域名
3.域的SID
4.域控制器上krbtgt用户的NTLM哈希值
进入到[beacon] - > Access - > Golden Ticket,从Cobalt Strike生成一张Golden Ticket,并设置以上四条信息,Cobalt Strike将使用mimikatz生成一张票据并将其注入到你的kerberos磁盘中。
Golden Ticket Tutoria
Host File
Cobalt Strike的Web服务器可以为您托管社会工程学工具包,进入到 Attacks -> Web Drive-by -> Host File进行设置。选择要加载的文件,选择任意URL,然后选择文件的mime类型。
选中Enable SSL to serve this content over SSL,在Malleable C2配置文件中指定有效的SSL证书时,此选项可用。
HTML Application 攻击
HTML应用程序是用HTML编写的Windows程序和Internet Explorer支持的脚本语言。该包生成一个运行Cobalt Strike监听器的HTML应用程序。此攻击使您可以选择使用可执行文件或PowerShell来运行有效负载。进入到 Attacks -> Packages -> HTML Application.
此攻击有几种方法可以运行选定的侦听器。该可执行方法写一个可执行文件到硬盘并运行它。在PowerShell的方法将使用PowerShell的一班轮运行负载驿站。该VBA方法使用微软Office宏注入您的有效载荷送入内存。VBA方法需要目标系统上的Microsoft Office。
这种攻击有几种方法来运行选定的监听器。可执行方法会将可执行文件写入到磁盘中并运行它。PowerShell方法将使用PowerShell一行程序来运行负载stager。vba方法使用Microsoft Office宏将有效负载注入到内存中,VBA方法需要目标系统上安装Microsoft Office。
HTML Application Attack on Windows 10
Java Signed Applet 攻击
此工具可通过攻击->web drive by->signed applet攻击获得。这个攻击启动了一个Cobalt Strike Web服务器,它承加载了一个自签名的Java小程序。要求访问者授予applet运行权限。当访问者授予此权限时,您就可以访问他们的系统。
设置URI路径和端口以配置Web服务器。
选择 Launch按钮开始攻击
选择Enable SSL以通过SSL提供此内容。在Malleable C2配置文件中指定有效的SSL证书时,此选项可用。
选 Enable SSL to serve this content over SSL,在Malleable C2配置文件中指定有效的SSL证书时,此选项可用。
Signing Cobalt Strike\'s Applet 攻击
在没有有效的代码签名证书的情况下,Cobalt Strike的Java签名小应用程序攻击是 无效 。本教程展示了如何用自己的代码签名证书来签署Cobalt Strike的Java签名小程序攻击。
Java Applet Attack Code Signing Tutorial
Java Applet攻击代码签名:
Java Smart Applet攻击
Cobalt Strike的Smart Applet Attack结合了多个漏洞,可以将Java安全沙箱禁用到一个软件包中。
此工具可通过Attacks - > Web Drive-by - > Smart Applet Attack获得。此攻击启动了托管Java applet的Cobalt Strike Web服务器。最初,此applet在Java的安全沙箱中运行,并且不需要用户确认即可启动。
设置URI路径和Port 以配置Web服务器。
选中URI Path 通过SSL提供此内容(Enable SSL to serve this content over SSL)。在Malleable C2配置文件中指定有效的SSL证书时,此选项可用。
smart applet分析其环境并决定使用哪种Java漏洞。如果Java版本容易受到攻击,则applet将禁用安全沙箱,并使用Cobalt Strike的Java注入器生成会话。
这次攻击中的这些攻击对Java 1.7u21及更早版本起作用。Java 1.6u45及更低版本也容易受到这种攻击。
选择Launch以启动攻击
注意:此攻击的实现已过时,在现有的最新环境中无效
横向移动
Cobalt Strike提供了一个图形用户界面,使横向移动更加容易。切换到目标可视化或进入到View -> Targets.进入到 [target] -> Login 并选择所需的横向移动选项。
将打开以下对话框:
要配置此会话框:
首先,决定你想用哪种信任机制进行横向移动。如果要在Beacons中使用令牌,请选中使用会话的当前访问令牌框。如果你想使用凭证或哈希来横向移动, 那也没关系。从凭据存储中选择凭据或填充“user”,“password”和“domain”字段。Beacon将使用此信息为您生成访问令牌。请记住,您需要从高完整性上[管理员]进行操作才能使其正常工作。
接下来,选择用于横向移动的listener。SMB Beacon通常是一个很好的候选者。
最后,选择要执行横向移动攻击的会话。Cobalt Strike的异步攻击模型要求每次攻击都要从受感染的系统执行。如果没有Beacon会话进行攻击,则无法执行此攻击。如果您正在进行内部参与,请考虑挂钩您控制的Windows系统,并将其作为攻击其他系统凭据或哈希值的起点。
最后,选择要执行横向移动攻击的会话。Cobalt Strike的异步攻击模型要求每个攻击都从一个受损的系统执行。如果没有可以攻击的Beacon会话,则无法执行此攻击。如果您正在进行内部渗透,请考虑挂接您控制的Windows系统,并将其用作使用凭证或哈希攻击其他系统的起点。
选择lauch按钮,Cobalt Strike将激活所选Beacon的选项卡并向其发出命令。来自攻击的反馈将显示在Beacon控制台中。
Cobalt Strike横向移动
Pivot Listeners
限制从目标网络到命令和控制基础架构的直连接数量是一个很好的工具。pivot listener允许您创建绑定到Beacon或SSH会话的侦听器。通过这种方式,您可以创建新的反向会话,而无需与命令和控制基础架构建立更直接的连接
要设置pivot listener,请进入到 [beacon] -> Pivoting -> Listener。这将打开一个对话框,您可以在其中定义新的pivot listener。
pivot listener将绑定到指定Session上的侦听端口。Listen Host值配置反向TCP有效负载用于连接此侦听器的地址。
现在,唯一的有效载荷选项是windows/beacon-reverse-tcp。这是一个没有stager的listener。这个有效载荷嵌入到命令和自动化中,而这些命令和自动化是需要stagers的。您可以选择导出一个不稳定的有效stageless payload artifact 并运行它来传递一个反向的TCP有效负载。
Pivot Listeners不会更改pivot主机的防火墙配置。如果pivot 主机具有基于主机的防火墙功能,则有可能会干扰您的侦听器。它,即运营商,负责预测这种情况发生并采取正确的防御措施。
要删除Pivot Listeners,请教纳入到Cobalt Strike - > Listeners,并在那里删除侦听器。如果会话仍然可以访问,Cobalt Strike将发送一个任务来清除侦听套字节。
Cobalt Strike反向TCP Pivot Listeners
Malleable Command and Control
概述
Beacon的HTTP指标由Malleable C2配置文件控制。Malleable C2配置文件是一个简单的程序,它指定如何转换数据并将其存储在事务中。转换和存储数据的相同配置文件也可以从事务中提取和恢复数据。
要使用自定义配置文件,您必须启动Cobalt Strike团队服务器并在此时指定您的配置文件。
./teamserver [external IP] [password] [/path/to/my.profile]
每个Cobalt Strike实例只能加载一个配置文件。如果您在参与过程中需要多个配置文件,请启动多个团队服务器 个【服务器都有自己的配置文件】并从一个Cobalt Strike客户端连接到它们。
检查错误
Cobalt Strike的Linux软件包包括一个c2lint程序。该程序将检查通信配置文件的语法,应用一些额外的检查,甚至使用随机数据对您的配置文件进行单元测试。强烈建议您在将配置文件加载到Cobalt Strike之前使用此工具检查配置文件。
./c2lint [/path/to/my.profile]
Profile Language
创建配置文件的最佳方法是修改现有配置文件。看看Github 上的例子。
当您打开配置文件时,您将看到以下内容:
# this is a comment
set global_option "value";
protocol-transaction {
set local_option "value";
client {
# customize client indicators
}
server {
# customize server indicators
}
}
注释以#开头,直到结束。set语句是一种为选项赋值的方法。配置文件使用{}将语句和信息组合在一起。语句总是以分号结尾
为了让所有这些都看起来来通俗易懂,这里有一部分前提说明:
http-get {
set uri "/foobar";
client {
metadata {
base64;
prepend "user=";
header "Cookie";
}
}
此部分配置文件定义HTTP GET事务的指标。第一个语句set uri指定客户端和服务器在此事务期间将引用的URI。此set语句发生在客户端和服务器代码块之外,因为它适用于这两个代码块。
客户端块为执行HTTP GET的客户端定义指标。在这种情况下,客户是Cobalt Strike的Beacon。
当Cobalt Strike的Beacon“phones home”时,它会将自己的元数据发送给Cobalt Strike。在此配置文件中,我们必须定义如何使用HTTP GET请求对元数据进行编码和发送。
后跟一组语句的metadata关键字指定如何将元数据转换并嵌入到我们的HTTP GET请求中。元数据关键字后面的语句组称为数据转换。
Step |
Action |
Data |
|
0. |
Start |
metadata |
|
1. |
base64 |
Base64 Encode |
bWV0YWRhdGE= |
2. |
prepend "user=" |
Prepend String |
user=bWV0YWRhdGE= |
3. |
header "Cookie" |
Store in Transaction |
数据转换中的第一条语句声明我们将base64编码元数据[1]。第二条语句是prepend,它获取我们编码的元数据,并将字符串user=预先发送给它[2]。现在我们转换的元数据是"user=" . base64(元数据)。第三条语句指出,我们将把转换后的元数据存储到一个名为cookie[3]的客户端HTTP头中。
Beacon及其服务器都使用配置文件。在这里,我们从Beacon客户端的角度读取了该配置文件。Beacon服务器将采用相同的信息并并在后端处理。假设我们的Cobalt Strike Web服务器收到uri/foobar的GET请求后。那么,它想要从事务中提取元数据。
Step |
Action |
Data |
|
0. |
Start |
||
1. |
header "Cookie" |
Recover from Transaction |
user=bWV0YWRhdGE= |
2. |
prepend "user=" |
Remove first 5 characters |
bWV0YWRhdGE= |
3. |
base64 |
Base64 Decode |
metadata |
header语句将告诉我们的服务器从[1]恢复转换后的元数据的位置。HTTP服务器负责为我们解析来自HTTP客户端的标头。接下来,我们需要处理prepend语句。为了恢复转换后的数据,我们将prepend解释为删除前X个字符[2],其中X是我们前缀的原始字符串的长度。现在,剩下的就是解释最后一个语句base64。我们之前使用base64编码函数来转换元数据。现在,我们使用base64解码来恢复元数据[3]。
header语句将告诉服务器从何处恢复转换后的元数据[1]。HTTP服务器负责为我们解析来自HTTP客户端的head。接下来,我们需要处理预处理语句。为了恢复转换的数据,我们将prepend解释为删除前x个字符[2],其中x是我们预先准备的原始字符串的长度。现在,只剩下解释最后一条语句base64了。我们以前使用base64编码函数来转换元数据。现在,我们使用base64解码来恢复元数据[3]。
一旦配置文件解释器完成执行每个反向语句后,我们将获得原始元数据
Data Transform Language
数据转换是一系列转换和传输数据的语句。数据转换语句是:
Statement |
Action |
Inverse |
append "string" |
Append "string" |
Remove last LEN("string") characters |
base64 |
Base64 Encode |
Base64 Decode |
base64url |
URL-safe Base64 Encode |
URL-safe Base64 Decode |
mask |
XOR mask w/ random key |
XOR mask w/ same random key |
netbios |
NetBIOS Encode \'a\' |
NetBIOS Decode \'a\' |
netbiosu |
NetBIOS Encode \'A\' |
NetBIOS Decode \'A\' |
prepend "string" |
Prepend "string" |
Remove first LEN("string") characters |
数据转换是这些语句中任意数量的任意顺序的组合。例如,您可以选择对要传输的数据进行NetBIOS编码,预先添加一些信息,然后对整个包进行base64编码。
数据转换总是以终止语句结束。在转换中只能使用一个终止语句。此语句告诉Beacon及其服务器在事务中的何处存储转换的数据。
有四个终止语句声明:
Statement |
What |
header "header" |
Store data in an HTTP header |
parameter "key" |
Store data in a URI parameter |
|
Send data as transaction body |
uri-append |
Append to URI |
头终止语句将转换后的数据存储在HTTP头中。参数终止语句将转换后的数据存储在HTTP参数中。此参数始终作为URI的一部分发送。print语句在事务正文中发送转换后的数据。
print语句是http-get.server.output,http-post.server.output和http-stager.server.output块的预期终止语句。您可以对其他块使用header,parameter,print和uri-append termination语句。
如果在http-post.client.output上使用header、参数或uri append termination语句,beacon会将其响应分块到一个合理的长度,以适应事务的一部分
这些块及其发送的数据将在后面的部分中介绍。
Strings
Beacon的Profile Language允许您在多个地方使用“strings”。通常,字符串被解释为-is。但是,您可以在字符串中使用一些特殊值:
Value |
Special Value |
"\n" |
Newline character |
"\r" |
Carriage Return |
"\t" |
Tab character |
"\u####" |
A unicode character |
"\x##" |
A byte (e.g., \x41 = \'A\') |
"\\" |
\ |
Headers and Parameters
数据转换是指标定制过程的重要组成部分。它们允许您对Beacon在每个事务中必须发送或接收的数据进行修改。也可以为每个事务添加额外的指示符。
在HTTP GET或POST请求中,这些无关的指示符以标题或参数的形式出现。使用客户端块中的参数语句将任意参数添加到HTTP GET或POST事务。
此代码将强制Beacon在发出请求时将 ?bar=blah添加到 /foobar URI中。
http-get {
client {
parameter "bar" "blah";
使用客户端或服务器块中的头语句将任意HTTP头添加到客户端的请求或服务器的响应中。此标头语句添加了一个指标。
http-get {
server {
header "X-Not-Malware" "I promise!";
配置文件解释器将按顺序解释头语句和参数语句。也就是说,Wininet库(客户机)和Cobalt Strike Web服务器对这些指标在事务中出现的位置有最终决定权。
选项
您可以通过配置文件配置Beacon的默认值。有两种类型的选项:全局和本地选项。全局选项会更改全局Beacon设置。本地选项是特定于事务的,您必须在正确的上下文中设置本地选项。
使用set语句设置选项。
set "sleeptime" "1000";
以下是可用选项:
Option |
Context |
Default Value |
Changes |
amsi_disable |
false |
(Attempt to) disable AMSI for execute-assembly, powerpick, and psinject |
|
dns_idle |
0.0.0.0 |
IP address used to indicate no tasks are available to DNS Beacon; Mask for other DNS C2 values |
|
dns_max_txt |
252 |
Maximum length of DNS TXT responses for tasks |
|
dns_sleep |
0 |
Force a sleep prior to each individual DNS request. (in milliseconds) |
|
dns_stager_prepend |
Prepend text to payload stage delivered to DNS TXT record stager |
||
dns_stager_subhost |
.stage.123456. |
Subdomain used by DNS TXT record stager. |
|
dns_ttl |
1 |
TTL for DNS replies |
|
host_stage |
true |
Host payload for staging over HTTP, HTTPS, or DNS. Required by stagers. |
|
jitter |
0 |
Default jitter factor (0-99%) |
|
maxdns |
255 |
Maximum length of hostname when uploading data over DNS (0-255) |
|
pipename |
msagent_## |
Name of pipe to use for SMB Beacon\'s peer-to-peer communication. ## is replaced with a number unique to your team server. |
|
pipename_stager |
status_## |
Name of pipe to use for SMB Beacon\'s named pipe stager. ## is replaced with a number. |
|
sample_name |
My Profile |
The name of this profile (used in the Indicators of Compromise report) |
|
sleeptime |
60000 |
Default sleep time (in milliseconds) |
|
spawnto_x86 |
%windir%\syswow64\rundll32.exe |
Default x86 program to open and inject shellcode into |
|
spawnto_x64 |
%windir%\sysnative\rundll32.exe |
Default x64 program to open and inject shellcode into |
|
tcp_port |
4444 |
TCP Beacon listen port |
|
uri |
http-get, |
[required option] |
Transaction URI |
uri_x86 |
http-stager |
x86 payload stage URI |
|
uri_x64 |
http-stager |
x64 payload stage URI |
|
useragent |
Internet Explorer (Random) |
Default User-Agent for HTTP comms. |
|
verb |
http-get, |
GET, |
HTTP Verb to use for transaction |
使用uri选项,可以将多个uri指定为一个空格分隔的字符串。Cobalt Strike的Web服务器将绑定所有这些URI,并在构建Beacon阶段时将其中一个URI分配给每个Beacon主机。
即使存在useragent选项; 您可以使用header语句来覆盖此选项。
Beacon HTTP Transaction
为了将所有这些放在一起,有助于了解Beacon事务的外观以及每个请求发送的数据。
当Beacon向Cobalt Strike的Web服务器发出HTTP GET请求时,事务就会开始。此时,Beacon必须发送 包含有关受控系统信息的元数据。
提示:会话元数据是加密的数据blob。没有编码,它不适合在头或URI参数中传输。始终应用base64,base64url或netbios语句对元数据进行编码。
Cobalt Strike的Web服务器使用Beacon执行的任务来应答此HTTP GET。这些任务最初是作为一个加密的二进制blob发送的。您可以在HTTP GET的服务器上使用output关键字转换此信息。
当Beacon执行其任务时,它会累积输出。完成所有任务后,Beacon会检查是否有要发送的输出。如果没有输出,Beacon会进入睡眠状态。如果有输出,Beacon会发起HTTP POST请求。
HTTP POST请求必须包含URI参数或标头中的会话ID。Cobalt Strike使用此信息将输出与正确的会话相关联。发布的内容最初是加密的二进制blob。您可以使用http-post的客户端上的output关键字转换此信息。
Cobalt Strike的Web服务器可能会响应任何请求的HTTP POST。Beacon不会清除或使用此信息。您可以使用http-post的服务器上的output关键字指定HTTP POST的输出。
注意:虽然http-get默认使用GET,而http-post默认使用POST,但您不必拘泥于这些选项。使用动词选项更改这些默认值。这里有很大的灵活性。
此表总结了这些关键字及其发送的数据:
Request |
Component |
Block |
Data |
http-get |
client |
metadata |
Session metadata |
http-get |
server |
output |
Beacon\'s tasks |
http-post |
client |
id |
Session ID |
http-post |
client |
output |
Beacon\'s responses |
http-post |
server |
output |
Empty |
http-stager |
server |
output |
Encoded payload stage |
HTTP Staging
Beacon是一个分阶段的有效载荷。这意味着有效负载由stager下载并注入内存。在目标内存中有Beacon之前,HTTP GET和HTTP POST指标不会生效。Malleable C2的http-stager块可自定义HTTP分段过程。
http-stager {
set uri_x86 "/get32.gif";
set uri_x64 "/get64.gif";
该uri_x86选项设置URI下载x86的有效载荷阶段。该uri_x64选项设置URI下载64位的有效载荷阶段。
client {
parameter "id" "1234";
header "Cookie" "SomeValue";
}
http-stager上的client关键字定义了HTTP事务的客户端。使用parameter关键字将参数添加到URI中。使用header关键字将标头添加到stager的HTTP GET请求中。
server {
header "Content-Type" "image/gif";
output {
prepend "GIF89a";
print;
}
}
}
HTTP stager上下文下的server关键字定义了HTTP事务的服务器端。header关键字将服务器头添加到服务器的响应中。HTTP stager服务器上的output关键字是用于更改有效负载阶段的数据转换。此转换只能在阶段前附加字符串。使用打印终止语句关闭此输出块。
HTTP Headers
http-config块对Cobalt Strike的Web服务器提供的所有HTTP响应都有影响。在这里,您可以指定其他HTTP标头和HTTP标头顺序。
http-config {
set headers "Date, Server, Content-Length, Keep-Alive, Connection, Content-Type";
header "Server" "Apache";
header "Keep-Alive" "timeout=5, max=100";
header "Connection" "Keep-Alive";
}
header关键字为cobalt strike的每个HTTP响应添加一个header值。如果响应中已经定义了标头值,则忽略该值。
set headers选项指定这些HTTP头在HTTP响应中的传递顺序。不在此列表中的任何标题都将添加到末尾。
使用SSL Beacon的自签名证书
HTTPS Beacon在其通信中使用HTTP Beacon的指示符。Malleable C2配置文件还可以指定Beacon C2服务器的自签名SSL证书的参数。如果要在SSL证书中复制具有唯一指示符的actor,这非常有用:
https-certificate {
set CN "bobsmalware.com";
set O "Bob\'s Malware";
}
置文件控制的证书参数:
Option |
Example |
Description |
C |
US |
Country |
CN |
beacon.cobaltstrike.com |
Common Name; Your callback domain |
L |
Washington |
Locality |
O |
Strategic Cyber LLC |
Organization Name |
OU |
Certificate Department |
Organizational Unit Name |
ST |
DC |
State or Province |
validity |
365 |
Number of days certificate is valid for |
使用SSL Beacon的有效SSL证书
您可以选择将有效SSL证书与Beacon一起使用。使用Malleable C2配置文件指定Java密钥库文件和密码。此密钥库必须包含证书的私钥,根证书,任何中间证书以及SSL证书供应商提供的域证书。Cobalt Strike希望在与Malleable C2配置文件相同的文件夹中找到Java Keystore文件。
https-certificate {
set keystore "domain.store";
set password "mypassword";
}
使用有效SSL证书的参数是:
Option |
Example |
Description |
keystore |
domain.store |
Java Keystore file with certificate information |
password |
mypassword |
The password to your Java Keystore |
以下是创建用于Cobalt Strike的Beacon的有效SSL证书的步骤:
1.使用keytool程序创建Java密钥存储文件。这个程序会询问“你的姓名是什么?” 确保使用完全权威的域名来响应Beacon服务器。另外,请确保记下密钥库密码。你以后会需要它。
$ keytool -genkey -keyalg RSA -keysize 2048 -keystore domain.store
2.使用keytool生成证书签名请求(CSR)。您将向您的SSL证书供应商提交此文件。他们将验证您的身份并颁发证书。有些供应商比其他供应商更容易和便宜。
$ keytool -certreq -keyalg RSA -file domain.csr -keystore domain.store
3.导入SSL供应商提供的Root和任何中间证书。
$ keytool -import -trustcacerts -alias FILE -file FILE.crt -keystore domain.store
4.最后,您必须安装域证书。
$ keytool -import -trustcacerts -alias mykey -file domain.crt -keystore domain.store
而且,就是这样。您现在拥有一个可以与Cobalt Strike的Beacon一起使用的Java Keystore文件。
代码签名证书
Attacks -> Packages -> Windows Executable and Windows Executable (S) 为您提供签署可执行文件或DLL文件的选项。要使用此选项,必须使用代码签名证书和私钥指定Java Keystore文件。Cobalt Strike希望在与Malleable C2配置文件相同的文件夹中找到Java Keystore文件。
code-signer {
set keystore "keystore.jks";
set password "password";
set alias "server";
}
代码签名证书设置为:
Option |
Example |
Description |
alias |
server |
The keystore\'s alias for this certificate |
digest_algorithm |
SHA256 |
The digest algorithm |
keystore |
keystore.jks |
Java Keystore file with certificate information |
password |
mypassword |
The password to your Java Keystore |
timestamp |
false |
Timestamp the file using a third-party service |
timestamp_url |
http://timestamp.digicert.com |
URL of the timestamp service |
PE and Memory Indicators
Malleable C2配置文件中的stage块控制Beacon如何加载到内存中并编辑Beacon DLL的内容。
stage {
set userwx "false";
set compile_time "14 Jul 2009 8:14:00";
set image_size_x86 "512000";
set image_size_x64 "512000";
set obfuscate "true";
transform-x86 {
prepend "\x90\x90";
strrep "ReflectiveLoader" "DoLegitStuff";
}
transform-x64 {
# transform the x64 rDLL stage
}
stringw "I am not Beacon!";
}
阶段块接受将字符串添加到beacon dll的.rdata部分的命令。string命令添加一个以零结尾的字符串。stringw命令添加了一个宽(utf-16le编码)字符串。data命令按原样添加字符串。
Transform-x86和Transform-X64阻止PAD和Transform Beacon的反射DLL阶段。这些块支持三个命令:prepend、append和strrep。
prepend命令在beacon的反射dll之前插入一个字符串。append命令在beacon-reflective dll后面添加一个字符串。确保预先准备好的数据是阶段体系架构(x86、x64)的有效代码。c2lint程序没有对此进行检查。strrep命令替换beacon反射dll中的字符串。
stage块接受几个控制Beacon DLL内容的选项,并提供改变Beacon反射加载器行为的提示:
Option |
Example |
Description |
checksum |
0 |
The CheckSum value in Beacon\'s PE header |
cleanup |
false |
Ask Beacon to attempt to free memory associated with the Reflective DLL package that initialized it. |
compile_time |
14 July 2009 8:14:00 |
The build time in Beacon\'s PE header |
entry_point |
92145 |
The EntryPoint value in Beacon\'s PE header |
image_size_x64 |
512000 |
SizeOfImage value in x64 Beacon\'s PE header |
image_size_x86 |
512000 |
SizeOfImage value in x86 Beacon\'s PE header |
module_x64 |
xpsservices.dll |
Same as module_x86; affects x64 loader |
module_x86 |
xpsservices.dll |
Ask the x86 ReflectiveLoader to load the specified library and overwrite its space instead of allocating memory with VirtualAlloc. |
name |
beacon.x64.dll |
The Exported name of the Beacon DLL |
obfuscate |
false |
Obfuscate the Reflective DLL\'s import table, overwrite unused header content, and ask ReflectiveLoader to copy Beacon to new memory without its DLL headers. |
rich_header |
Meta-information inserted by the compiler |
|
sleep_mask |
false |
Obfuscate Beacon, in-memory, prior to sleeping |
stomppe |
true |
Ask ReflectiveLoader to stomp MZ, PE, and e_lfanew values after it loads Beacon payload |
userwx |
false |
Ask ReflectiveLoader to use or avoid RWX permissions for Beacon DLL in memory |
Cloning PE Headers
Cobalt Strike的Linux软件包包括一个工具peclone,用于从dll中提取头文件并将其显示为一个随时可用的阶段块:
./peclone [/path/to/sample.dll]
内存中的逃逸和混淆
使用stage block的prepend命令来阻止分析,该分析扫描内存段的前几个字节以查找注入DLL的符号。如果使用特定于工具的字符串来检测代理,请使用strrep命令更改它们。
如果strrep不够,请将sleep_mask设置为true。这导致Beacon在进入睡眠状态之前在内存中进行模糊处理。在休眠之后,Beacon会对自己进行去模糊处理以请求和处理任务。SMB和Beacon将在等待新连接或等待父会话中的数据时进行模糊处理。
决定您希望在内存中看起来像一个DLL特征。那么您希望方便检测,请将stomppe设置为false。如果您想在内存中轻微混淆Beacon DLL,请将stomppe设置为true。如果您想要应对挑战,请将obfuscate设置为true。此选项将采取许多步骤来混淆Beacon阶段和内存中DLL的最终状态
将userwx设置为false以询问Beacon的加载器以避免以RWX权限执行。具有这些权限的内存段将引起安全分析师和安全产品的额外关注。
默认情况下,Beacon的加载程序使用VirtualAlloc分配内存。模块踩踏是另一种选择。将module_x86设置为DLL,该DLL大约是Beacon有效负载本身的两倍。Beacon的x86加载器将加载指定的DLL,在内存中找到它的位置,并覆盖它。这是一种将Beacon置于Windows与磁盘上的文件关联的内存中的方法。您想要驻留的应用程序不需要您选择的DLL。重要的是module_x64选项是相同的,但它会影响x64 Beacon。
如果您担心在内存中初始化Beacon DLL的Beacon阶段,请将cleanup设置为true。当不再需要时,此选项将释放与Beacon阶段相关联的内存。
Process Injection
Malleable C2配置文件中的进程注入块可以注入内容并控制进程注入行为。
process-inject {
set min_alloc "16384";
set startrwx "true";
set userwx "false";
transform-x86 {
prepend "\x90\x90";
}
transform-x64 {
# transform x64 injected content
}
disable "CreateRemoteThread";
}
transform-x86和transform-x64阻止Beacon注入的PAD内容。这些块支持两个命令:prepend和append。
prepend命令在插入的内容之前插入一个字符串。append命令在注入的内容之后添加一个字符串。确保预先准备好的数据是注入内容体系架构(x86、x64)的有效代码。c2lint程序没有对此进行检查。
该disable语句是一个提示语,以避免在beacon的进程注入例程中使用某些API的提示。您可以禁用:SetThreadContext,CreateRemoteThread和RtlCreateUserThread。请注意,当您禁用这些调用时,您可能会在Beacon的进程注入例程中引入可避免的失败。c2lint命令会发出一些警告
process-inject块接受几个控制Beacon中的过程注入的选项:
Option |
Example |
Description |
min_alloc |
4096 |
Minimum amount of memory to request for injected content |
startrwx |
true |
Use RWX as initial permissions for injected content. Alternative is RW. |
userwx |
false |
Use RWX as final permissions for injected content. Alternative is RX. |
哪个更危险,Malleable C2还是swimming pool
答案是什么?两者都有。Malleable C2为您提供了对网络和主机指标的全新控制。有了这种权限,责任也随之而来。Malleable C2也是一个犯很多错误的地方。当您自定义配置文件时,需要考虑以下几点:
1.每个Cobalt Strike实例一次使用一个配置文件。如果您更改配置文件或加载新配置文件,则以前部署的Beacons无法与您通信。
2.始终了解数据的状态以及在开发数据转换时协议允许的内容。例如,如果您使用base64编码元数据并将其存储在一个uri参数中,那么它将不起作用。为什么?一些base64字符(+、=、和/)在URL中有特殊含义。c2lint工具和Profile Compiler不会检测这些类型的问题。
3.即使经过小的更改,也要测试您的配置文件。如果Beacon无法与您通信,可能是您的配置文件有问题。编辑并重试。
4.信任c2lint工具。该工具超越了配置文件编译器。这些检查的基础是这项技术的实施方式。如果c2lint检查失败,则表示您的配置文件存在真正的问题。
Malleable Command and Control Demo
Make Token
进入到[beacon] - > Access - > Make Token,并打开Cobalt Strike的Make Token对话框。此对话框显示Cobalt Strike的凭据,并将所选凭据转换为令牌。
Microsoft Word和Excel宏攻击
Microsoft Office宏工具将生成一个宏以嵌入到Microsoft Word或Microsoft Excel文档中。进入到Attacks -> Packages -> MS Office Macro
选择一个侦听器,然后按Generate创建恶意MS Office宏。Cobalt Strike将提供逐步说明,将宏嵌入到Word或Excel文档中。
当您可以欺骗用户在打开文档时运行宏时,此攻击很有效。
MS Word和Excel宏攻击
Payload Generator
Cobalt Strike的Payload Generator输出源代码和artifacts,将Cobalt Strike监听器转移到主机上。可以把它想象成msfvenom的Cobalt Strike版本。
要生成有效负载,请进入到Attacks - > Packages - > Payload Generator。
将Listener选项设置为要为其输出有效负载的Cobalt Strike Listener。
使用Output选择您想要的输出类型。大多数选项都会为该语言提供格式化为字节数组的shellcode。有几个选项可以让您立即使用:
Option |
What? |
COM Scriptlet |
A .sct file to run a listener |
PowerShell |
PowerShell script to run shellcode |
PowerShell Command |
PowerShell one-liner to run a Beacon stager. |
Raw |
blob of position independent shellcode. |
Veil |
Custom shellcode suitable for use with the Veil Evasion Framework. |
选中“Use x64 payload ”框为所选侦听器生成x64 stager。
创建可执行Beacon的Veil Evasion Framework:
复制刚生成的veil的poc:
端口扫描器
进入到 [beacon] -> Explore -> Port Scanner,以启动端口扫描工具。
Beacon扫描端口
Listener Management
要管理您的Cobalt Strike监听器,请进入到Cobalt Strike - > Listeners。这将打开一个列出所有持久侦听器的选项卡。单击“ Add”按钮以创建新的侦听器。
给你的监听器设置一个有意义的名称。这是您在生成社交工程包,传递会话或设置客户端攻击时用来引用它的名称。
使用Payload下拉列表选择此侦听器将提供的有效负载。
“host和port”字段定义有效负载将从何处进行转移。您可以在“host”字段中使用完全权威的域名。
按Save按钮来保存侦听器,并为侦听器启动服务器。
其他选项
Listeners选项卡是用来管理监听器。突出显示侦听器,然后按 Edit以更改侦听器。
突出显示一个或多个侦听器,然后按“ Remove”。这将阻止这些监听器并将其从Cobalt Strike中移除。
使用
你可以使用具有Cobalt Strike攻击和后期开发功能的侦听器。这些功能将允许您按名称选择侦听器。确保为每个侦听器使用描述性名称。
Foreign Listeners
Cobalt Strike支持 foreign listeners。这些是Metasploit®框架或其他Cobalt Strike实例中托管的x86有效负载处理程序的别名。要将Windows HTTPS Meterpreter会话传递给具有msfconsole的朋友,请定义一个windows/foreign/reverse侦听器,并将Host和Port值指向其处理程序。您可以在任何使用常规Cobalt Strike侦听器的地方使用外部侦听器。
会话传递
权限升级
进入到[beacon] - > Access - > Elevate以启动权限提升漏洞利用。选择一个侦听器,选择一个exploit,然后按“ Launch ”以运行该漏洞。此对话框是Beacon的提升权限命令的前端。
Cobalt Strike附带三个内置漏洞:
ms14-058是一个(过时的)权限升级漏洞利用程序,可用于未打补丁的Windows 7系统提权。
UAC DLL是一种绕过UAC的攻击,它试图将本地管理员运行的有效负载从低权限提升到高权限。此攻击使用UAC漏洞将Artifact Kit生成的DLL复制到特权位置。然后,它运行一个应用程序,该应用程序(a)在运行时具有完全权限,(b)易受DLL劫持的攻击。这些步骤加载启动Beacon会话的DLL。此攻击适用于Windows 7和Windows 8及更高版本的未修补版本。如果Always Notify处于其最高设置,则此攻击将不起作用。
uac-token-duplication是另一种绕过UAC的攻击,将其从低权限提升到高权限(作为本地管理员)。这种攻击使用一个UAC漏洞,允许非提升进程使用从提升进程中窃取的令牌启动任意进程。此漏洞要求攻击删除分配给提升令牌的多个权限。。此攻击适用于Windows 7及更高版本。如果Always Notify处于其最高设置,则此攻击要求提升的进程已在当前桌面会话中运行(作为同一用户)。此漏洞使用PowerShell生成会话。
您可以通过Elevate Kit向Cobalt Strike添加权限提升漏洞。Elevate Kit是一个Aggressor脚本,它将几个开源特权升级漏洞集成到Cobalt Strike中。https://github.com/rsmudge/ElevateKit。
Elevate Kit提升套件
、
Process Browser
进入到 [beacon] -> Explore -> Show Processes以打开进程浏览器
进程浏览器显而易见; 它要求Beacon显示进程列表并向给你输出这些信息。Process Browser也是从其他进程模拟令牌,部署屏幕截图工具或部署键盘记录器。突出显示一个或多个进程,然后选择对话框底部的相应按钮。
进程浏览器
如果您突出显示多个信标并将其命令显示进程,Cobalt Strike将显示一个进程浏览器,该进程浏览器还会指出进程来自哪个主机。Process Browser的这种变体是将Beacon的后期开发工具同时部署到多个系统的便捷方式。只需按进程名称排序,突出显示目标系统上的有趣进程,然后按屏幕截图或日志按键按钮将这些工具部署到所有突出显示的系统。
如果您突出显示多个Beacon并让它们显示进程,Cobalt Strike将显示一个进程浏览器,该进程浏览器还会指出进程来自哪个主机。Process Browser的这种变体是将Beacon的后期开发工具同时部署到多个系统的便捷方式。只需按进程名称排序,突出显示目标系统上重要进程,然后按Screenshot或Keystrokes 按钮将这些工具部署到所有突出显示的系统
大规模用户利用
Reporting
Cobalt Strike提供了多种报告选项,可帮助您了解数据并向客户呈现你的报告。您可以配置大多数报告中显示的标题,说明和主机。
进入到“ Reporting ”并选择要生成的其中一个报告。Cobalt Strike会将您的报告导出为MS Word或PDF文档格式。
报告类型
·活动报告(.pdf)
活动报告提供了红队活动的时间表。
·主机报告(.pdf)
主机报告按主机统计了Cobalt Strike的数据模型。此处记录了主机,服务,凭据和会话。
·折衷报告指标.pdf)
该报告类似于威胁情报报告中的“折衷指标”附录。内容包括对您的Malleable C2配置文件的生成分析,您使用的域名以及您上传的文件的MD5哈希值。
·会议报告(.pdf)
该报告提供了红队活动的完整信息。它捕获每个会话,该会话的通信路径,在该会话期间放置在目标上的MD5哈希值,并提供红队活动的运行日志。
·社会工程报告(.pdf)
社交工程报告记录每一次点击的鱼叉钓鱼邮件,以及从点击的每个用户收集的内容。此报告还显示由系统探查器发现的应用程序。
·战术,技术和程序报告(.pdf)
此报告将您的Cobalt Strike行动映射到MITRE的ATT&CK Matrix中。ATT&CK描述了每个策略以及检测和解决方案。您可以在https://attack.mitre.org了解更多关于MITRE的ATT&CK的信息
自定义标签
Cobalt Strike报告在第一页顶部显示Cobalt Strike图标。您可以用自己选择的图像替换来它。进入到Cobalt Strike -> Preferences -> Reporting 并设置您要使用的图标。也可以设置强调色。强调文字颜色是报表第一页图像下方的粗线。
报告首选项
您的自定义图像应该是1192X257px,设置为300dpi。300dpi设置是报表引擎以正确的大小呈现图像所必需的。
自定义报告
Cobalt Strike使用特定于域的语言来定义其报告。您可以通过“ Report Preferences”对话框来加载自己的报告。要了解有关此功能的更多信息,请参阅Aggressor Script文档的“ 自定义报告”一章
Resource Kit
Resource Kit是Cobalt Strike改变Cobalt Strike在其工作流程中使用的HTA,PowerShell,Python,VBA和VBS脚本模板的方法。同样,Resource Kit可供Cobalt Strike库中的许可用户使用。进入到Help -> Arsenal 下载Resource Kit。
Resource Kit附带的README.txt记录了包含的脚本以及使用它们的功能。要规逃避AV检查,请考虑更改这些脚本中的字符串或特征
要使Cobalt Strike在内置脚本模板上使用脚本模板,请加载Resource Kit附带的resources.cna脚本。
Resource Kit
Scripted Web Delivery
该 Attacks -> Web Drive-by -> Scripted Web Delivery功能产生启动信标,承载它钴攻击的Web服务器上,并提出了一个班轮下载并运行该神器神器。选项包括:bitsadmin,powershell,python和regsvr32。
该 Attacks -> Web Drive-by -> Scripted Web Delivery生成一个artifact并启动Beacon,将其托管在Cobalt Strike的web服务器上,并提供一个用于下载和运行artifact的一行程序。选项包括:bitsadmin、powershell、python和regsvr32。
bitsadmin选项托管一个可执行文件,并使用bitsadmin下载它。bitsadmin方法通过cmd.exe运行可执行文件。PowerShell选项托管PowerShell脚本,并使用PowerShell.exe下载该脚本并对其进行评估。python选项托管一个python脚本,并使用python.exe下载并运行该脚本。regsvr32选项生成一个com scriptlet文件,并使用regsvr32.exe下载和运行scriptlet的内容。COM Scriptlet使用恶意的VBA宏将Beacon输入内存。COM Scriptlet选项要求目标上有Microsoft Office。每个选项都是运行Cobalt Strike侦听器的不同方式。
选中Enable SSL 以通过SSL提供此内容。在Malleable C2配置文件中指定有效的SSL证书时,此选项可用。确保Host字段与SSL证书的CN字段匹配。这将避免由于这些字段之间的不匹配而导致此功能失败的情况
Scripted Web Delivery使用
Aggressor Script
Aggressor Script是Cobalt Strike 3.0版及更高版本中内置的脚本语言。Aggresor Script允许您修改和扩展Cobalt Strike客户端。
Aggressor脚本的文档位于https://www.cobaltstrike.com/aggressor-script/
历史参考
Aggressor Script是Armitage中开源脚本引擎Cortana的基础。通过DARPA的Cyber Fast Track项目,Cortana项目可能被实现。Cortana允许其用户通过Armitage的团队服务器扩展Armitage并控制Metasploit®框架及其功能。Cobalt Strike 3.0是在没有Armitage的基础上对Cobalt Strike的一次彻底改写。这一变化提供了一个重新审视Cobalt Strike脚本的机会,并围绕Cobalt Strike的功能构建一些东西。这项工作的成果是Aggressor Script。
Aggressor Script是一种脚本语言,用于受可脚本化IRC客户机和机器人程序的启发而进行的红色团队操作和对手模拟。它的目的是双重的。你可以创建一个长时间运行的机器人来模拟虚拟的红色成员,与你并排模拟进行黑客攻击。您也可以使用它来扩展和修改Cobalt Strike客户机以满足您的需要。
如何加载脚本
Aggressor Script内置于Cobalt Strike客户端。要永久加载脚本,请进入到Cobalt Strike - > Script Manager,然后按Load。
脚本加载器
Aggressor Script
具体参考说明:https://www.cobaltstrike.com/aggressor-script/index.html
输入help命令
从default.can中复制2段代码
Site Management
Cobalt Strike功能使用自己的Web服务器。站点管理工具允许您管理此Web服务器。进入到Attacks -> Web Drive-by -> Manage以访问它。
突出显示URL并按“ Copy URL”将URL复制到剪贴板。按Kill关闭应用程序。
SOCKS Proxy Pivoting
进入到[beacon] - > Pivoting - > SOCKS Server,在您的团队服务器上设置SOCKS4a代理服务器。或者,使用socks 8080在端口8080(或您选择的任何其他端口)上设置SOCKS4a代理服务器。
通过这些SOCKS服务器的所有连接都将变为连接,读取,写入和关闭任务状态,以便执行相关的Beacon。您可以通过SOCKS的任何类型的Beacon(甚至是SMBBeacon)进行隧道传输。
Beacon的HTTP数据通道对数据转发的响应最快。。如果您想通过DNS转发流量,请使用DNS TXT记录通信模式。
要查看当前设置的SOCKS服务器,请进入到View - > Proxy Pivots。
在Beacon控制台中使用socks stop来停止SOCKS代理服务器。
Proxychains
该proxychains工具将强制外部程序使用指定的SOCKS代理服务器。您可以使用代理链强制第三方工具通过Cobalt Strike的SOCKS服务器
SOCKS Pivoting with Proxychains
Metasploit
您还可以通过Beacon挖掘Metasploit®Framework漏洞和模块。创建Beacon SOCKS代理服务器[如上所述]并将以下内容粘贴到Metasploit®Framework控制台中:
您还可以通过Beacon隧道连接Metasploit®Framework漏洞和模块。创建Beacon Socks代理服务器[如上所述],并将以下内容粘贴到Metasploit®框架控制台中:
setg Proxies socks4:team server
IP:proxy port
setg ReverseAllowProxy true
这些命令将显示Metasploit®Framework将Proxies选项应用于此前执行的所有模块。一旦您以这种方式完成了通过Beacon的转发,请使用unsetg Proxies来停止此执行。
如果您发现上面的内容难以记住,请进入到View -> Proxy Pivots.。突出显示您设置的代理转发,然后选择Tunnel。此按钮将提供通过Beacon传输Metasploit®Framework所需的setg Proxies语法。
Sending Metasploit through a SOCKS Proxy Pivot
Spawn As
此对话框使用指定的凭据作为另一个用户生成Cobalt Strike侦听器。进入到[beacon] - > Access - > Spawn As打开它。
Elevate with Credentials
鱼叉式网络钓鱼SSH会话
Cobalt Strike通过内置SSH客户端控制UNIX目标。此SSH客户端通过父Beacon接收任务并将其输出链接信息。
右键单击目标并进入到 Login -> ssh ,使用用户名和密码进行身份验证。进入到Login -> ssh (key),使用密钥进行身份验证。
从Beacon控制台:使用ssh [target] [user] [password]从Beacon启动SSH会话。使用ssh-key [target] [user] [/path/to/key.pem]通过密钥进行身份验证。
这些命令运行Cobalt Strike的SSH客户端。客户端将向父Beacon输出任何连接或身份验证问题。如果连接成功,您将在Cobalt Strike中看到一个新会话。这是一个SSH会话。右键单击此会话,然后按Interact打开SSH控制台。
输入help以查看SSH会话支持的命令列表。输入help+命令名称以获取该命令的详细信息。
运行命令
shell命令将运行您提供的命令和参数。在Cobalt Strike将命令置于后台之前,运行命令会阻止ssh会话长达20秒。Cobalt Strike将报告这些长时间运行命令的输出。
使用sudo [password] [command + arguments]尝试通过sudo运行命令。此别名要求目标的sudo接受-S标志。
CD命令更改SSH会话的当前工作目录。PWD命令表示当前工作目录。
上传和下载文件
upload命令将文件上传到当前工作目录。 download命令将下载文件。使用下载命令下载的文件可在View -> Downloads下找到。您还可以键入 downloads以查看正在进行的文件下载。该cance命令将取消正在进行中的下载。
点对点C2
SSH会话可以控制TCPBeacons。使用connect命令可以控制等待连接的TCP Beacon。使用unlink命令断开TCP Beacon会话。
进入到[session] - > Listeners - > Pivot Listener ...以设置与此SSH会话关联的数据转发监听器。这将允许此受控的UNIX目标接收反向TCP Beacon会话。此选项确实要求SSH守护程序的GatewayPorts选项设置为yes或ClientSpecified。
SOCKS转发和反向端口转发
使用socks命令在您的团队服务器上创建一个socks服务器,通过ssh会话转发流量。rportfwd命令还将创建一个反向端口转发,通过ssh会话和 Beacon链路由流量。
rportfwd有一个警告:rportfwd命令要求SSH守护程序绑定到所有接口。SSH守护程序很可能会覆盖此并强制端口绑定到localhost。您需要将SSH守护程序的GatewayPorts选项更改为yes或clientspecified
利用Cobalt Strike SSH会话进行Unix后期利用
系统分析器
System Profiler是用于客户端攻击过程的侦察工具。此工具启动本地Web服务器,并对访问它的任何人进行身份识别。System Profiler会发现代理服务器后面的用户的内部IP地址以及多个应用程序及其版本信息。
要启动System Profiler,请进入到Attacks - > Web Drive-by - > System Profiler。
启动Profiler必须指定要绑定的URI和启动Cobalt Strike Web服务器的端口。
如果您指定一个Redirect URL,Cobalt Strike将在获取访问者的配置文件后将其重定向到此URL。单击“Launch”以启动System Profile。
System Profiler使用未签名的Java Applet来分解目标的内部IP地址,并确定目标的Java版本。使用Java的点击运行安全功能 - 这可能会引起怀疑。取消选中Use Java Applet获取信息框,以便在没有Java Applet的情况下运行System Profiler。
选中Enable SSL以通过SSL提供此内容。在Malleable C2配置文件中指定有效的SSL证书时,此选项可用。
要从System Profiler 查看结果,请进入到 View -> Applications。Cobalt Strike将列出它在系统分析过程中发现的所有应用程序。
Client-side Reconaissance
目标和服务
您可以通过View - > Targets与Cobalt Strike的目标信息进行交互。此选项卡显示与“目标可视化”相同的信息。
选择Import以导入包含目标信息的文件。Cobalt Strike接受每行一个主机的纯文本文件。它还接受由nmap生成的XML文件。。
选择Add 以手动将新目标添加到Cobalt Strike的数据模型中。
添加目标
此对话框允许您将多个主机添加到Cobalt Strike的数据库中。指定一个IP地址范围或在地址字段中使用CIDR表示法一次添加多个主机。单击“保存”将主机添加到数据模型并保持此对话框打开时按住SHIFT键。
选择一个或多个主机,然后右键单击以打开主机菜单。此菜单用于更改主机上的说明、设置其操作系统信息或从数据模型中删除主机。
服务
在目标显示中,右键单击主机,然后选择“ Services.”。这将打开Cobalt Strike的服务浏览器。在这里,您可以浏览服务,为不同的服务分配注释,以及删除服务记录
Cobalt Strike中的Unicode支持
Unicode是通用语言中字符到固定数字或代码点的转换。下文介绍了Cobalt Strike对Unicode文本的支持
编码
Unicode是字符到数字(代码点)的转换,但它不是编码。编码是通过将单个序列或字节序列映射到该映射中的代码点来为其赋予意义的相同方法。
在内部,Java应用程序使用UTF-16编码存储和操作字符。UTF-16是一种使用两个字节来表示普通字符的编码。Rarer字符用四个字节表示。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编码以外的其他内容来解码输入和输出:
Command |
Input Encoding |
Output Encoding |
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 |
注意:对于熟悉mimimikatz的人,您将注意到mimimikatz在内部使用unicode win32 API和utf-16字符。UTF-8是从哪里来的?Cobalt Strike与Mimikatz的接口以utf-8的形式发送输入,并将输出转换为utf-8。
SSH会话
Cobalt Strike的SSH会话使用UTF-8编码进行输入和输出。
日志
Cobalt Strike的日志是UTF-8编码的文本。
字体
您的字体可能会限制显示某些系统中的字符。要更改Cobalt Strike字体:
进入到Cobalt Strike - > Preferences - > Cobalt Strike来更改GUI Font值。这将改变Cobalt Strike在其对话框,表格和界面其余部分中使用的字体。
进入到Cobalt Strike - > Preferences - > Console以更改Cobalt Strike控制台使用的字体。
Cobalt Strike - > Preferences - > Graph有一个Font选项来更改Cobalt Strike的pivot图所使用的字体
USB/CD 自动播放攻击
Cobalt Strike的 USB/CD 自动播放攻击可帮助您将CD-ROM或USB驱动器转变为针对Windows XP和Windows Vista系统的攻击。Cobalt Strike创建了一个autorun.info文件,它添加了一个自动播放操作并挂钩了驱动器的几个shell命令。这些挂钩将允许用户在尝试查看驱动器的内容时无意中运行您指定的可执行文件
要创建恶意USB驱动器,请进入到Attacks - > Packages - > USB/CD AutoPlay
在“ Media Label ”字段中指定驱动器的名称。
提供自动播放操作(AutoPlay Action)文本。当插入驱动器时,将在操作列表的顶部向用户显示此内容。此外,请确保在驱动器上放置几个支持您的符文的合法文件。Windows根据用户在驱动器上看到的文件类型向用户显示操作。
提供自动播放操作文本。当驱动器插入时,这将显示在操作列表顶部的用户。另外,请确保您在驱动器上放置了几个支持您的诡计的合法文件。Windows根据用户在驱动器上看到的文件类型向用户显示操作
指定自动播放图标(AutoPlay Icon)。您可以引用驱动器上的文件或在标准位置指定图标。
最后,选择要运行的可执行文件。您可以 通过Cobalt Strike 生成可执行文件,或者如果需要,可以使用另一个可执行文件。
选择“Launch”并选择保存文件的位置。这些文件应最终位于驱动器的根目录上,这样攻击才能正常执行。
此攻击最适合Windows XP系统。它的一部分可以在Windows Vista上运行。此攻击不适用于Windows 7。
注意:此攻击的实现已过时,在现有的最新环境中不起作用。
Website Clone Tool(网站克隆工具)
在将漏洞发送到目标之前,它有助于对其进行修饰。Cobalt Strike的网站克隆工具可以帮助解决这个问题。网站克隆工具生成一个本地网站副本,其中添加了一些代码以修复链接和图像,以便它们按预期执行。
要克隆网站,请进入到Attacks -> Web Drive-by -> Clone Site.
可以将攻击嵌入到克隆的站点中。在Embed字段中写下攻击的URL,Cobalt Strike将使用IFRAME将其添加到克隆的站点。点击...按钮并选择一个正在运行的客户端漏洞。
克隆的网站也可以捕获键盘输入。选中Log keystrokes on cloned site框。这将在克隆的站点中插入一个javascript密钥记录器。
要查看记录的键盘输入或查看克隆站点的访问,请进入到View -> Web Log.。
选中Enable SSL以通过SSL提供此内容。在Malleable C2配置文件中指定有效的SSL证书时,此选项可用。确保Host字段与SSL证书的CN字段匹配。这将避免由于这些字段之间的不匹配而导致此功能失败的情况
选中“ Enable SSL to serve this content over SSL.”。
Delivering Beacon with a Metasploit Framework Exploit
Covert VPN
Cobalt Strike通过其Covert VPN功能来提供VPN 转发。Covert VPN在Cobalt Strike系统上创建了一个网络接口,并将此接口连接到目标网络。
如何部署Covert VPN
要激活Covert VPN,请右键单击受控的主机,进入到 [beacon] - > Pivoting - > Deploy VPN。选择您希望Covert VPN绑定到的远程接口。如果没有本地接口,请选择Add来创建。
检查克隆主机MAC地址,使本地接口与远程接口具有相同的MAC地址。
选择Deploy在目标上启动Covert VPN客户端。Covert VPN需要管理员访问才能部署。
一旦Covert VPN接口被激活,您就可以像使用系统上的任何物理接口一样使用它。使用ifconfig配置其IP地址。如果目标网络具有DHCP服务器,则可以使用操作系统的内置工具从该服务器请求IP地址
管理接口
要管理您的Covert VPN接口,请进入到Cobalt Strike - > Interfaces。在这里,Cobalt Strike将显示Covert VPN接口,它们的配置方式以及通过每个接口传输和接收的字节数。突出显示一个接口,然后选择“Remove”清除该接口并关闭远程Covert VPN客户端。。Covert VPN将在重新启动时删除其临时文件,并立即自动撤消任何系统更改。
选择Add 以配置新的Covert VPN接口。
配置接口
Covert VPN接口包括一个网路分流器(Network Tap)和一个通过以太网帧进行通信的通道。要配置接口,请选择接口名称(这是稍后通过ifconfig操作的内容)和MAC地址。
VPN接口设置
您还必须为您的接口配置Covert VPN通信通道。Covert VPN可以通过UDP连接、TCP连接,ICMP或使用HTTP协议来通信以太网帧。TCP(反向)通道的目标连接到Cobalt Strike实例。TCP(Bind)通道通过Beacon具有Cobalt Strike隧道VPN。
Cobalt Strike将根据您选择的本地端口和通道设置和管理与Covert VPN客户端的通信。
Covert VPN HTTP通道使用Cobalt Strike Web服务器。您可以在同一端口上托管其他Cobalt Strike Web应用程序和多个Covert VPN HTTP通道。
为获得最佳性能,请使用UDP通道。与TCP和HTTP通道相比,UDP通道的消耗最小。如果需要通过防火墙,请使用ICMP,HTTP或TCP(Bind)通道。
注意:此功能在Windows 10目标上不起作用。
创建Windows Dropper EXE
dropper是一个可执行文件,它将文档存储到磁盘上,打开它,然后在后台以静默方式执行攻击者的有效负载。Attacks -> Packages -> Windows Dropper将为您生成一个Windows Dropper。
Embedded File是嵌入可执行的文件。您可以在此处使用任何文件类型。
File Name是文件存储到磁盘时的名称。您应该尽可能使此名称与您的dropper的计划名称相匹配。Cobalt Strike会将嵌入的文件存储到用户的Documents文件夹中。
选择Generate生成Dropper可执行文件。
使用图标编辑器(icon editor )将可执行文件的图标更改为嵌入式文件。
Cobalt Strike的Artifact Kit生成Windows Dropper可执行文件。
创建Windows EXE
Attacks -> Packages -> Windows Executabl生成一个win32侦听器的windows可执行artifact。此包提供了几个输出选项:
Windows EXE是Windows可执行文件。
Windows Service EXE 是响应服务控制管理器命令的Windows可执行文件。您可以使用此可执行文件创建带有sc的Windows服务,或使用Metasploit®Framework的PsExec模块创建自定义可执行文件。
Windows DLL (32-bit) 是一个x86 Windows DLL。
Windows DLL (64-bit)是一个x64 Windows DLL。如果未选中Use x64 payload”,则x64 DLL将生成32位进程并将侦听器迁移到该进程。
x86和x64 DLL选项导出与rundll32.exe兼容的Start函数。使用适合体系架构的rundll32.exe从命令行加载DLL。
rundll32
foo.dll,Start
此功能生成x86 artifacts,默认情况下提供x86架构(除非另有说明)。选中Use x64 payload 框以生成包含x64有效负载架构的x64 artifacts。
选中Sign executable file框,使用代码签名证书对EXE或DLL artifacts进行签名。必须在Malleable C2配置文件中指定证书。
Cobalt Strike使用其Artifact Kit生成此输出。
创建Windows Executable (Stageless)
Attacks -> Packages -> Windows Executable (S) 生成一个Windows可执行artifacts,其中包含Cobalt Strike的Beacon(没有stagers,因此没有稳定有效载荷)。此包提供了几个输出选项:
PowerShell是一个PowerShell脚本,它向内存中注入一个不稳定的Beacon。
Raw是一个包含Beacon的与位置无关的代码块。
Windows EXE是Windows可执行文件。
Windows Service EXE 是响应服务控制管理器命令的Windows可执行文件。您可以使用此可执行文件创建带有sc的Windows服务,或使用Metasploit®Framework的PsExec模块创建自定义可执行文件。
Windows DLL (32-bit) 是一个x86 Windows DLL。
Windows DLL (64-bit) 是一个x64 Windows DLL。如果未选中“ Use x64 payload”,则x64 DLL将生成32位进程并将侦听器迁移到该进程。
x86和x64 DLL选项导出与rundll32.exe兼容的Start函数。使用适合体系架构的rundll32.exe从命令行加载DLL。
rundll32
foo.dll,Start
Proxy字段配置用于Beacon的手动代理设置。这是可选的。
此功能生成x86 artifacts,默认情况下提供x86架构(除非另有说明)。选中Use x64 payload 框以生成包含x64有效负载架构的x64 artifacts。
选中Sign executable file框,使用代码签名证书对EXE或DLL artifacts进行签名。必须在Malleable C2配置文件中指定证书。
Cobalt Strike使用其Artifact Kit生成此输出。。
Lateral Movement Demonstration