Cobalt Strike4.0使用&&红队作战手册学习笔记


因为之前端午节总结Redis 相关的攻击手段,忽视了Windows 攻击redis,然后看文章发现有师傅使用到了Cobalt Strike, 一直打算学这个东西怎么用,趁机一起学了!

Cobalt Strike 攻击链:

title


安装步骤直接省略,有Java 环境就行了。

简单介绍

内容均来自互联网开源资料,请勿用于非法攻击行为!

这篇笔记大部分是学习QAX A-Team 翻译的Cobalt Strike 4.0 作战手册的内容。

Cobalt Strike 的 C/S 架构:

  • 客户端(Client GUI)
    • 团队成员使用的图形化界面
  • 服务器(Team Server)
    • 控制 - Team Server是Cobalt Strike中所有payload的主控制器,与victim的所有连接bind/reverse都由Team Server管理。
    • 日志记录 - Cobalt Strike中发生的所有事件 保存在logs文件夹
    • 信息搜集 - 收集在后渗透阶段发现的、或攻击者在目标系统上用于登录的所有凭据credentials
    • 自定义脚本 - cat teamserver可看到该文件是一个简单的bash脚本(可根据自己要求修改) 调用Metasploit RPC服务msfrpcd并启动服务器cobaltstrike.jar


Cobalt Strike 分布式行动: 分布式攻击行动的基本思想就是分解整个攻击链。


Cobalt Strike 工具条:

简单使用

中间有些内容我选择放一放,现在还有点难理解。这里的使用包括,Cobalt Strike Teamserver,上线,上线木马生成,Beacon,cna插件(Cobalt Strike 支持高度自定义,Github上也有许多优秀的开源插件),后渗透(部分),键盘记录,屏幕快照,文件浏览器,进程浏览器,Hash传递,信任凭据(简单概念),横向移动,端口扫描,主机发现,VNC,内网提权(简单了解),报告和日志,快捷键。

总之,都学的挺浅的,目的只是有个了解,初步了解Cobalt Strike的简单实用及其基本原理。

环境:

TeamServer:Kali Linux 192.168.118.129

可视化客户端:Mac OS

上线测试机器:Windows 7

网络:NAT

常规使用步骤:

  • (可选步骤)选取C2域名
  • (可选步骤)扩展Team Server - 选取或自定义一个C2通信配置文件Malleable C2 profile 可设置有效的SSL证书等
  • (可选步骤)扩展Client功能 - 使用AggressorScripts修改或扩展Cobalt Strike 3.* 的客户端功能
  • 启动团队服务器Team Server
  • Client 登录Team Server
  • 启动监听器Listener
  • 生成payload
  • (可选步骤)对payload进行免杀 尽量避免被victim的杀毒软件报毒
  • 使用任意途径以实现victim主机执行payload
  • 对victim主机所在网络进行后渗透操作

如果能正常连接到话,就会让你确认。如果密码错了,server 端会给出错误原因。

  • 正常连上(登录)Cobalt Strike

  • 简单制作一个Windows 下的exe 上线木马来进行相关功能的学习,测试。

