CS工具使用

https://www.jianshu.com/u/23b447f36f98

1、如何搭建自己的渗透测试环境

0x00 前言

第一次接触CS的时候,是有人在群里发了一个CS最新版的安装包,当时第一反应,CS ???

作为小白的我,在角落里看着群里的大佬们讨论的十分起劲儿,而我这个萌新对于他们所讨论的东西却听都没听过。

于是乎,新的一期学习笔记开整,本期学习笔记如题:《Cobalt Strike学习笔记》,简称《CS学习笔记》,这期笔记预计会更新28篇文章,学习资源来自B站视频,视频链接在文章底部。

由于这只是学习笔记,因此不会像教程一样详尽,一些我个人已经了解的东西或许不会记在笔记里,因此把笔记当做教程阅读是不合适的。

0x01 CS是什么?

Cobalt Strike是一款渗透测试神器,常被业界人称为CS神器。Cobalt Strike已经不再使用MSF而是作为单独的平台使用,它分为客户端与服务端,服务端是一个,客户端可以有多个,可被团队进行分布式协团操作。

Cobalt Strike集成了端口转发、扫描多模式端口Listener、Windows exe程序生成、Windows dll动态链接库生成、java程序生成、office宏代码生成,包括站点克隆获取浏览器的相关信息等。

早期版本Cobalt Srtike依赖Metasploit框架,而现在Cobalt Strike已经不再使用MSF而是作为单独的平台使用,它分为客户端(Client)与服务端(Teamserver),服务端是一个,客户端可以有多个,团队可进行分布式协团操作。

这个工具的社区版是大家熟知的Armitage(一个MSF的图形化界面工具),而Cobalt Strike大家可以理解其为Armitage的商业版。

0x02 CS的发展

  • Armitage [2010-2012]

    Armitage是一个红队协作攻击管理工具,它以图形化方式实现了Metasploit框架的自动化攻击。Armitage采用Java构建,拥有跨平台特性。

  • Cobalt Strike 1.x [2012-2014]

    Cobalt Strike 增强了Metasploit Framework在执行目标攻击和渗透攻击的能力。

  • Cobalt Strike 2.x [2014-?]

    Cobalt Strike 2是应模拟黑客攻击的市场需求而出现的,Cobalt Strike 2是以malleable C2技术的需求为定位的,这个技术使Cobalt Strike的能力更强了一些。

  • Cobalt Strike 3.x [2015-?]

    Cobalt Strike 3的攻击和防御都不用在Metasploit Framework平台(界面)下进行。

0x03 使用到的工具

  • Cobalt Strike

  • Kali

  • Metasploit Framework

  • PowerSploit

  • PowerTools

  • Veil Evasion Framework

2、如何连接团队服务器

0x00 前言

上一篇说了一些有的没的,现在来正式学习Cobalt Strike。

Cobalt Strike使用C/S架构,Cobalt Strike的客户端连接到团队服务器,团队服务器连接到目标,也就是说Cobalt Strike的客户端不与目标服务器进行交互,那么Cobalt Strike的客户端如何连接到团队服务器就是本文所学习的东西。

0x01 准备工作

Cobalt Strike的客户端想连接到团队服务器需要知道三个信息:

  • 团队服务器的外部IP地址

  • 团队服务器的连接密码

  • (此项可选)决定Malleable C2工具的哪一个用户配置文件被用于团队服务器

知道这些信息后,就可以使用脚本开启团队服务器了,值得注意的是Cobalt Strike团队服务器只能运行在Linux环境下。

0x02 开启团队服务器

开启团队服务器命令一般如下所示:

./teamserver your_ip your_passowrd [config_file]

服务端开启后,就可以开启客户端进行连接了

0x03 连接到团队服务器

在Linux下,直接运行start.sh脚本文件,输入团队服务器的IP、密码和自己的用户名进行连接

点击Connect连接后,会有个提示信息,如果承认提示信息中的哈希值就是所要连接团队服务器的哈希值就点击Yes,随后即可打开CS客户端界面

在Windows下的连接方法也基本一致,直接双击start.bat文件,输入IP、密码、用户名,点击Connect即可

在连接后,团队之间就可以通过客户端进行沟通,信息共享

Cobalt Strike不是用来设计指导在一个团队服务器下进行工作的,而是被设计成在一次行动中使用多个团队服务器。

这样设计的目的主要在于运行安全,如果一个团队服务器停止运行了,也不会导致整个行动的失败,所以接下来看看如何连接到多个团队服务器。

0x05 连接到多个团队服务器

Cobalt Strike连接到多个团队服务器也很简单,直接点击左上角的加号,输入其他团队服务器的信息后,即可连接

3、如何进行分布操作

0x00 最基本的团队服务模型

