第一次亲密接触MSF

时间:2022-03-24 20:57:52

 

 

第一次亲密接触MSF

Metasploit Framework介绍

Metasploit是一款开源安全漏洞检测工具,附带数百个已知的软件漏洞,并保持频繁更新。被安全社区冠以“可以黑掉整个宇宙”之名的强大渗透测试框架。

 

 

 

专业术语

渗透攻击(Exploit),指由攻击者或渗透测试者利用一个系统、应用或服务中的安全漏洞,所进行的攻击行为。

攻击载荷(Payload),是我们期望目标系统在被渗透攻击之后去执行的代码。

Shellcode,是在渗透攻击是作为攻击载荷运行的一组机器指令,通常用汇编语言编写。

模块(Module),指Metasploit框架中所使用的一段软件代码组件,可用于发起渗透攻击或执行某些辅助攻击动作。

监听器(Listener),是Metasploit中用来等待网络连接的组件。

  

 

模块

 

模块分类

  auxiliary  encoders  exploits  nops  payloads  post

   模块是通过Metasploit框架所装载、集成并对外提供的最核心的渗透测试功能实现代码。分为辅助模块(Aux)、渗透攻击模块(Exploits)、后渗透攻击模块(Post)、攻击载荷模块(payloads)、编码器模块(Encoders)、空指令模块(Nops)。这些模块拥有非常清晰的结构和一个预定义好的接口,并可以组合支持信息收集、渗透攻击与后渗透攻击拓展。

 

辅助模块--auxiliary

执行信息收集、枚举、指纹探测、扫描等功能的辅助模块(没有payload的exploit模块)
在渗透信息搜集环节提供了大量的辅助模块支持,包括针对各种网络服务的扫描与查点、构建虚假服务收集登录密码、口令猜测等模块。此外,辅助模块中还包括一些无须加载
攻击载荷,同时往往不是取得目标系统远程控制权的渗透攻击,例如:拒绝服务攻击。

  

编码器模块--encoders

对payload进行加密,躲避AV检查的模块

攻击载荷与空指令模块组装完成一个指令序列后,在这段指令被渗透攻击模块加入邪恶数据缓冲区交由目标系统运行之前,Metasploit框架还需要完成一道非常重要的工序--
--编码。 编码模块的第一个使命是确保攻击载荷中不会出现渗透攻击过程中应加以避免的”坏字符“。 编码器第二个使命是对攻击载荷进行”免杀“处理,即逃避反病毒软件、IDS入侵检测系统和IPS入侵防御系统的检测与阻断。

  

 

渗透攻击模块--exploits

利用发现的安全漏洞或配置弱点对远程目标系统进行攻击,以植入和运行攻击载荷,从而获得对目标系统访问控制权的代码组件。metasploit框架中渗透攻击模块可以按照所
利用的安全漏洞所在的位置分为主动渗透攻击与被动渗透攻击两大类。 主动渗透攻击:所利用的安全漏洞位于网络服务端软件与服务端软件承载的上层应用程序之中,由于这些服务通常是在主机上开启一些监听端口并等待客户端连接,通过连接目
标系统网络服务,注入一些特殊构造的包含“邪恶”攻击数据的网络请求内容,触发安全漏洞,并使得远程服务进行执行“邪恶”数据中包含的攻击载荷,从而获取目标系统的控制
会话。针对网络服务端的主动渗透攻击属于传统的渗透攻击。还有web应用程序渗透攻击、SCADA工业控制系统服务渗透攻击。

  

 

空指令模块--nops

提高payload稳定性及维持大小

空指令(NOP)是一些对程序运行状态不会造成任何实质影响的空操作或无关操作指令,最典型的空指令就是空操作,在X86 CPU体系结构平台上的操作码是ox90. 在渗透攻击构造邪恶数据缓冲区时,常常要在真正要执行的Shellcode之前添加一段空指令区,这样当触发渗透攻击后跳转执行ShellCode时,有一个较大的安全着陆区,

从而避免受到内存地址随机化、返回地址计算偏差等原因造成的ShellCode执行失败,提高渗透攻击的可靠性。

  

 

攻击载荷模块--payloads  

攻击载荷是在渗透攻击成功后促使目标系统运行的一段植入代码,通常作用是为渗透攻击者打开在目标系统上的控制会话连接。在传统的渗透代码开发中,攻击载荷只是一段功
能简单的ShellCode代码,以汇编语言编制并转换为目标系统CPU体系结构支持的机器代码,在渗透攻击触发漏洞后,将程序执行流程劫持并跳转入这段机器代码中执行,从而
完成ShellCode中实现的单一功能。 metasploit攻击载荷模块分为独立(Single)、传输器(Stager)、传输体(Stage)三种类型。 独立攻击载荷是完全自包含的,可直接独立地植入目标系统进行执行,比如“windows/shell_bind_tcp"是适用于Windows操作系统平台,能够将Shell控制会话绑定在指定
TCP端口上的攻击载荷。在一些比较特殊情况下,可能会对攻击载荷的大小、运行条件有所限制,比如特定安全漏洞利用时可填充邪恶攻击缓冲区的可用空间很小、windows 7
等新型操作系统所引入的NX(堆栈不可执行)、DEP(数据执行保护)等安全防御机制,在这些场景情况下,Metasploit提供了传输器和传输体配对分阶段植入的技术,由渗透
攻击模块首先植入代码精悍短小且非常可靠的传输器载荷,然后在运行传输器载荷时进一步下载传输体载荷并执行。

  

 

