MSF简介和安装

Metasploit Framework(简称MSF)是一款开源漏洞利用工具,其中附带了数千个已知的软件漏洞利用模块,并还在持续更新。MSF的特点就是使用门槛极低,使用MSF我们即使完全不了解漏洞的原理和被入侵软件系统的技术架构,也能对软件系统进行渗透测试。此外,我们要知道MSF本身是一个可扩展的框架,我们实际使用的其实是这个框架下的漏洞利用模块,除了MSF自带的模块,我们也可以加载第三方模块或者自己开发模块。有关如何自己编写模块将在后续章节介绍。
官方网站:https://www.metasploit.com
Github:https://github.com/rapid7/metasploit-framework
MSF安装
Kali Linux中已经安装了MSF工具,我们直接使用即可。然而在实际渗透测试过程中,我们用于测试的Kali主机可能位于内网,而对于一些互联网上的网站进行渗透使用反弹Shell时需要公网IP,此时可能需要我们在云主机上安装MSF,不过自己安装MSF也非常简单,我们直接使用官方提供的安装脚本即可:
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && \
chmod 755 msfinstall && \
./msfinstall
运行上述命令后,应该就可以自动安装MSF了。
基本概念
MSF中有几种不同类型的模块,包括:
exploit:也就是安全领域我们常说的EXP,它是指对漏洞进行攻击的完整代码。Kali中,我们可以在/usr/share/metasploit-framework/modules/exploits目录找到MSF框架中内置的EXP模块,我们如果有兴趣可以阅读其中的代码了解漏洞的原理。
payload:即攻击载荷,其中包含攻击进入目标系统后在被攻击的系统中运行的恶意代码。kali中,我们可以在/usr/share/metasploit-framework/modules/payloads目录找到MSF框架中内置的payload模块。
auxiliary:MSF中指辅助模块,功能包括信息收集、扫描、漏洞验证等。注:读作[ɔɡˈzɪljəri],中文直译为“辅助的”。
encoder:编码器模块,用于对攻击载荷进行编码,以绕过入侵检测系统(IDS)等的拦截。
post:后渗透模块,后渗透是指渗透测试中成功入侵目标系统后,攻击者继续在内网中进行控制、收集信息、获取其它主机权限等活动。
我们在使用MSF进行渗透测试时,其实就是结合使用这些不同类型的模块来实现的。
使用MSF交互式控制台
注意这里建议直接使用root用户启动MSF(Kali中命令为sudo su),避免因为用户权限造成的一些问题。在终端中输入以下命令进入MSF的交互式命令行控制台:
msfconsole
稍等一会我们便可以进入MSF工具中,如下图所示。

如何更新MSF工具?如果你直接使用Kali Linux,MSF需要使用系统软件源更新;如果你是手动安装的MSF,可以使用msfupdate命令进行更新。
模块查找和使用
在MSF控制台中,我们可以使用命令查找、使用模块。
查找模块
search <模块名>
例如我们要搜索一下和MS17-010(永恒之蓝)这个漏洞相关的模块,我们可以执行search ms17_010,我们可以从返回的搜索结果列表中选择我们需要的模块。
使用模块
use <模块名>
例如我们要使用auxiliary/scanner/smb/smb_ms17_010这个模块,该模块用于探测目标主机是否存在MS17-010漏洞,我们执行use auxiliary/scanner/smb/smb_ms17_010即可。
查看和设置模块参数
使用use使用一个模块后,我们可以执行以下命令查看该模块可以设置的选项参数:
show options

图中是一个auxiliary模块,Name是参数名,Current Setting是当前值,Required是该参数是否为必选,Description是参数的介绍信息。
使用以下命令设置参数:
set <参数名> <参数值>
例如,我们执行set RHOSTS 192.168.1.221,设置RHOSTS这个参数。具体如何设置参数,可以参考参数的说明信息。
当设置完成后就可以执行模块了。执行模块比较简单,我们使用run命令即可:
run
对于exploit模块,经常是需要提供一个payload模块以供侵入漏洞后在远程执行恶意代码,设置payload和设置参数用法是一样的:
set payload <payload模块名>
掌握了这些用法,我们基本就可以使用MSF框架进行渗透测试了。