这里介绍最基本的团队服务模型,具体由三个服务器构成,具体如下所示:

  • 临时服务器(Staging Servers)

    临时服务器介于持久服务器和后渗透服务器之间,它的作用主要是方便在短时间内对目标系统进行访问。

    它也是最开始用于传递payload、获取初始权限的服务器,它承担初始的权限提升和下载持久性程序的功能,因此这个服务器有较高暴露风险。

  • 持久服务器(Long Haul Servers)

    持久服务器的作用是保持对目标网络的长期访问,所以持久服务器会以较低的频率与目标保持通信。

  • 后渗透服务器(Post-Exploitation Servers)

    主要进行后渗透及横向移动的相关任务,比如对目标进行交互式访问

0x01 可伸缩红队操作模型

可伸缩红队操作模型(Scaling Red Operations)分为两个层次,第一层次是针对一个目标网络的目标单元;第二层次是针对多个目标网络的权限管理单元。

目标单元的工作:

  • 负责具体目标或行动的对象

  • 获得访问权限、后渗透、横向移动

  • 维护本地基础设施

访问管理单元的工作:

  • 保持所有目标网络的访问权限

  • 获取访问权限并接收来自单元的访问

  • 根据需要传递对目标单元的访问

  • 为持续回调保持全局基础环境

0x02 团队角色

  • 开始渗透人员

    主要任务是进入目标系统,并扩大立足点

  • 后渗透人员

    主要任务是对目标系统进行数据挖掘、对用户进行监控,收集目标系统的密钥、日志等敏感信息

  • 本地通道管理人员

    主要任务有建立基础设施、保持shell的持久性、管理回调、传递全局访问管理单元之间的会话

0x03 日志记录

Cobalt Strike的日志文件在团队服务器下的运行目录中的logs文件夹内,其中有些日志文件名例如beacon_11309.log,这里的11309就是beacon会话的ID。

按键的日志在keystrokes文件夹内,截屏的日志在screenshots文件夹内,截屏的日志名称一般如screen_015321_4826.jpg类似,其中015321表示时间(1点53分21秒),4826表示ID

4、快速登陆和生成会话报告

0x00 介绍

Cobalt Strike生成报告的目的在于培训或帮助蓝队,在Reporting菜单栏中就可以生成报告,关于生成的报告有以下特点:

  • 输出格式为PDF或者Word格式

  • 可以输出自定义报告并且更改图标(Cobalt Strike --> Preferences -->Reporting)

  • 可以合并多个团队服务器的报告,并可以对不同报告里的时间进行校正

0x01 导出报告类型

  • 活动报告(Activity Report) 此报告中提供了红队活动的时间表,记录了每个后渗透活动。

  • 主机报告(Hosts Report) 此报告中汇总了Cobalt Strike收集的主机信息,凭据、服务和会话也会在此报告中。

  • 侵害指标报告(Indicators of Compromise) 此报告中包括对C2拓展文件的分析、使用的域名及上传文件的MD5哈希。

  • 会话报告(Sessions Report) 此报告中记录了指标和活动,包括每个会话回连到自己的通信路径、后渗透活动的时间线等。

  • 社工报告(Social Engineering Report) 此报告中记录了每一轮网络钓鱼的电子邮件、谁点击以及从每个点击用户那里收集的信息。该报告还显示了Cobalt Strike的System profiler发现的应用程序。

  • 战术、技巧和程序报告(Tactics,Techniques,and Procedures) 此报告将自己的Cobalt Strike行动映射到MITRE的ATT&CK矩阵中的战术,具体可参考https://attack.mitre.org/

5、如何建立Payload处理器

这一小节学起来感觉有些吃力,里面很多概念理解的不是很清楚,如果有大佬看到描述错误的地方欢迎留言指正,避免误导他人。

再次声明,这只是我的个人学习笔记,不要当成教程去看,建议想学习CS的小伙伴可以看看A-TEAM的中文手册或者网上的一些视频教程。

0x00 监听器管理

  • 什么是监听器

    顾名思义,监听器就是等待被入侵系统连接自己的一个服务。

  • 监听器的作用

    主要是为了接受payload回传的各类数据,类似于MSF中handler的作用。

    比如payload在目标机器执行以后,就会回连到监听器然后下载执行真正的shellcode代码。

一旦监听器建立起来,团队成员只需要知道这个监听器的名称即可,不用关心监听器背后的基础环境,接下来将深入了解如何准确配置监听器。

一个监听器由用户定义的名称、payload 类型和几个特定于 payload 的选项组成。

监听器的名字一般由以下结构组成:

Operating System/Payload/Stager

例如:

windows/beacon_http/reverse_http

0x01 什么是传输器

攻击载荷payload就是攻击执行的内容。攻击载荷通常被分为两部分:传输器stager 和传输体stage

传输器stager是一个小程序,用于连接、下载传输体stage,并插入到内存中。

我个人理解为:攻击载荷里真正用于攻击的代码是在传输体里。

所以为什么要有传输体?直接把攻击载荷插入到内存中不更方便快捷、更香么,搞得又是传输器又是传输体的。

需要传输体是因为在很多攻击中对于能加载进内存,并在成功漏洞利用后执行的数据大小存在严格限制。这就导致在攻击成功时,很难嵌入额外的攻击载荷,正是因为这些限制,才使得传输器变得有必要了。