后渗透模块--post

主要支持在渗透攻击取得目标系统远程控制权之后,在受控系统中进行各种各样的后渗透攻击动作,比如获取敏感信息,进一步括展,实施跳板攻击等。

  

 

 

基本使用

 

Metasploit三种用户接口(MSF终端、MSF命令行、Armitage)

 

Armitage:图形界面

 Metasploit框架中的armitage组件是一个完全交互式的图形化用户接口。

  

 

msfcli 使用接口,现在已经更新至 msfconsole -x

MSF终端以一种用户友好的模式来提供交互方式,用于访问软件所有的功能特性,而msfcli则主要考虑脚本处理和其他命令行工具的互操作性。最新版本:msfcli被整合进ms
fconsole的参数里。

  

例如:

老指令:      
msfcli multi/samba/usermap_scriptPAYLOAD=cmd/unix/bind_netcat RHOST=192.168.200.129E
新指令:       
msfconsole -x "use exploit/multi/samba/usermap_script; set RHOST 192.168.200.129; set PAYLOAD cmd/unix/bind_netcat;[set LHOST IP;] r
un"

  

 

msfconsole 使用接口

最流行的用户接口
几乎可以使用全部 msf 功能
控制台命令支持 TAB 自动补全
支持外部命令的执行(系统命令等)

  

启动前的准备

使用前先升级:msfupdate

 

启动msf

第一次亲密接触MSF

 

 在启动msf时使用的参数选项

第一次亲密接触MSF

 

通用选项:
    -E, --environment ENVIRONMENT    设置Rails环境,默认为RAIL_ENV环境变量或'生产'

数据库选项:
    -M, --migration-path DIRECTORY   指定包含其他数据库迁移的目录
    -n, --no-database                禁用数据库支持
    -y, --yaml PATH                  指定一个包含数据库设置的YAML文件

框架选项:
    -c FILE                          加载指定的配置文件
    -v, -V, --version                显示版本

模块选项:
        --defer-module-loads         除非明确询问,否则推迟模块加载
    -m, --module-path DIRECTORY      加载一个额外的模块路径

控制台选项:
    -a, --ask                        在退出Metasploit之前询问或接受'退出-y'
    -H, --history-file FILE          将命令历史记录保存到指定的文件
    -L, --real-readline              使用系统Readline库而不是RbReadline
    -o, --output FILE                输出到指定的文件
    -p, --plugin PLUGIN              在启动时加载插件
    -q, --quiet                      不要在启动时显示 banner 信息
    -r, --resource FILE              执行指定的资源文件( - 用于stdin)
    -x, --execute-command COMMAND    执行指定的控制台命令(使用;用于倍数)
    -h, --help                       显示此消息

 

 

MSF控制台命令

 

常用命令

banner   每次显示不同的小贴士
color 高亮显示模块名字
connect 连接指定ip指定端口上的服务(connect -h可以获取详细参数)
show show 显示给定类型的模块或所有模块(auxiliary / exploits / payloads / encoders / nops)
search 搜索指定关键字
---search name:mysql / platform:aix / type:aux / author:aaron / cve:2011 / 可多条件同时搜索
use 使用模块
show 在使用模块的情况下show显示(options / payload / targets / advanced / evasion / missing)
info 显示有关一个或多个模块的信息
back 返回从当前上下文返回
Check 检查模块能不能被利用,就是检查目标系统有没有这个漏洞(大部分模块不能执行这个命令)
exit 退出msf
set 设置参数
unset 取消设置的参数
setg  设置全局参数,所有模块有这个参数就已经被设置(只在本次启动msf使用有效)
unsetg 取消全局设置
save 保存当前设置的参数
Run 执行模块
exploit 执行模块
jobs 查看所有后台任务
kill 杀掉进程
load  加载其他插件
unload 卸载载入的插件
loadpath 加载某个目录的插件(一般用于使用自己编写模块)
Sessions 查看会话、切换会话
route 通过指定session路由流量
例子:route add 10.1.1.0 255.255.255.0 4

resource  配置流程
例子:msfconsole -r a.rc

a.rc里面的内容就是使用模块的配置

  

 

 

MSF数据库命令


