打造定制化的Metasploit—体系框架

君子藏器于身待时而动,安全不露圭角覆盂之安。

——AnonySec

https://payloads.cn

Metasploit框架结构

Metasploit的体系框架结构示意图如下:

6dbacbf6ce68f775e90698b3a8d762f5

文件结构

Metasploit中的文件结构如下:

7aea9276fc18b34e3bc2b526bf944dd3

目录用途
lib包含Metasploit模块的全部重要库文件 (Metasploit的核心与灵魂)
modules包含Metasploit中的所有模块
tools包含用于辅助渗透测试的命令行程序
plugins包含所有用于扩展Metasploit功能的插件,例如OpenVAS、Nessus…
scripts包含Meterpreter和其他各种脚本
## 库的布局

Metasploit的模块是由各种各样的函数构成的。这些函数包括各种基础库文件以及使用Ruby 编写的通用程序。在使用这些函数之前,首先要知道这些函数是什么,如何使用这些函数,调用 函数时需要传递多少个参数?更重要的是,这些函数的返回值会是什么?

库的实际位置

重要的rex库文件位于/lib目录下:(在/lib下还包含了各种服务的重要目录)

3b3b30a4a3d121341e2fc5e8e91514ee

另外两个重要的库/base/core位于/msf目录下:

48cc2ce6b7c24a060a96024e8545d398

  • /msf/core库文件提供核心的辅助模块

  • core/exploits/目录是Metasploit模块广泛使用的库文件

  • core/目录下还可以找到支持各种类型模块的所有相关库文件(渗透、攻击载荷、后渗透、编码器和各种其他模块的core库)

重要文档

通过以上对Metasploit框架结构的介绍,已经有所熟悉。接下来,在打造定制化的Metasploit过程中,可以结合官方文档,下面列出一些比较重要的文档供参考:

  • 搭建Metasploit开发环境,创建一个专门用来开发的Metasploit版本 msf5:官方文档 中文文档

  • 社区贡献指南,请参照官方给出的代码规范进行开发:官方文档 中文文档

  • Metasploit API,能够查询大量的类、模块、函数定义等等:官方文档

  • 一些其他的开发技能,包括但不局限于 git使用、ruby 语法、Metasploit 使用了解等。

模块格式

首先,开发的Metasploit模块,最好的办法就是先深入理解它现有模块的内部机制,看看是如何工作的。

Metasploit通用的框架头部如下:

1
require 'msf/core'
2
3
class MetasploitModule < Msf::Auxiliary
4
  def initialize(info = {})
5
    super(
6
      update_info(
7
        info,
8
        'Name'        => 'Sample Auxiliary Module',
9
        # The description can be multiple lines, but does not preserve formatting.
10
        'Description' => 'Sample Auxiliary Module',
11
        'Author'      => ['Joe Module <joem@example.com>'],
12
        'License'     => MSF_LICENSE,
13
      )
14
    )
15
  end
16
17
  def run
18
    # Main function
19
  end
  • 一个框架一般都会从使用require关键字导入重要的库文件开始,上面的代码就导入了msf/core库。所以,这个框架中就包含了msf目录下的core库文件。
  • 接下来主要是使用MetasploitModule指定这个类的类型。在定义类型的那行中,需要定义类的用途。上面代码定义了类的用途为MSF::Auxiliary
  • initialize方法是Ruby编程语言中的默认构造方法。在这个方法中,我们定义了名称 (Name)、描述(Description)、作者(Author)、许可(License)等。许可就是'License' => MSF_LICENSE
  • 辅助模块中的主函数是run方法,除非要使用特别多的方法,否则所有的操作都应该在这个函数里面执行。但是程序仍然要从run方法开始执行。

References


xq