Metasploitのインストール方法と設定方法 

セキュリティ業界では有名なペネトレーションテストなどで使われるMetasploitのインストール方法についてまとめました。
Ubuntu18.04環境でのインストール方法を主に載せています。

**2021/10/23 更新**
[こちら](https://note.com/shimakaze_soft/n/nb0c9f03f3451)にUbuntu 20.04でのmetasploitをインストールする方法を載せました。

# Metasploitとは
Metasploitとは、ペネトレーションテストや脆弱性診断で使用されるRuby製のオープンソースのツールです。
実際に脆弱性をつくExploitコード、脆弱性調査のための補助ツールなどが含まれたコマンドラインツールです。

##### 注意
**metasploitは、実際に攻撃用のツールとして扱えてしまうため、自分の管理下以外の環境や許可を得ていない環境以外では使用しないでください**

# インストール

## 必要なパッケージのインストール
metasploitに動かすのに必要なパッケージをインストールしていきます。

```bash:bash
$ sudo apt-get update
$ sudo apt-get install -y build-essential libreadline5 libreadline-dev libssl-dev libpcap-dev libxml2-dev libxslt1-dev libyaml-dev libsqlite3-dev postgresql libpq5 libpq-dev subversion git git-core autoconf curl zlib1g-dev
```

## Rubyのインストール
metasploitはRubyで動いているため、Rubyを入れる必要があります。

```bash:bash
$ cd ~/
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ echo 'export PATH="~/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
```

バージョンは最新の2.5.3を指定してください。ここは時間がかかるため、気長にお待ちください。

```bash:bash
$ rbenv install 2.5.3
$ rbenv global 2.5.3
```

## Postgresqlの設定

MetasploitではPostgresqlを扱うため、ユーザー名とデーターベースを作成しておきましょう。ここでは``msf``という名前のユーザーと、``msf``という名前のデーターベースを作成しています。

*postgresqlのインストール方法はここでは省きます。*

```bash:bash
## msfというユーザーを作成
## パスワードの入力が二回求められます。
$ sudo su postgres
$ createuser msf -P -S -R -D

## -O オプションで所有者ユーザーを決める
## ここではmsfというユーザーに所有者権限を与えている
$ createdb -O msf msf
$ exit
```

## Metasploit本体のインストール
Metasploit本体のインストールを行っていきます。お好きなディレクトリでgit cloneでMetasploitをダウンロードします。
``bundle install``で時間がかかるため、こちらも気長に待ちましょう。

```bash:bash
$ git clone https://github.com/rapid7/metasploit-framework.git
$ cd metasploit-framework
$ gem install bundler
$ bundle install
```

## Metasploitデータベースの設定
Metasploitからデーターベースであるpostgresqlを利用するための設定を行います。先程の「Postgresqlの設定」で行ったデーターベース名、ユーザー名とパスワードを設定します。

```bash:bash
$ vim config/database.yml
```

```bash:database.yml
production:
  adapter: postgresql
  database: msf
  username: msf
  password: #msfのパスワードをここに設定

  host: 127.0.0.1
  port: 5432
  pool: 75
  timeout: 5
```

## Metasploitを起動
```cd ..```コマンドで、```metasploit-framework```のあるトップディレクトリまで移動し、以下のコマンドでmetasploitを起動します。

```bash:bash
$ ./msfconsole
```

上記でデーターベースの設定をしたもののMetasploitからデーターベースの接続に失敗してしまうことがあります。
metasploit起動時に警告のようなものが表示された場合は以下のコマンドでデーターベースに接続されているか確認しましょう。
```no connection```と表示された場合は、postgresqlに接続されていません。

```bash:bash
$ msf > db_status
[*] postgresql selected, no connection
```
### msfconsoleからpostgresqlへの接続設定を行う
もし上記で```no connection```と表示されて、接続されていない場合は以下のコマンドでデーターベースに接続が行えます。

```bash:bash
# 上記のdatabase.ymlで設定した項目を入力します。
# username:password@127.0.0.1:5432/database
$ msf > db_connect msf:msf@127.0.0.1:5432/msf
```

再度、```db_status```を入力して、接続を確認します。
以下のように```postgresql connected to {database}```と表示されていれば接続されています。

```
$ msf > db_status
[*] postgresql connected to msf
```

## Metasploitの更新

Metasploitはエクスプロイトコードやモジュールが随時に更新されていきます。
以下のコマンドで新しいモジュールやエクスプロイトコードを追加して更新できます。

```
$ ./msfupdate
```



次回はDockerで脆弱性のある環境を動かして、metasploitで実際に脆弱性をついてみる方法についての記事を載せる予定です。

# 参考資料
[CLI から Metasploit をインストール](https://www.morihi-soc.net/?p=516)
[Metasploit Framework](https://wiki.archlinux.jp/index.php/Metasploit_Framework)