cobalt strike是一款非常成熟的渗透测试框架。CS在3.0版本之前是基于Metasploit框架工作的,可以使用Metasploit的漏洞库。从3.0版本开始,cs不再使用 Metasploit 的漏洞库,成为了一个独立的渗透测试平台。

cs是用Java语言编写的。其优点在于,可以进行团队协作,一搭载了cs的teamserver服务的服务器为中转站,使目标系统权限反弹到该teamserver服务器上。同时,cs提供了良好的UI界面。

cs不是免费的哈。

0x00:from

--《内网安全攻防》

0x01:安装

1.安装java运行环境

1.下载

因为启动cs需要JDK的支持,所以需要安装java环境。打开oracle官方网站,选择jdk1.8版本。下载linux x64安装包。

2.解压安装配置环境变量

kali2默认自带这里就不写了

3.部署TeamServer

在安装cs时,必须搭建团队服务器(也就是TeamServer服务器)。打开CS文件夹,linux环境建议直接chmod 777

cs文件夹下各文件的功能

  • agscript:拓展应用的脚本
  • c2lint:用于检查profile的错误和异常
  • teamserver:团队服务器程序
  • cobaltstrike.jar/cobaltstrike:客户端程序,我这里windows无法直接打开jar,也不知道出了什么毛病,bat可以另一个是linux的可执行文件。
  • logs:日志,包括web日志、Bcacon日志、截图日志、下载日志、键盘记录等。
  • update和update.jar:用于更新CS
  • data:用于保存当前teamserver的一些数据

首先运行teamserver

./teamserver 192.168.150.145 123456//linux
teamserver 192.168.150.1 123456 //windows

运行成功:

如果要将teamserver部署到公网,记得使用强口令。

2.启动cs

1.启动cobaltstrike.bat

双击.bat文件即可

在客户端向服务器成功获取相关信息后,即可打开cs主界面,cs主界面主要分为菜单栏、快捷功能区、目标列表区、控制台命令输出区、控制台命令输入区。

  • 菜单栏:集成了cs的所有功能
  • 快捷功能区:列出常用的功能
  • 目标列表:根据不同的显示模式,显示已获取权限的主机及目标主机
  • 控制台命令输出区:输出命令的执行结果
  • 控制台命令输入区:输入命令

2.利用cs获取第一个beacon

1.建立listener

可以通过菜单栏的第一个选项“cobali strike”进入“listeners/监听”面板,也可以通过快捷功能区进入“listeners”面板。

单击“Add”按钮,新建一个监听器,输入名称、监听器类型、团队服务器IP地址、监听的端口,然后单击“save”按钮保存设置。第一个监听器建立成功。

2.使用web delivery执行payload

单击“attacks/攻击”菜单,选择“web drive-by”--“scripted web delivery”选项

或者通过快捷方式打开

保持默认配置,选择已经建立的监听器,设置类型为powershell,然后单击“Launch”按钮,最后,将cs生成的payload完整的复制下来。

3.执行payload

如果一切顺利,就可以在cs的日志界面看到一条日志

在cs的主界面中可以看到一台机器上线(包含内网ip、外网ip、用户名、机器名、是否拥有特权、beacon进程的pid、心跳信息)

4.与目标主机进行交互操作

单击右键,在弹出的快捷菜单中选需要操作的Beacon,然后单击“interact”选项,进入主机交互模式。

现在就可以输入一些命令来执行相关操作了,输入“shell whoami”命令,查看当前用户,在心跳时间后就会执行该命令。在执行命令时,需要在命令前添加“shell”。beacon的每次回连时间默认为60s。

回连后,执行命令的任务将被下发,并成功回显命令执行结果。

5.sleep命令

单击右键,在弹出的快捷菜单中选择“Session”--“sleep”选项,或者在Beacon命令行环境中执行如下命令,即可调用sleep命令。

sleep 1