0x02 创建监听器

在CS客户端中打开 Cobalt Strike —》Listeners,之后点击Add,此时弹出New Listener窗口,在填写监听器的相关信息之前,需要先来了解监听器有哪些类型。

Cobalt Strike有两种类型的监听器:

  • Beacon

    Beacon直译过来就是灯塔、信标、照亮指引的意思,Beacon是较为隐蔽的后渗透代理,笔者个人理解Beacon类型的监听器应该是平时比较常用的。Beacon监听器的名称例如:

    windows/beacon_http/reverse_http
  • Foreign

    Foreign直译就是外部的,这里可以理解成对外监听器,这种类型的监听器主要作用是给其他的Payload提供别名,比如Metasploit 框架里的Payload,笔者个人理解Foreign监听器在一定程度上提高了CS的兼容性。对外监听器的名称例如:

    windows/foreign/reverse_https

0x03 Beacon是什么

  • Beacon是CS的Payload

  • Beacon有两种通信模式。一种是异步通信模式,这种模式通信效率缓慢,Beacon回连团队服务器、下载任务、然后休眠;另一种是交互式通信模式,这种模式的通信是实时发生的。

  • 通过HTTP、HTTPS和DNS出口网络

  • 使用SMB协议的时候是点对点通信

  • Beacon有很多的后渗透攻击模块和远程管理工具

0x04 Beacon的类型

  • HTTP 和 HTTPS Beacon

    HTTP和HTTPS Beacon也可以叫做Web Beacon。默认设置情况下,HTTP 和 HTTPS Beacon 通过 HTTP GET 请求来下载任务。这些 Beacon 通过 HTTP POST 请求传回数据。

    windows/beacon_http/reverse_http
    windows/beacon_https/reverse_https
  • DNS Beacon

    windows/beacon_dns/reverse_dns_txt
    windows/beacon_dns/reverse_http
  • SMB Beacon

    SMB Beacon也可以叫做pipe beacon

    windows/beacon_smb/bind_pipe

0x05 创建一个HTTP Beacon

点击 Cobalt Strike --> Listeners 打开监听器管理窗口,点击Add,输入监听器的名称、监听主机地址,因为这里是要创建一个HTTP Beacon,所以其他的默认就行,最后点击Save

此时可以测试一下刚才设置的监听器,点击Attack --> Web Drive-by --> Scripted Web Delivery(s) ,在弹出的窗口中选择刚才新添的Listener,因为我的靶机是64位的,所以我把Use x64 payload也给勾选上了,最后点击Launch

复制弹窗的命令,放到靶机中运行

此时,回到CS,就可以看到已经靶机上线了

0x06 重定向器

刚才创建了一个HTTP Beacon,接下来来看一下重定向器Redirectors

重定向器是一个位于CS团队服务器和目标网络之间的服务器,这个重定向器通俗的来说就是一个代理工具,或者说端口转发工具,担任CS服务器与目标服务器之间的跳板机角色,整体流量就像下面这样。

目标靶机 <-------->多个并列的重定向器<------>CS服务器

重定向器在平时的攻击或者防御的过程中起到很重要的作用,主要有以下两点:

  • 保护自己的CS服务器,避免目标发现自己的真实IP

  • 提高整体可靠性,因为可以设置多个重定向器,因此如果有个别重定向器停止工作了,整体上系统依旧是可以正常工作的

0x07 创建一个重定向器

这里就使用自己的内网环境作为测试了,首先理清自己的IP

CS服务器IP:192.168.175.129

目标靶机IP:192.168.175.130

重定向器IP:192.168.175.132、192.168.175.133

首先,需要先配置重定向器的端口转发,比如这里使用HTTP Beacon,就需要将重定向器的80端口流量全部转发到CS服务器上,使用socat的命令如下:

socat TCP4-LISTEN:80,fork TCP4:192.168.175.129:80

如果提示没有socat命令,安装一下即可。重定向器设置好之后,就新建一个HTTP Beacon,并把重定向器添加到HTTP Hosts主机列表中

此时可以测试一下重定向器是否正常工作,在CS中打开 View --> Web Log,之后浏览器访问CS服务器地址,也就是这里的192.168.175.129

可以看到CS是能够正常接收到流量的,说明重定向器已经配置OK了,此时按照上面创建一个HTTP Beacon的操作,创建一个HTTP Beacon,并在靶机中运行

当靶机上线的时候,观察靶机中的流量,可以看到与靶机连接的也是重定向器的IP

在CS中也可以看到上线主机的外部IP也是重定向器的IP,此时如果关闭一个重定向器,系统依旧可以正常工作。

0x08 HTTPS Beacon

HTTPS Beaocn和HTTP Beacon一样,使用了相同的Malleable C2配置文件,使用GET和POST的方式传输数据,不同点在于HTTPS使用了SSL,因此HTTPS Beacon就需要使用一个有效的SSL证书,具体如何配置可以参考:https://www.cobaltstrike.com/help-malleable-c2#validssl

Last updated

Was this helpful?