• 第一次亲密接触MSF


    第一次亲密接触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时使用的参数选项

    通用选项:
        -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         列出数据库中的所有凭据(密码)
    
    

      

  • 相关阅读:
    Pro Andorid3第二章:设置开发环境
    Seminar 记录
    安装CGAL
    Literature review
    第七章:清楚简洁的英文 《英语科技写作(文法与修辞原则)》by 方克涛
    幻灯片制作去除模板背景
    vs2008下设置.h, .lib和 .dll 的路径配置全图及其意义
    配置环境变量
    PPT制作技巧
    #include文件时用双引号和尖括号的区别
  • 原文地址:https://www.cnblogs.com/-wenli/p/10123950.html
Copyright © 2020-2023  润新知