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