Skip to content

配置 Metasploit 开发环境

L edited this page Feb 25, 2022 · 3 revisions

这是用于设置开发环境、贡献模块、文档和修复 Metasploit 框架的指南. 如果您只想使用Metasploit进行合法的,授权的黑客攻击,我们建议您:

如果你想为 Metasploit 贡献,可以开始阅读我们的 CONTRIBUTING.md, 然后按照本指南的其余部分进行操作.

假设条件

  • 你有安装好 apt 的 Linux 环境, 例如 UbuntuKali.
  • 你有 GitHub 账号并与 ssh key 关联.
  • 你熟悉 Git 和 Github 或已完成 Github 训练营.
  • 对于可选数据库和 REST API 功能,你需要使用常规非 root 用户.

本指南包含设置 LinuxWindows 的详细信息

安装依赖

  1. 在你的 Linux 主机上打开终端,安装 Git、build 工具和 Ruby 依赖:
sudo apt update && sudo apt install -y git autoconf build-essential libpcap-dev libpq-dev zlib1g-dev libsqlite3-dev

如果你使用的是 Windows 机器

  1. 安装 chocolatey
  2. 安装 Ruby
  3. 在 cmd.exe 终端上 安装 pcaprub 等依赖
powershell -Command "[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true} ; [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; (New-Object System.Net.WebClient).DownloadFile('https://www.winpcap.org/install/bin/WpdPack_4_1_2.zip', 'C:\Windows\Temp\WpdPack_4_1_2.zip')"
choco install 7zip.installServerCertificateValidationCallback
7z x "C:\Windows\Temp\WpdPack_4_1_2.zip" -o"C:\"
  1. 安装指定版本的 PostgreSQL
choco install postgresql12

设置账号克隆库到本地

您将需要使用 Github 为您的贡献创建一个 fork,并从我们的库中接收最新更新.

  1. 登录 Github, 然后在 metasploit-framework 库右上角点击 "Fork" 按钮

  2. 在您的主文件夹中创建一个git目录,并将fork克隆到本地计算机.

export GITHUB_USERNAME=YOUR_USERNAME_FOR_GITHUB
export GITHUB_EMAIL=YOUR_EMAIL_ADDRESS_FOR_GITHUB
mkdir -p ~/git
cd ~/git
git clone [email protected]:$GITHUB_USERNAME/metasploit-framework
cd ~/git/metasploit-framework
  1. 如果执行上面命令遇到 "permission denied" 错误,请观察错误信息提示. 如果没有明显的原因提示, 则请确认你的 Github SSH Key 配置正确。你需要在 Github 账号上关联你的 public SSH key, 否则如果您设置 SSH 密钥并且不会与你的 GitHub 帐户关联,将收到 "会话被拒绝" 错误提示。

  2. 要接收更新,您将创建一个 upstream-master 分支来跟踪 Rapid7 远程库, 接着将你的 master 分支会指向你的 fork 的库.

git remote add upstream [email protected]:rapid7/metasploit-framework.git
git fetch upstream
git checkout -b upstream-master --track upstream/master
  1. 配置你的 Github 用户名、邮箱地址和用户名. 确保你的 user.email 与您在Github帐户中注册的电子邮件地址匹配.
git config --global user.name "$GITHUB_USERNAME"
git config --global user.email "$GITHUB_EMAIL"
git config --global github.user "$GITHUB_USERNAME"
  1. 设置 msftidy 在每个 git commit 之前和每个 git merge 之后运行, 以快速确定与贡献有关的潜在问题:
cd ~/git/metasploit-framework
ln -sf ../../tools/dev/pre-commit-hook.rb .git/hooks/pre-commit
ln -sf ../../tools/dev/pre-commit-hook.rb .git/hooks/post-merge

安装 Ruby

Linux 发行版不随最新的 Ruby 一起提供, 包管理器也不会定期更新. 此外,如果您正在使用多个 Ruby 项目, 每个项目都有依赖和 Ruby 版本可能会发生冲突. 所以建议使用 Ruby 管理器.

你可以直接安装 Ruby (如: sudo apt install ruby-dev), 但你可能最终得到的版本不正确,无法更新. 相反请考虑使用 Ruby environment managers. Metasploit 团队偏向使用rbenvrvm. (请注意, rvm 需要重新登录才能完成)

无论你选择哪种方式, 你都要确保在 ~/git/metasploit-framework 目录下, 运行的是正确版本的 Ruby:

