目录

前言

每当有新的漏洞利用代码(Exploit)被爆出时,富有激情并勤劳的 Hacker 们会写出自己五花八门的 exploit,Metasploit 作为目前知名度最大的漏洞利用框架,从官方 github 的 issue 可以看出,贡献 exploit 的人有很多,这篇文章我们谈谈 metasploit 如何导入还没加入漏洞库别人贡献的新鲜 exploit

Metasploit 的官方文档 说到会从以下两个目录加载模块:

  1. /usr/share/metasploit-framework/modules/
  2. 〜/.msf4/modules/

目录 1 是 metasploit 安装目录下的 modules 目录 目录 2 是用户加目录下的 .msf4/modules/ 目录,如果用户名为 xax007 那么

〜/.msf4/modules/ 目录就是 /home/xax007/.msf4/modules/

那就是说如果我们把外部的 metasploit 模块直接放入这两个目录当中是不是就能加载了呢?还不能!

以 Kali Linux 系统为例,查看 metasploit 的安装目录可以看到以下的文件和文件夹

╭─root@xax007.github.io ~  
╰─➤  cd /usr/share/metasploit-framework 
╭─root@xax007.github.io /usr/share/metasploit-framework  
╰─➤  ls
app     db             Gemfile.lock                  modules     msfdb            msfrpcd    msf-ws.ru  ruby             script-recon  vendor
config  documentation  lib                           msfconsole  msf-json-rpc.ru  msfupdate  plugins    script-exploit   scripts
data    Gemfile        metasploit-framework.gemspec  msfd        msfrpc           msfvenom   Rakefile   script-password  tools
╭─root@xax007.github.io /usr/share/metasploit-framework  
╰─➤  ls modules 
auxiliary  encoders  evasion  exploits  nops  payloads  post
╭─root@xax007.github.io /usr/share/metasploit-framework  
╰─➤  

modules 目录下有

  • auxiliary 辅助模块,包含包括端口扫描器,模糊测试工具,嗅探器等
  • encoders 编码模块
  • evasion
  • exploits 漏洞利用模块
  • nops
  • payloads 有效载荷模块
  • post 后渗透测试利用模块

这几个目录都有不同的用处,从外部导入的模块文件也需要放到到相应的目录下,否则 metasploit 不能正确的加载

我们以 Exploit-DB 发布的 WordPress 5.0.0 - Crop-image Shell Upload (Metasploit) 漏洞的 Metasploit 漏洞利用模块为例

有三种方法可以把单一文件的外部 Metasploit 模块导入进来

方法一 从家目录加载外部模块

~/.msf4 目录下的 modules目录新建叫 exploits 的目录,外部模块导入到该目录即可,具体操作步骤如下:

╭─root@kali ~  # 查看 ~/.msf4/ 目录
╰─➤  ls ~/.msf4/   
history  local  logos  logs  loot  modules  plugins  store
╭─root@kali ~  # 查看 ls ~/.msf4/modules 目录,为空
╰─➤  ls ~/.msf4/modules 
╭─root@kali ~  # 静默方式进入 msfconsole
╰─➤  msfconsole -q  
msf5 > use exploit/wp_corss_image_shell_upload # 加载模块
[-] Failed to load module: exploit/wp_corss_image_shell_upload # 加载失败
msf5 > exit # 推出 
╭─root@kali ~  # ~/.msf4/modules/目录下创建 exploits 目录
╰─➤  mkdir -p ~/.msf4/modules/exploits 
╭─root@kali ~  # wget下载 msf 模块保存在在上一步创建的目录下,文件名为 wp_corp_image_shell_upload.rb
╰─➤  wget https://www.exploit-db.com/raw/46662 -O ~/.msf4/modules/exploits/wp_corp_image_shell_upload.rb
--2019-04-18 00:17:14--  https://www.exploit-db.com/raw/46662
Resolving www.exploit-db.com (www.exploit-db.com)... 192.124.249.8
Connecting to www.exploit-db.com (www.exploit-db.com)|192.124.249.8|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/plain]
Saving to: ‘/root/.msf4/modules/exploits/wp_corp_image_shell_upload.rb’

/root/.msf4/modules/exploits/wp_corp_imag     [ <=>                                                                                ]  17.56K  97.1KB/s    in 0.2s    

2019-04-18 00:17:19 (97.1 KB/s) - ‘/root/.msf4/modules/exploits/wp_corp_image_shell_upload.rb’ saved [17986]

╭─root@kali ~  #查看 ~/.msf4/modules/exploits 目录
╰─➤  ls ~/.msf4/modules/exploits
wp_corp_image_shell_upload.rb
╭─root@kali ~  # 再一次静默方式进入msfconsole 
╰─➤  msfconsole -q
msf5 > use exploit/wp_corp_image_shell_upload # 加载 wp_corp_image_shell_upload 模块
msf5 exploit(wp_corp_image_shell_upload) > # 加载成功

方法二 从 Metasploit 安装目录加载模块

这个方法和上一个方法一是同理,下载的模块放入到 /usr/share/metasploit-framework/modules/exploits 目录下,在进入msfconsole ` use exploit/模块文件名` 即可

方法三 从任意目录加载模块

以下操作在 Kali-Linux-2019.1-vm-amd64 下进行

创建一个任意目录,在该目录下新建一个叫 exploits 的目录,在 exploits 目录下放入要加载的模块即可

以上三个方法可以很方便的导入外部的单个文件文件的模块,但不是所有的 metasploit 模块都是这么简单的,就比如 iOS 系统的 CVE-2018-4233 漏洞 metasploit 攻击模块

该漏洞攻击模块一共有 59 个文件,散布在不同的文件夹下,因此以上的方法就不太适用于导入这种复杂的模块了

Metasploit 导入有多个文件的复杂模块

像上面这种 pull request 提交的包含多个文件的复杂模块想抢先体验,需要从 metasploit 的 GitHub 重新安装一个metasploit,然后切换到该 pull request以后启动 msfconsole 使用该模块即可,具体操作如下:

新建目录

mkdir msf-dev

从 Metasploit 的 GitHub 克隆代码, Msf的源代码有好几百兆,速度会很慢,建议挂上代理下载

下载下来以后使用以下命令修改该项目的 git 配置文件,以支持下载 pull request 到本地

git config --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'

然后拉取所有 pull 请求

git fetch origin

不挂代理真的是寸步难行

切换分支到该 pull 请求

git checkout pr/11477

11477 是 pull 请求 ID

为了不引起让人摸不着头脑的错误,代码切换分支以后需要查看项目需要的 ruby 版本是否与本地 ruby 版本一致,不一致需要安装 Metasploit 源代码当前目录下的 .ruby-version 中的指定版本的 ruby

使用 rbenv 安装指定版本的 ruby 参考 rbenv 的 GitHub 主页

Kali Linux 已安装该版本的 ruby 如果在其他Linux发行版下可选择使用 rbenv 安装指定版本 ruby

gem install bundler --no-ri --no-doc
bundle install

gem 的 --no-ri --no-doc 参数可加快安装速度

如果 bundle install 执行报错,可删除当前目录下的 Gemfile.lock 文件后再次执行就好了

装完后启动 msfconsole

如果启动 msfconsole 时 提示 You must use Bundler 2 or greater with this lockfile.错误,可执行 gem update --system 命令来解决

最后启动 msfconsole 后即可使用该模块

参考链接

  1. Metasploit Modules and Locations
  2. checkout github pull request locally