跳至内容

Metasploit/使用 Mixin

来自 Wikibooks,开放的世界中的开放书籍


利用 MSF Mixin 进行漏洞利用/辅助模块开发

[编辑 | 编辑源代码]

Mixin 是 Ruby 语言中的一种便捷机制,用于将功能包含到模块中。虽然 Ruby 是一种单继承语言,但 Mixin 提供了一种以某种方式实现多重继承的方法。Metasploit 很好地利用了 Mixin。理解和有效地使用 Mixin 是 MSF 模块开发过程中的重要组成部分。本章旨在描述各种可用的 Mixin、其用途和功能。

请注意,Mixin 通常不与特定模块类别(漏洞利用、辅助等)绑定,尽管它们出现在最适合它们的类别下。这意味着你可以在辅助模块中使用漏洞利用模块的 Mixin,反之亦然。

Auxiliary::Report Mixin

[编辑 | 编辑源代码]

此 Mixin 用于将主机、服务和漏洞信息保存到数据库。它提供了两种方法 report_hostreport_service,用于指示主机的状态(已启动或已停止等)和服务。要使用此模块,你需要使用以下方法将其包含到你的类中:include Auxiliary::Report

包含 Mixin 后,你可以使用它的方法在 DB 中保存信息。

请注意,如果你没有加载后端数据库,调用这些方法将不会执行任何操作,也不会引发错误。

Auxiliary::Report.report_host()

[编辑 | 编辑源代码]

此方法接受一个哈希参数。要保存已启动主机的状态,你可以按如下方式调用此方法

report_host(:host => datastore['RHOST'])

要指定主机不在线(已停止),请将第二个参数传递给方法,该参数应该是 HostState 类型。

report_host(:host => '127.0.0.1', Msf::HostState::Dead)


Auxiliary::Report.report_service()

[编辑 | 编辑源代码]

与 report_host 方法类似,此方法也接受一个包含各种键值对的哈希参数。哈希可以包含以下键的值

  • addr(主机名或地址)
  • port(数字端口号)
  • proto(协议可以是 'tcp' 'udp'
  • name(服务名称,例如 'http'、'https' 等)
  • state(Msf::ServiceState 类型的服务状态)

以下代码段将 TCP 端口 80 报告为 localhost 上的开放端口。请注意,state 的默认值为 Msf::ServiceState::Up,因此我们不需要指定 state 参数。

report_service(:host => 'localhost',
               :port => 80,
               :name => 'HTTP'
              )


Auxiliary::Scanner Mixin

[编辑 | 编辑源代码]

Scanner Mixin 允许模块具有对多个主机执行操作的能力。实现扫描程序最简单、最常见的方法是包含扫描程序 Mixin,代码如下

include Auxiliary::Scanner

然后在你的模块中实现 run_host(ip) 方法

def run_host(ip)
   print_status("Processing IP #{ip}")
end

每个主机/IP 会自动传递给此函数,你只需要实现你的逻辑,就像在单个主机上工作一样。

包含扫描程序 Mixin 会从模块选项中删除 RHOST 选项,并向模块添加 RHOSTS 选项。此选项允许你指定网络地址范围(例如:192.168.10.0/24、11.23.45.6-11.23.45.56 等)。这允许模块用户指定要扫描的主机。

run_host()

[编辑 | 编辑源代码]

使用单个 IP 调用,使用 THREADS 个并发线程。这是针对主机特定问题对一系列地址进行大规模测试的最佳方法。

run_batch()

[编辑 | 编辑源代码]

使用由 run_batch_size() 方法定义的大小的一组 IP 调用,使用 THREADS 个并发线程。这意味着它会同时处理多个批次,因此不要将其用于单主机测试(它基本上适用于一些极端情况)。

run_range()

[编辑 | 编辑源代码]

对整个主机范围调用 *一次*。如果你要将此范围传递给其他工具或进行一些网络范围的测试,这将很有用。例如,调用 nmap 程序。

使用多线程进行扫描

[编辑 | 编辑源代码]

扫描程序模块现在具有使用多个线程并行扫描多个主机的额外功能。包含扫描程序 Mixin 现在会向你的模块添加一个额外的 THREADS 选项,其默认值为 1。模块用户和/或开发人员可以将此值更改为大于 1 的任何值,以进行多线程扫描。

Exploit::Remote::HttpClient Mixin

[编辑 | 编辑源代码]
华夏公益教科书