君子藏器于身待时而动,安全不露圭角覆盂之安。
——AnonySec
Metasploit框架结构
Metasploit的体系框架结构示意图如下:
文件结构
Metasploit中的文件结构如下:
目录 | 用途 |
---|---|
lib | 包含Metasploit模块的全部重要库文件 (Metasploit的核心与灵魂) |
modules | 包含Metasploit中的所有模块 |
tools | 包含用于辅助渗透测试的命令行程序 |
plugins | 包含所有用于扩展Metasploit功能的插件,例如OpenVAS、Nessus… |
scripts | 包含Meterpreter和其他各种脚本 |
库的布局
Metasploit的模块是由各种各样的函数构成的。这些函数包括各种基础库文件以及使用Ruby 编写的通用程序。在使用这些函数之前,首先要知道这些函数是什么,如何使用这些函数,调用 函数时需要传递多少个参数?更重要的是,这些函数的返回值会是什么?
库的实际位置
重要的rex
库文件位于/lib
目录下:(在/lib
下还包含了各种服务的重要目录)
另外两个重要的库/base
和/core
位于/msf
目录下:
/msf/core
库文件提供核心的辅助模块core/exploits/
目录是Metasploit模块广泛使用的库文件core/
目录下还可以找到支持各种类型模块的所有相关库文件(渗透、攻击载荷、后渗透、编码器和各种其他模块的core库)
重要文档
通过以上对Metasploit框架结构的介绍,已经有所熟悉。接下来,在打造定制化的Metasploit过程中,可以结合官方文档,下面列出一些比较重要的文档供参考:
模块格式
首先,开发的Metasploit模块,最好的办法就是先深入理解它现有模块的内部机制,看看是如何工作的。
Metasploit通用的框架头部如下:
1 | require 'msf/core' |
- 一个框架一般都会从使用
require
关键字导入重要的库文件开始,上面的代码就导入了msf/core
库。所以,这个框架中就包含了msf目录下的core库文件。 - 接下来主要是使用
MetasploitModule
指定这个类的类型。在定义类型的那行中,需要定义类的用途。上面代码定义了类的用途为MSF::Auxiliary
。 initialize
方法是Ruby编程语言中的默认构造方法。在这个方法中,我们定义了名称 (Name)、描述(Description)、作者(Author)、许可(License)等。许可就是'License' => MSF_LICENSE
。- 辅助模块中的主函数是
run
方法,除非要使用特别多的方法,否则所有的操作都应该在这个函数里面执行。但是程序仍然要从run
方法开始执行。
References
《Mastering Metasploit - Third Edition》