没有进入msf前可以执行的关于数据库的命令
msfdb init 初始化数据库 msfdb reinit 删掉以前初始化的数据库,然后重新初始化数据库 msfdb delete 删掉现在的数据库 msfdb start 启动数据库 msfdb stop 关掉数据库
注意: MSF数据库有问题 可以重新初始化数据库 msfdb reinit 没必要重新安装MSF 另外msf自带数据库为postgresql



进入msf后可以执行的关于数据库的命令
db_status           查看连接数据库的状态
db_rebuild_cache 重建数据库缓存(重建的是msf各种模块的信息,一般用在初始化数据库后)
db_nmap 集成nmap工具,可以在msf里使用nmap,命令格式和使用nmap一样,结果保存到数据库
db_disconnect 断开与当前数据库的连接
db_connect 连接其它数据库
kali自带数据库的位置:--/usr/share/metasploit-framework/config/database.yml

db_import  数据库的导入
例子:db_import /root/bak.xml

注意:

  配合namp使用,生成xml文件,也可以导入到msf数据库

  例子:nmap -A 192.168.12.3 -oX nmap.xml

  db_import /root/namp.xml



db_export  数据库的导出
例子:db_export -f xml /root/bak.xml
hosts               查看数据库中所有主机信息
例子:hosts -c address,os_flavor
hosts -S Linux
host 查看指定ip的信息
例子:host 1.1.1.1

services 查看所有主机开放端口情况
例子:services -p 80
services -c info,name -p 1-1000
creds                查看所有破解的服务信息
vulns 查看所有测试出来的漏洞信息
loot 查看所有获取的hash值



注意:我们在启动msf时,会自动启动后台数据库,如果你在使用db_status命令发现数据库没有连接。
数据库是用来存储我们测试过程中的结果,没有数据库也能使用,但是肯定体验感极差!!!
执行下面的语句启动msf数据库:
service postgresql start
msfdb start
netstat -pantu | grep 5432

  

 

 

核心命令

=============

    命令            描述
    -------       -----------
    ?             帮助菜单
    banner        显示一个很棒的metasploit横幅
    cd            更改当前的工作目录
    color         切换高亮显示颜色
    connect       连接与主机通信
    exit          退出退出控制台
    get           获取特定于上下文的变量的值
    getg          获取全局变量的值
    grep          Grep另一个命令的输出
    help          帮助菜单
    history       历史显示命令历史
    irb           进入irb脚本模式
    load          加载一个框架插件
    quit          退出控制台
    route         路由通过会话路由流量
    save          保存保存活动的数据存储
    sessions      会话转储会话列表并显示有关会话的信息
    set           将特定于上下文的变量设置为一个值
    setg          将全局变量设置为一个值
    sleep         睡眠在指定的秒数内不执行任何操作
    spool         将控制台输出写入文件以及屏幕
    threads       线程查看和操作后台线程
    unload        卸载卸载框架插件
    unset         取消设置取消设置一个或多个特定于上下文的变量
    unsetg        取消设置取消设置一个或多个全局变量
    version       版本显示框架和控制台库版本号


模块命令
===============

    命令            描述
    -------       -----------
    advanced      高级显示一个或多个模块的高级选项
    back          返回从当前上下文返回
    edit          编辑使用首选编辑器编辑当前模块或文件
    info          显示有关一个或多个模块的信息
    loadpath      加载路径搜索并加载路径中的模块
    options       选项显示全局选项或一个或多个模块
    popm          将最新的模块从堆栈弹出并使其处于活动状态
    previous      将之前加载的模块设置为当前模块
    pushm         将活动或模块列表推入模块堆栈
    reload_all    重新加载所有定义的模块路径中的所有模块
    reload_lib    从指定路径加载库文件
    search        搜索搜索模块名称和说明
    show          显示给定类型的模块或所有模块
    use           使用按名称选择模块


工作命令
============

    命令            描述
    -------       -----------
    handler       处理程序作为作业启动负载处理程序
    jobs          作业显示和管理作业
    kill          杀死一份工作
    rename_job    重命名作业


资源脚本命令
========================

    命令            描述
    -------       -----------
    makerc        保存从开始到文件输入的命令
    resource      运行存储在文件中的命令


数据库后端命令
=========================

    命令                描述
    -------           -----------
    db_connect        连接到现有的数据库
    db_disconnect     断开当前数据库实例
    db_export         导出包含数据库内容的文件
    db_import         导入扫描结果文件(文件类型将被自动检测)
    db_nmap           执行nmap并自动记录输出
    db_rebuild_cache  重建数据库存储的模块缓存
    db_status         显示当前的数据库状态
    hosts             列出数据库中的所有主机
    loot              列出数据库中的所有战利品
    notes             列出数据库中的所有注释
    services          列出数据库中的所有服务
    vulns             列出数据库中的所有漏洞
    workspace         在数据库工作区之间切换


凭证后端命令
============================

    命令            描述
    -------       -----------
    creds         列出数据库中的所有凭据(密码)