Metasploit/使用 Mixin
Mixin 是 Ruby 语言中的一种便捷机制,用于将功能包含到模块中。虽然 Ruby 是一种单继承语言,但 Mixin 提供了一种以某种方式实现多重继承的方法。Metasploit 很好地利用了 Mixin。理解和有效地使用 Mixin 是 MSF 模块开发过程中的重要组成部分。本章旨在描述各种可用的 Mixin、其用途和功能。
请注意,Mixin 通常不与特定模块类别(漏洞利用、辅助等)绑定,尽管它们出现在最适合它们的类别下。这意味着你可以在辅助模块中使用漏洞利用模块的 Mixin,反之亦然。
此 Mixin 用于将主机、服务和漏洞信息保存到数据库。它提供了两种方法 report_host 和 report_service,用于指示主机的状态(已启动或已停止等)和服务。要使用此模块,你需要使用以下方法将其包含到你的类中:include Auxiliary::Report
包含 Mixin 后,你可以使用它的方法在 DB 中保存信息。
请注意,如果你没有加载后端数据库,调用这些方法将不会执行任何操作,也不会引发错误。
此方法接受一个哈希参数。要保存已启动主机的状态,你可以按如下方式调用此方法
report_host(:host => datastore['RHOST'])
要指定主机不在线(已停止),请将第二个参数传递给方法,该参数应该是 HostState 类型。
report_host(:host => '127.0.0.1', Msf::HostState::Dead)
与 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' )
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 等)。这允许模块用户指定要扫描的主机。
使用单个 IP 调用,使用 THREADS 个并发线程。这是针对主机特定问题对一系列地址进行大规模测试的最佳方法。
使用由 run_batch_size() 方法定义的大小的一组 IP 调用,使用 THREADS 个并发线程。这意味着它会同时处理多个批次,因此不要将其用于单主机测试(它基本上适用于一些极端情况)。
对整个主机范围调用 *一次*。如果你要将此范围传递给其他工具或进行一些网络范围的测试,这将很有用。例如,调用 nmap 程序。
扫描程序模块现在具有使用多个线程并行扫描多个主机的额外功能。包含扫描程序 Mixin 现在会向你的模块添加一个额外的 THREADS 选项,其默认值为 1。模块用户和/或开发人员可以将此值更改为大于 1 的任何值,以进行多线程扫描。