Skip to content
L edited this page May 19, 2020 · 1 revision

如果你要编写或收集不属于标准发行版的 Metasploit 模块, 那么你需要一种方便的方法将这些模块加载到 Metasploit 中. 使用 Metasploit 的默认本地模块搜索路径 $HOME/.msf4/modules, 这非常简单, 但有几点警告:

镜像 "真实的" Metasploit 模块路径

你必须首先建立一个符合 Metasploit 对路径名的期望的目录结构. 这通常意味着你首先应该创建一个 "exploits" 目录结构, 如下所示:

mkdir -p $HOME/.msf4/modules/exploits

如果你正在使用 auxiliarypost 模块, 或者正在编写 payload, 则还需要对它们进行 mkdir 创建.

创建一个适当的类型

模块按 (某种程度) 类别分类. 这些可以是你喜欢的任何东西; 我通常使用 testprivate, 但是如果你要开发一个模块并希望将其提供给主要的 Metasploit 发行版, 则需要镜像真实的模块路径. 例如:

mkdir -p $HOME/.msf4/modules/exploits/windows/fileformat

... 如果你正在开发 Windows 的文件格式漏洞.

创建模块

一旦有了放置模块的目录, 即可随时下载或开始编写模块.

全部测试

如果你已经在运行 msfconsole, 请使用 reload_all 命令选择新模块. 如果没有, 只需启动 msfconsole, 它们就会自动被加入. 如果你想使用通用的东西进行测试, 我将在下面列出一个模块作为要点: https://gist.github.com/todb-r7/5935519, 因此, 让我们试一下:

todb@ubuntu:~$ mkdir -p $HOME/.msf4/modules/exploits/test
todb@ubuntu:~$ curl -Lo ~/.msf4/modules/exploits/test/test_module.rb https://gist.github.com/todb-r7/5935519/raw/6e5d2da61c82b0aa8cec36825363118e9dd5f86b/test_module.rb
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1140    0  1140    0     0   3607      0 --:--:-- --:--:-- --:--:--  7808

然后, 在我的 msfconsole 窗口中:

msf > reload_all
[*] Reloading modules from all module paths...
IIIIII    dTb.dTb        _.---._
  II     4'  v  'B   .'"".'/|\`.""'.
  II     6.     .P  :  .' / | \ `.  :
  II     'T;. .;P'  '.'  /  |  \  `.'
  II      'T; ;P'    `. /   |   \ .'
IIIIII     'YvP'       `-.__|__.-'

I love shells --egypt


       =[ metasploit v4.6.2-2013052901 [core:4.6 api:1.0]
+ -- --=[ 1122 exploits - 707 auxiliary - 192 post
+ -- --=[ 307 payloads - 30 encoders - 8 nops

msf > use exploit/test/test_module
msf exploit(test_module) > info

       Name: Fake Test Module
     Module: exploit/test/test_module
    Version: 0
   Platform: Windows
 Privileged: No
    License: Metasploit Framework License (BSD)
       Rank: Excellent

Provided by:
  todb <[email protected]>

Available targets:
  Id  Name
  --  ----
  0   Universal

Basic options:
  Name  Current Setting  Required  Description
  ----  ---------------  --------  -----------
  DATA  Hello, world!    yes       The output data

Payload information:

Description:
  If this module loads, you know you're doing it right.

References:
  http://cvedetails.com/cve/1970-0001/

msf exploit(test_module) > exploit

[*] Started reverse handler on 192.168.145.1:4444
[+] Hello, world!
msf exploit(test_module) >

故障排除

这就是全部. 大家 (包括我自己) 遇到的最常见问题是:

  • 尝试在 $HOME/.msf4/modules/ 中创建一个模块. 这将不起作用, 因为你需要指定它是 exploit/payload 或其他类型的模块. 检查 ls /opt/metasploit/apps/pro/msf3/modules/ (或安装 Metasploit 的位置) .
  • 尝试在 $HOME/.msf4/exploit/$HOME/.msf4/posts/ 中创建模块. 请注意目录名称的多元化; 它们因不同的类型而不同. exploits、payloads、encoders 和 nops 是复数, 而 auxiliary 和 post 是单数.

Metasploit 社区版和专业版

请注意, Metasploit 社区版的 $HOME 目录将是根目录, 而不是你自己的用户目录, 因此, 如果你希望模块显示在 Metasploit CE (Express 或 Pro) Web UI 中, 你将希望隐藏你在/root/.msf4/modules 中的外部模块. 当然, 这意味着你需要对相关机器的 root 访问权, 但是, 你是 Metasploit 黑客用户, 所以这应该不太难.

另请注意, 如果模块未显示在 Web UI 中, 则应重新启动 Pro 服务.

Windows

对于 Windows 用户, 除了从 Web GUI 访问模块之外, 上述所有内容都是正确的. 可悲的是, 你有点不走运. Windows 上的模块加载路径更具限制性, 并且不允许使用外部模块. 但是, 基于 Console2 的 Metasploit 控制台 (开始 > 程序 > Metasploit > Metasploit 控制台) 可以正常工作.

新的 mixin 和协议

任何需要更改核心库功能的模块, 例如新的协议解析器或其他 mixin 库, 都不会以这种方式为你解决 -- 当你的模块尝试加载这些类时, 你将最终到处冒出错误. 几乎在所有情况下都可以将模块编写为完全独立的 (得益于 Ruby 的开放类架构). 但是此类模块几乎总是在以后进行重构, 以使协议和其他 mixin 可用于其他模块.

在这种情况下, 最好将模块与类似的模块一起使用, 并在开发分支中使用适当的 GitHub checkout -- 有关更多信息, 参考 设置 Metasploit 开发环境

最后警告

如果你正在加载新的令人兴奋的 Metasploit 模块, 请知道这些东西将倾向于访问你有权访问的任何内容, 如果你以 root 权限运行, 则加倍注意. Metasploit 模块是纯文本 Ruby, 因此你可以方便阅读它们 -- 但请小心, 仅添加来自受信任来源的外部模块. 不要随便加载在 Internet 上看到的任何旧东西, 因为你可能会发现自己很快就被弹 shell 了 (或更糟) .

Clone this wiki locally