$ cd ~/git/metasploit-framework
$ cat .ruby-version
3.0.2
$ ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]

注意:Ruby 版本可能会随时间变化, 因此不要依赖上面示例中的输出. 应该参照 .ruby-version 文件中列出的版本号匹配你的 ruby -v 输出.

如果版本不匹配, 重启你的终端. 如果还不可以,就查阅你的 Ruby 环境管理器文档排错. 如果不幸, Ruby 环境没有相关解决办法, 随时可以到文章底部链接与社区联系.

安装 Gems

运行 Metasploit 之前, 您将需要更新 Metasploit 依赖的 gem (Ruby 库):

cd ~/git/metasploit-framework/
gem install bundler
bundle install

如果你运行上面命令遇到错误, 参考 bundle 的错误输出提示, 并搜索错误信息及失败的 gem 名称. 可能需要 apt-get install 该特定 gem 所需的依赖.

恭喜你! 现在已经设置好开发环境和最新版本的 Metasploit 框架了. 如果你遵循本指南遇到问题, 可以打开 new issue, 我们会为你提供帮助, 或更新文档.

可选: 设置 REST API 和 PostgreSQL 数据库

以下的可选部分介绍如何手动安装 PostgreSQL 和配置 Metasploit 数据库. 也可使用我们的 Omnibus 安装程序更好的安装配置.

  1. 确认已安装 PostgreSQL 服务器和客户端:
sudo apt update && sudo apt-get install -y postgresql postgresql-client
sudo service postgresql start && sudo update-rc.d postgresql enable
  1. 确保您没有以 root 用户身份运行.

  2. 初始化 Metasploit 数据库:

cd ~/git/metasploit-framework
./msfdb init
  1. 如果收到有关未安装组件的错误, 使用 whichfind 命令确认显示的二进制文件所在的绝对路径, 修改 $PATH 变量. 如果还有问题, 可以提交 new issue 通知我们.

  2. 如果 msfdb init 命令运行成功, 然后确认 Metasploit 可以访问该数据库:

$ ./msfconsole -qx "db_status; exit"

恭喜你! 现在已经设置好 Metasploit Web 服务 (REST API) 和后端数据库.

可选: 加快常见工作流程的提示

下面部分是可选的, 但能提高你的效率.

确保正确目录下运行 msfconsole 可能会过于繁琐, 因此考虑使用以下的 Bash alias:

echo 'alias msfconsole="pushd $HOME/git/metasploit-framework && ./msfconsole && popd"' >> ~/.bash_aliases

考虑生成一个 GPG 密钥来标记你的 commit. 阅读关于 whyhow. 当你完成这些操作后,可以考虑使用下面的命令对 commit 启用自动签名:

cd "clone MSF 项目的目录位置"
git config commit.gpgsign true

开发者趋向定制自己的 git aliases 来提高常用的命令速度, 但是下面只有一些常用的:

[alias]
# 一种简单的彩色单行日志格式,显示已签名/未签名状态
nicelog = log --pretty=format:'%Cred%h%Creset -%Creset %s %Cgreen(%cr) %C(bold blue)<%aE>%Creset [%G?]'

# 快捷命令始终签名 (-S) 并始终编辑提交消息
m = merge -S --no-ff --edit
c = commit -S --edit

# blame 总是忽略空白字符
b= blame -w

如果打算使用其他贡献者的 pull requests, 则可以运行以下脚本,这样做更容易:

tools/dev/add_pr_fetch.rb

运行上述脚本后, 可以更轻松使用 checkout 使用其他人的 pull requests:

git fetch upstream
git checkout fixes-to-pr-12345 upstream/pr/12345

如果编写测试用例, 应该确保 rspec 有效:

rake spec

您应该看到运行了9000多个测试, 大多数结果是绿色的点, 少数是黄色的星星, 并且没有红色错误.

很棒! 接下来?

我们很高兴看到您即将对新模块、文档和修复做出的贡献! 查看我们的wiki文档, 如果您正在寻找灵感, 请密切关注 新手友好的 pull requests 和 issues. 请 提交新的 pull requests,然后通过 Slack 与我们联系以寻求社区帮助.

最后, 我们欢迎您对本指南提供反馈, 请随时通过 Slack 与我们联系或打开 new issue. 对于本指南的重要贡献, 我们要感谢 @kernelsmith@corelanc0d3r@ffmike.

Clone this wiki locally