-
Notifications
You must be signed in to change notification settings - Fork 3
配置 Metasploit 开发环境
这是用于设置开发环境、贡献模块、文档和修复 Metasploit 框架的指南. 如果你只想使用 Metasploit 进行合法的, 授权的黑客攻击, 我们建议你:
- 安装 开源 Omnibus 安装包, 或
- 使用预安装的 Kali Linux 或 Parrot Linux.
如果你想为 Metasploit 贡献, 可以开始阅读我们的 CONTRIBUTING.md, 然后按照本指南的其余部分进行操作.
- 你有安装好 apt 的 Linux 环境, 例如 Ubuntu 或 Kali.
- 你有 GitHub 账号并与 ssh key 关联.
- 你熟悉 Git 和 Github 或已完成 Github 训练营.
- 对于可选数据库和 REST API 功能, 你需要使用常规非 root 用户.
本指南包含设置 Linux 和 Windows 的详细信息
- 在你的 Linux 主机上打开终端, 安装 Git、build 工具和 Ruby 依赖:
sudo apt update && sudo apt install -y git autoconf build-essential libpcap-dev libpq-dev zlib1g-dev libsqlite3-dev
如果你使用的是 Windows 机器
- 安装 chocolatey
- 安装 Ruby
- 在 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:\"
- 安装指定版本的 PostgreSQL
choco install postgresql12
你将需要使用 Github 为你的贡献创建一个 fork, 并从我们的库中接收最新更新.
-
登录 Github, 然后在 metasploit-framework 库右上角点击 "Fork" 按钮
-
在你的主文件夹中创建一个 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
-
如果执行上面命令遇到 "permission denied" 错误, 请观察错误信息提示. 如果没有明显的原因提示, 则请确认你的 Github SSH Key 配置正确. 你需要在 Github 账号上关联你的 public SSH key, 否则如果你设置 SSH 密钥并且不会与你的 GitHub 帐户关联, 将收到 "会话被拒绝" 错误提示.
-
要接收更新, 你将创建一个
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
- 配置你的 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"
- 设置 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
Linux 发行版不随最新的 Ruby 一起提供, 包管理器也不会定期更新. 此外, 如果你正在使用多个 Ruby 项目, 每个项目都有依赖和 Ruby 版本可能会发生冲突. 所以建议使用 Ruby 管理器.
你可以直接安装 Ruby (如: sudo apt install ruby-dev
), 但你可能最终得到的版本不正确, 无法更新. 相反请考虑使用 Ruby environment managers. Metasploit 团队偏向使用rbenv 和 rvm. (请注意, 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 环境没有相关解决办法, 随时可以到文章底部链接与社区联系.
运行 Metasploit 之前, 你将需要更新 Metasploit 依赖的 gem (Ruby 库):
cd ~/git/metasploit-framework/
gem install bundler
bundle install
如果你运行上面命令遇到错误, 参考 bundle
的错误输出提示, 并搜索错误信息及失败的 gem 名称. 可能需要 apt-get install
该特定 gem 所需的依赖.
恭喜你! 现在已经设置好开发环境和最新版本的 Metasploit 框架了. 如果你遵循本指南遇到问题, 可以打开 new issue, 我们会为你提供帮助, 或更新文档.
以下的可选部分介绍如何手动安装 PostgreSQL 和配置 Metasploit 数据库. 也可使用我们的 Omnibus 安装程序更好的安装配置.
- 确认已安装 PostgreSQL 服务器和客户端:
sudo apt update && sudo apt-get install -y postgresql postgresql-client
sudo service postgresql start && sudo update-rc.d postgresql enable
-
确保你没有以 root 用户身份运行.
-
初始化 Metasploit 数据库:
cd ~/git/metasploit-framework
./msfdb init
-
如果收到有关未安装组件的错误, 使用 which 和 find 命令确认显示的二进制文件所在的绝对路径, 修改 $PATH 变量. 如果还有问题, 可以提交 new issue 通知我们.
-
如果
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. 阅读关于 why 和 how. 当你完成这些操作后, 可以考虑使用下面的命令对 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.