选择好监听器。然后我来手动将木马托人一个 Windows 7 机器(😂

被杀咯,所以 免杀 是一门大工程! (这里👴直接手动把360给卸载/ 添加信任,达到免杀 😂。👴懒得去卸载,直接把360退了。

  • Windows 7 成功上线Cobalt Strike

  • 点击右键,选择 interact 进行beacon 交互会话

Beacon 是 Cobalt Strike 用于模拟高级 威胁者的 payload。在这里,你将看到每个 Beacon 的外网 IP 地址、内网 IP 地址、该 Beacon 的出口 监听器、此 Beacon 最后一次回连的时间,以及其他信息。每一行最左边是一个图标,用于说明被害目 标的操作系统。如果此图标是红色的、并且带有闪电,那么说明此 Beacon 运行在管理员权限的进程 中。一个褪色的图标意味着此 Beacon 会话被要求离开并且它接受了此命令。

ps 查看进程…… 我也就只是试试,结果看到了一个 ZhuDongFangYu.exe ??? 防御什么的哈哈

那个红色闪电标表示此目标具有一个与之通信的 Cobalt Strike Beacon 会话。

  • Cobalt Strike Pivot 图

防火墙图标代表你 Beacon payload 的流量出口点。绿色虚线表示使用了 HTTP 或 HTTPS 连接出网。 黄色虚线表示使用 DNS 协议出网。


  • Cobalt Strike 基础设施建设

任何行动的第一步都是建立基础设施。就 Cobalt Strike 而言,基础设施由一个或多个团队服务器、重定向器以及指向你的团队服务器和重定向器的 DNS 记录组成。一旦团队服务器启动并运行,你将需要 连接到它并将其配置为接收来自受害系统的连接。监听器就是 Cobalt Strike 中用来执行这种任务的机制。 一个监听器既是一个 payload 的配置信息,同时又是 Cobalt Strike 起一个服务器来接收来自这个 payload 的连接的指示。一个监听器由用户定义的名称、payload 类型和几个特定于 payload 的选项组 成。

Cobalt Strike 4.0 监听器新增了 bindto 和 profile 字段

  • Beacon

Beacon 是 Cobalt Strike 的 payload,用于建模高级攻击者。使用 Beacon 来通过 HTTP,HTTPS 或 DNS 出口网络。你也可以 通过控制经由命名管道和 TCP sockets 的对等(peer-to-peer)Beacon 从而限制出口网络,只允许部 分主机直接回连。

Beacon 很灵活,支持异步通信模式和交互式通信模式。异步通信效率缓慢:Beacon 会回连团队服务 器、下载其任务,然后休眠。交互式通信是实时发生的。

  • HTTP / HTTPS Beacon

HTTP Host(Stager) 字段控制 HTTP Beacon 的 HTTP Stager 的主机。仅当你将此 payload 与需要显 式 stager 的攻击配对时,才使用此值。 通过Profile字段,你可以选择一个 C2 拓展文件变体。通过一个 C2 文件变体,你可以在一个文件中 指定多个配置文件的变量。使用变体文件之后,你设置的每个 HTTP 或 HTTPS 监听器会有不同的网络 流量指标。

HTTP Port(C2) 字段设置你的 HTTP Beacon 回连的端口。

HTTP Port(Bind) 字段指定你的 HTTP Beacon payload web 服务器绑定的端口。如果你要设置端口弯曲重定向器(例如,接受来自 80 或 443 端口的连接但将连接路由到团队服务器开在另一个端口上的连接,这样的重定向器),那么这些选 项会很有用。 如果 HTTP Host Header 值被指定了,会影响你的 HTTP stagers,并通过你的 HTTP 通信。这个选项 使得通过 Cobalt Strike 利用域名前置变得更加容易。 点击 HTTP Proxy 字段旁边的 ... 按钮来为此 payload 指定一个显式的代理配置。

  • Payload Staging(分阶段传输Payload

在很多攻击框架的 设计中,解耦了攻击和攻击执行的内容。payload 就是攻击执行的内容。

payload 通常被分为两部分: payload stage 和 payload stager。stager 是一个小程序,通常是手工优化的汇编指令,用于下载一个 payload stage、把它注入内存,然后对其传达执行命令。这个过程被称为 staging(分阶段)。

staging(分阶段)过程在一些攻击行动中是必要的。很多攻击中对于能加载进内存并在成功漏洞利用 后执行的数据大小存在严格限制。这会极大地限制你的后渗透选择,除非你分阶段传送你的后渗透 payload。

在 Cobalt Strike 4.0 及以后的版本中,后渗透和横向移动的行为避开了 stager 并选择去尽可能的投递 一个完整的 payload。如果你禁用了 payload staging(分阶段),那么除非你准备做后渗透那么你 应该不会注意到此变动。

  • 重定向器( 重要!

C2 Redirectors,就是在现有的 C2 上增加一个中转服务器,这个中转服务器起到功能和流量分离 的作用,C2 流量可以被中转到不同战术意义的服务器,比如打完就走的短期 C2、需要长期控制 驻留的 C2 和邮件钓鱼服务器等。

image-20200628221116133

这个 C2 重定向器相当于位于团队服务器这个控制端和失陷主机之间的中转跳板外界只能看到 重定向器(跳板),一旦重定向器暴露可以被随时抛弃,除非重定向器被反制,否则很难追踪到 背后真正的控制者。

🐂🍺 的技术!!! Orz!!!

socat 语法:

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

: 将80端口的所有连接转发到位于 192.168.12.100 的团队服务器上

Host 字段设置 重定向器。

  • DNS Beacon

image-20200628222854298

  • SMB Beacon

SMB Beacon 使用命名管道(Pipe)通过一个父 Beacon 进行通信。这种对等通信对同一台主机上的 Beacon 和 跨网络的 Beacon 都有效。Windows 将命名管道通信封装在 SMB 协议中。因此得名 SMB Beacon。

  • 链接和取消链接
link [host] [pipe]
unlink [host] [pipe] [session PID]

要销毁一个 Beacon 链接,在父会话或子会话中使用 unlink [ip address] [session PID] 。这个 [session PID] 参数是要取消链接的 Beacon 的进程 ID。该值用于当有多个子 Beacon 时,指定一个特 定的 Beacon 来断开链接。 当你对一个 SMB Beacon 取消了链接,它不会离开并消失。相反,它进入一种等待其他 Beacon 连接 的状态。你可以使用 link 命令来从将来的另一个 Beacon 恢复对 SMB Beacon 的控制。

  • TCP Beacon
  • 外置 C2

外置 C2 是一种规范,允许第三方程序充当 Cobalt Strike 的 Beacon payload 的通信层。这些第三方程 序连接到 Cobalt Strike 来阅读预定使用的帧,并使用以此种方式控制的 payload 的输出写帧。

外置 C2 接口有两个选项。 Port(Bind) 指定外置 C2 服务器等待连接的端口。勾选 Bind to localhost only 以使外置 C2 服务器仅本地主机。 外置 C2 监听器与其他 Cobalt Strike 监听器不同。这个监听端口其实是一个数据接收端口,没有相关的 其他监听器的功能,所以不能用来发一些后渗透指令过去。

https://www.cobaltstrike.com/help-externalc2


  • 基础设施整合


  • Payload Generator

Windows DLL(32-bit)是一个 x86 的 Windows DLL。 Windows DLL(64-bit)是一个 x64 的 Windows DLL。这个 DLL 会派生一个 32 位的进程,并且将你 的监听器迁移至其上。这两个 DLL 选项都会导出一个开始功能,此功能与 rundll32.exe 相兼容。使用 rundll32.exe 来从命令行加载你的 DLL。

rundll32 foo.dll,Start

后渗透

交互式Beacon ,设置 sleep 0

  • Beacon 菜单

Access 子菜单包含对凭据的操作和提权在内的一些选项。

image-20200629142118432

Explore 子菜单包含信息探测和与目标系统交互的一些选项。

通过 Pivoting 子菜单你可以通过一个 Beacon 来配置工具来搭建流量隧道。

通过 Session 菜单你可以管理当前 Beacon 会话。

要使得 Beacon 每秒都多次连接到你,使用 sleep 0 命令。这就是「交互式模式」。这种模式下命令 会立即执行。在你的隧道流量通过它之前你必须使得你的 Beacon 处于交互模式下。一些 Beacon 命令 (如 browerpivot 、 desktop 等)会自动的使 Beacon 在下次连接到你时处于交互式模式下。

  • Beacon 运行命令

Beacon 的 shell 命令会对 Beacon 创建任务来通过受害主机的 cmd.exe 来执行命令。当命令完成 时,Beacon 会将输出展示给你。 使用 run 命令来不使用 cmd.exe 执行命令。 run 命令会将输出发送给你。 execute 命令会在后台运 行程序,但不捕获输出。 使用 powershell 命令来在受害主机上使用 PowerShell 来执行命令。使用 powerpick 命令不使用 powershell.exe 来执行 PowerShell cmdlet。这个命令依赖于由 Lee Christensen 开发的非托管 PowerShell 技术。 powershell 和 powerpick 命令会使用你的当前令牌( token )。 psinject 命令会将非托管的 PowerShell 注入到一个特定的进程中并从此位置运行你的 cmdlet

image-20200629143503709

  • 会话传递

主要是注入 shellcode 和 dll 到进程

  • 备用父进程
  • 进程伪造参数
  • 文件浏览器

Beacon -> Explore -> File Browser

image-20200629164120487

  • 键盘记录 和 屏幕截图

image-20200629165419817

个人感觉相对于MSF上都键盘监控和屏幕截图,Cobalt Strike 的延迟有点大。

image-20200629165456512

  • Windows 注册表

  • 进程浏览器

image-20200629203644465

其中,Beacon 所在都进程会被黄色高亮。

  • VNC

在Beacon 里面可以用 desktop 命令开启VNC,也可以 Beacon -> Explore -> Desktop(VNC)。

image-20200629205515789

VNC 下面的几个图标的意思:

image-20200629205158733


  • 提权

elevate 来列出在Cobalt Strike 中注册的权限提升漏洞。或者 Beacon -> Access -> Elevate。或者runasadmin

运行 runasadmin [exploit] [command+agrs] 来尝试在提权的临时环境中运行特定的命令。

译者注:只是在提权的临时环境中运行一次命令,不直接把当前会话提升权限。这个过程其实就 是[启动一个新进程]→[提权进程]→[执行命令]→[退出进程]。

image-20200629211452230

image-20200629214644028

image-20200629214757807

先执行uac-token-duplication 然后 再执行 svc-exe。过一会儿, 就可以看到*SYSTEM 用户上线了。


  • 使用已知凭证提权

runas / spawnas

使用这两个命令时,请注意,SID 不是 500 的账号的凭据会派生一个中等完整性上下文中的 payload。 你将需要使用 Bypass UAC 来提权至一个高完整性上下文。

  • 获取SYSTEM 账号

getsystem 命令来模拟一个 SYSTEM 账号的令牌。此访问等级可以允许你执行管理员用户无法执 行的特权操作。 另一种获取 SYSTEM 权限的方法是创建一个运行 payload 的服务。 elevate sve-exe [监听器] 命令 可以实现此目的。此命令会在目标磁盘上落地一个运行 payload 的可执行文件、创建一个服务来运行此 exe,承担对 payload 的控制,然后清理服务和可执行文件。

  • UAC Bypass

UAC 机制和 Linux 下的 sudo 机制类似,当用户需要执行一些特定的命令时,会询问是否需要提权。

image-20200629222226588

run whoami /groupsnet localgroup administrators 可以列出当前本地管理员组成员。

其他UAC Bypass 可能是以后要深入学习的地方,这里不做太多深入。(懒

  • 特权

getprivs


  • Mimikatz ( 内网利器!)

一些 mimikatz 命令必须以 SYSTEM 身份运行才能运行。在命令前面加上 强制将 mimikatz 提升到 SYSTEM,然后再运行命令。例如 mimikatz !lsa::cache 将恢复系统缓存的加盐密码哈希。

有时你可能需要使用 Beacon 当前的访问令牌运行 mimikatz 命令。在命令前加上 @ 来强制 mimikatz 模拟 Beacon 的当前访问令牌。比如, [email protected]::dcsync 会在 mimikatz 中使用 Beacon 的当前进程令牌来运行 dsync 命令。

  • 获取凭证和哈希

hashdump

logonpasswords 命令会使用 mimikatz 来恢复登录过当前系统的用户的明文密码和哈希。

logonpasswords 命令等同于选项中的 [beacon] → Access → Run Mimikatz 。

image-20200629224717090

关于 mimikatz 和 hash 获取也是一个大点,这里知道点概念,以后再深入。

  • 端口扫描

Beacon 有一个内置的端口扫描工具。使用 portscan [targets] [ports] [discovery method] 来 启动端口扫描任务。可以指定以逗号分隔的目标范围列表,端口亦是如此。比如,portscan 172.16.48.0/24 1-1024,8080 会扫描从 172.16.48.0 到 172.16.48.255 主机的1到1024和8080端 口。 有三种目标发现选项。 arp 方法使用 ARP 请求来发现一个主机是否存活。 icmp 方法发送一个 ICMP echo 请求来检查一个目标是否存活。 none 选项让端口扫描工具假设所有的主机都是存活的。

image-20200629225841810

  • 网络和主机枚举

    查找域控:net dclist

net computers 命令通过在一个域控上查询电脑账号组来查找目标。

更多命令:help net


  • 信任关系 ( 非常重要

Windows 单点登录机制的核心是访问令牌。当一个用户登入到一个 Windows 主机时,就会生成一个访 问令牌。此令牌包含关于用户及其权限的信息。访问令牌还包含需要对当前用户进行身份验证到网络上 的另一个系统的信息。模拟或生成一个令牌,Windows 会使用它的信息来为你身份验证到一个网络资 源。

使用 steal_token [pross id] 来模拟一个现存进程的令牌。

使用 ps 命令查看哪些进程正在运行。 使用 getuid 命令会打印你的当前令牌。使用 rev2self 来恢复至你的原始令牌。 如果你知道一个用户的凭据,使用 make_token [DOMNAIN\user] [password] 来生成一个传递这些 凭据的令牌。

这个令牌是你当前令牌的复制,带有修改的单点登录信息。它会展示你当前的用户名,这 是预期的行为。

使用 mimikatz 来使用 Beacon 传递哈希。Beacon 命令 pth [DOMAIN\user] [ntlm hash] 会创建和 模拟一个访问令牌来传递特定的哈希。 Beacon 的制作令牌对话框( [beacon] → Access → Make Token )是这些命令的前端。它将显示凭 据模型的内容,并使用正确的命令将选定的凭据项转化为访问令牌。

  • Kerberos 票据

使用 kerberos_ticket_use [/path/to/ticket] 来将 Kerberos 票据注入当前会话。这将允许 Beacon 与远程系统使用此票据的权限进行交互。可以通过由 mimikatz 2.0 生成的黄金票据来进行此操 作。 使用 kerberos_ticket_purge 来清除任何与你的会话相关联的 Kerberos 票据。


  • 横向渗透非常重要!!!

一旦你有了域管理员或者是目标机器上的本地管理员域用户的令牌,你可以通过滥用这种信任关系来控 制目标。Cobalt Strike 的 Beacon 内置有一些横向移动的选项。 输入 jump 来列出 Cobalt Strike 中注册的横向移动的选项。运行 jump [module] [target] [listener] 来尝试在远程目标上运行一个 payload。

image-20200629231221024

横向移动是一个领域,就类似于特权提升,在此领域中一些攻击呈现出自然的在远程目标上派生会话的 原语集。一些攻击仅仅给一个可执行原语。 jump 和 remote-exec 命令之间的分离给了你自主决定如 何去武器化仅执行原语的灵活性。 Aggressor Script 提供了一个 API 来给 jump 和 remote-exec 命令添加新的模块。你可以通过查看 Aggressor Script 文档(特别是 Beacon 章节)来获取更多信息。

image-20200629231855899

点击Lunch 即可在Beacon 控制台查看结果,因为我这里没环境,jump 的目标Windows10 也下线了,所以这里失败了。

横向移动,是一个大点,以后好好深入研究。


(中间关于:

  • Browser Pivoting
  • Pivoting ( 将一个受害机器转为其他攻击和工具的跳板
  • SSH 会话
  • C2 拓展文件
  • 可拓展 PE ,进程注入和后渗透

的内容,就先放一下。等后面深入了,再来研究。感觉要深入学习,Python 和 Windows 核心编程。


报告和日志

  • 日志

日志位于Cobalt Strike 的 Teamserver 上的 logs/目录下,根据时间来命令的文件夹,里面有详细的events.log, *..Beacon.log , 屏幕截图和键盘记录等。

  • 报告

报告有:活动报告,记录了所有后渗透的活动。主机报告, 汇总Cobalt Strike 收集的主机信息,服务,凭证,和会话。侵害指标(IoC)报告,该报告类似于威胁情报报告中的「侵害指标」(IoC)附录。内容包括对你的 C2 拓展文件的分析、使用 的域名以及你上传的文件的 MD5 哈希。

会话报告,该报告逐会话记录了指标和活动。该报告包括:每个会话用于回连到你的通信路径,会话期间落地到磁 盘的文件的 MD5 哈希值,杂项指标(例如服务名)以及后渗透活动的时间线。该报告是帮助网络防御 团队了解红队的所有活动并将他们的监控设备获取的信息与你的红队活动相匹配的出色工具。

社会工程学报告,TTPs(战术,技术和程序)报告。


键盘快捷键

image-20200630091242809

相关资料

https://xz.aliyun.com/t/3975#toc-1

https://blog.ateam.qianxin.com/CobaltStrike4.0%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C_%E4%B8%AD%E6%96%87%E7%BF%BB%E8%AF%91.pdf ( 把这个学会。基本操作就会了。 基本上都是这上面的内容,只不过我喜欢自己写一个笔记,自己能快速定位到重点。

https://joner11234.github.io/2020/04/27/Cobalt-Strike%E4%B8%BB%E6%9C%BA%E4%B8%8A%E7%BA%BF%E5%8F%8A%E5%85%B6%E4%BB%96%E5%8A%9F%E8%83%BD%E6%B5%8B%E8%AF%95/ 主机上线及其他功能测试

https://blog.cobaltstrike.com/2017/06/23/opsec-considerations-for-beacon-commands/

https://www.cobaltstrike.com/help-covert-vpn CS VPN

http://xnianq.cn/2018/10/16/%E5%9F%9F%E6%B8%97%E9%80%8F%E4%B9%8B%E6%A8%AA%E5%90%91%E7%A7%BB%E5%8A%A8/ 域渗透之横向移动

http://blog.leanote.com/post/snowming/62ec1132a2c9 一篇非常好的文章,👍

https://www.qianxin.com/product/detail/pid/52 EDR 介绍。 端点检测与响应(Endpoint Detection & Response,EDR)

http://blog.leanote.com/post/snowming/50448511de58 外部C2


文章作者: M0nk3y
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 M0nk3y !
评论
 上一篇
Windows下Redis 未授权访问的利用总结 Windows下Redis 未授权访问的利用总结
学了两天的Cobalt Strike 4.0 的基础使用和术语,继续把之前漏掉的Windows 下利用Redis 学习总结一下。 前言太难了,Windows Server 2008 R2 我这里(VMware Fusion)没法用VMwar
2020-06-30
下一篇 
Redis 未授权访问漏洞&&主从复制RCE Redis 未授权访问漏洞&&主从复制RCE
实战环境下,感觉Redis 未授权非常常见,而我之前只知道怎么利用别人的写好的工具去解CTF,没有去研究过原理,遂在端午节来研究一波! Redis 介绍Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、
2020-06-27