在默认情况下,cs回连时间为60s,为了增加响应速度,可以选中一个会话,右键选择进入beacon执行sleep 1命令,将心跳时间更改为1s。

0x02:Beacon的常用操作命令

1.使用getuid命令获取当前用户权限

beacon命令行:getuid

getuid命令用于获取当前beacon是以哪个用户的身份运行的,是否具有管理员权限等。

2.使用getsystem命令获取system权限

beacon命令行:getsystem

输入:getsystem

system权限是windows操作系统中的第二高权限。即使拥有system权限,也无法修改系统文件。TrustedInstall权限是windows操作系统中的最高权限。

3.使用getprivs命令获取当前beacon的所有权限

beacon命令行:getprivs

getprivs命令用于获取当前beacon包含的所有权限,类似在命令行环境中执行“whoami/priv”命令。获得尽可能多的权限,在beacon命令行输入“getprivs”命令

4.使用browser pivot模式劫持指定的beacon浏览器

图形化操作:点击右键,选择“explore” -- “browser privot”

beacon命令行:browserpivot pid x86/x64
browserpivot stop

Browser Pivot 模块用于劫持目标的IE浏览器,在目标主机上开设代理。本地浏览器通过代理劫持目标的cookie实现免登陆。

5.使用Desktop(VNC)进行VNC连接

图形化操作:右键,选择“explote”--“Desktop(VNC)” 选项。
beacon命令行:desktop

将VNC服务端注入目标机器,即可通过参数控制通信质量。需要注意的是,运行此模块时,不要使用system以及更高的权限(如果使用这些权限运行此模块,可能无法连接用户屏幕),应尽量以指定用户权限使用此模块。默认为只读模式,只能查看用户的桌面。单击界面下方的第二个图标,即可进入操作模式。

6.文件管理模块

图形化操作:右键选择 “explore”--“file browser”
beacon命令行 :cd 、ls、download(下载文件)、upload(上传文件)、execute(执行文件)、mv、mkdir、delete。

文件管理模块有时候会因为权限过高或者过低而无法浏览目标文件。切换目录、执行文件等动作,本质上都是beacon在执行命令,所以在下一次心跳才有数据返回。基本操作都可以图形化界面中完成。

文件管理模块正常运行的结果:

选中一个可执行文件,右键会出现“execute”选项,选择该选项,即可带参数执行。

7.net view 命令

图形化操作:右键,选择“explore”--“net view”选项
beacon命令行:net view <DOMAIN>

执行net view 命令,会显示指定计算机共享的域、计算机和资源的列表。在cs主界面选择一个beacon,进入交互模式,输入“net view”。

net computers:通过查询域控制器上的计算机账户列表来查找目标。
net dclist:列出域控制器
net domain_trusts:列出域信任列表
net group:枚举自身所在域控制器中的组。“net group \\target” 命令用于指定域控制器。“net group \\target<group name>”命令用于指定组名,以获取域控制器中指定组的用户列表。
net localgroup:枚举当前系统中的本地组
net logons:列出登陆的用户
net sessions:列出会话
net share:列出共享的目录和文件
net user:列出用户
net time:显示时间

8.端口扫描模块

图形化操作:右键选择“explore”--“port scan”
beacon命令行:portscan [targets][ports][arp|icmp|none][max connection]

端口扫描界面:

图形界面不能自定义扫描范围,但是命令行可以

192.168.1.0-192.168.1.254;192.168.1.0/24,自定义的端口范围用逗号分隔。

端口扫描界面支持两种扫描方式。如果选择“arp”选项,就使用ARP协议来探测目标是否存活,“icmp”则是ICMP协议弹出。“none”则默认都存活。

由于portscan采用的异步扫描,可以使用max sockets参数限制连接数。

9.进程列表模块

图形化操作:单击右键,在弹出的快捷菜单中选择“explore”--“process List”选项
beacon命令行:ps查看进程 kill杀死进程

进程列表就是通常说的任务管理器,可以显示进程的id、进程的父id、进程名、平台架构、会话及用户身份。当beacon以第权限运行时,某些进程的用户身份将无法显示。

下图以system权限运行。可以选中进程点击kill结束进程,也可以在beacon命令行环境下使用kill pid 命令结束进程。

10.screenshot命令

图形化操作:右键选择explore--screenshot 选项
beacon命令行:screenshot [pid]<x86|x64>[run time in seconds]

在cobalt strike主界面选择一个beacon,进入交互模式,执行“screenshot”命令,获得此刻目标主机当前用户的桌面截图,可选择“view”--“screenshots”选项查看截图

screenshot命令还支持定时截图,例如命令“ screenshot 2032 10”表示将 screenshot 命令注入PID为2032的进程空间,每10s截图一次,将截图传回团队服务器。

无法使用system权限进行以上操作。

11.log keystrokes模块

图形化操作:选择“process List”--“log keystrokes”
beacon命令行:keylogger[pid]<x86|x64>

log keystrokes模块用于将键盘记录注入进程,当目标主机使用键盘进行输入时,就会捕获输入的内容并回传团队服务器。

可以选择“view”--“log keystokes”选项查看键盘输入记录。

同样尽量使用普通用户权限进行操作,无法使用服务账号或system及以上权限操作。

12.inject命令

图形化操作:依次选择“process list”--“inject”选项
beacon命令行:inject[pid]<x86|x64>[listener]

将payload注入目标进程,可以回弹一个beacon。选择一个进程,单击“inject”按钮,将会弹出监听器选择界面。选择一个监听器,就会返回目标进程PID的beacon会话。系统进程的PID和beacon的PID是一样的,仅通过进程列表无法发现异常。

13.steal Token模块

图形化操作:依次选择“process List” --“Steal Token”
Beacon命令行:steal_token [pid]

steal token模块可以模拟指定用户身份运行进程的令牌。在域渗透测试中,若非在域控制器中发现以域管理员身份运行的进程,可以使用Steal Token模块获取域管理员权限,或者从管理员权限提升到system权限。可以使用rev2self命令将令牌还原。

输入命令:steal_token [pid] 就可以获得指定进程的令牌了。

14.Note模块

图形化操作:单击右键,选择“Sessions”--“Note”选项。
Beacon命令行:note [text]

使用Note模块可以给目标设置标记,单击确定后,标记就会在会话列表显示出来

15.exit命令

图形化操作:右键选择“sessions” -- “exit”
beacon命令行:exit

exit命令用于退出当前Beacon命令,相当于放弃这个会话的权限,一般用exit命令搭配remove模块来清除不需要的会话。

16.Remove模块

图形化操作:右键“Sessions”--“Remove”
不需要会话时清除。

17.shell命令

Beacon命令行:shell [command] [argument]

选择一个beacon。输入shell dir,即可调用目标系统中的cmd.exe

18.run命令

beacon命令行:run [program][argument]

run命令不直接调用cmd.exe,而是直接调用“能找到的程序”,也就是能找到的exe,例如“run cmd ipconfig” 在本质上和“shell ipconfig” 一样,但使用“run ipconfig”相当于直接调用system32中间的“ipconfig.exe”

19.execute命令

Beacon命令行:execute [program][arguments]

execute命令通常在后台运行且没有回显

20.powershell模块

Beacon命令行:powershell [commandlet][argments]

powershell 模块通过调用powershell.exe来执行命令

21.powerpick模块

Beacon命令行:powerpick [commandlet][arguments]

powerpick模块可以不通过调用powershell.exe来执行命令。

22.powershell-import 模块

Beacon命令行:powershell-import [/path/to/local/script.ps1]

powershell-import 模块可以直接将本地powershell脚本加载到目标系统的内存中,然后使用powershell执行所加载的脚本的方法。命令如下:

powershell-import /root/powerview.ps1
powershell Get-NetDomain

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注