SSTエンジニアブログ

SSTのエンジニアによるWebセキュリティの技術を中心としたエンジニアブログです。

Metasploitable3触ってみた

はじめに

ドルフロの異性体イベントをストーリークリアしたので、これからランキング戦とドロ周回で大忙しなため仕事する気が起きない岩間です。ガンスリコラボで参入した新規さんついてこられるのか・・・?
今回は、業務検証で利用することになったMetasploitable3についての紹介とWordpressとElasticSearchのエクスプロイトについて書いていきます。

注意

ここで紹介する攻撃は自分の管理下にあるネットワークやサーバに対してのみ行ってください。
管理外のネットワークやサーバには絶対に行わないでください。

想定読者

  • 脆弱性に関する検証を行いたいけど自分で作るのが面倒くさい方
    • めたすぷろいたぶる?なにそれ美味しいの?という方
    • Metasploitable2は使った事あるけどMetasploitable3は使った事がないという方
  • 冬休みの自由課題で困ってる方

Metasploitable3とは

Metasploitable3は、Metasploitのエクスプロイトを検証するために作成された仮想マシン(VM)です。
予め大量の脆弱性が意図的に仕込まれており、Metasploitだけでなくその他のセキュリティスキャンツールの検証や学習のためのトレーニング教材としても使用することができます。
管理組織はNexposeやMetasploit Proを開発しているRapid7社です。

「3」というナンバリングから推測できるように、MetasploitableとMetasploitble2が旧バージョンとして存在しています。Metasploitableは流石に古すぎるためか調べても殆ど情報が出てきませんが、Metasploitable2は現在でも検証用として有名です。
しかし、2012年以降(初回リリース以降?)は新規の脆弱性が追加されておらず、脆弱性以外にもMetasploitable2プロジェクトのメンテナンスがしばらくされていないなどの理由から2016年にMetasploitable3がリリースされました。

Metasploitable3の特徴

日本語の情報も充実してきているため、調べれば分かることですがざっくりとMetasploitable2と比べた時の特徴を記載します。

Linux Edition(ub1404)とWindows Edition(win2k8)がある

Metasploitable2ではLinuxのみでしたが、Metasploitable3からはWindows Server2008が追加されています。
Windows系の脆弱性を検証するのに、わざわざ構築する手間が省けるので便利ですね。(バージョンが古いのはしょうがない)
ただし試用版ライセンスのため、試用期間が設定されていることと商用で利用する場合(無いと思うけど・・・)は、利用規約を違反していないか確認する必要があります。

Metasploitable2よりも新しい脆弱性,サービスが追加されている

Metasploitable2の後継なので当然と言えますが、検証する身としては多様な検証が可能になるので嬉しいです。
ElasticSearchやJenkinsなどが入っています。詳しくは公式リポジトリのVulnerabilitiesページをご覧ください。 ちなみに、このページに記載されていないものでDockerなどもインストールされています。(DockerはもしかしたらCTF用かもしれません)

低難易度モードが設定できる

一部のWindowsサーバに対するエクスプロイトは、パーミッションの設定やファイアウォールのバイパスを考える必要があったり、特権昇格を行う必要があるようです。 バイパス方法を考える事も学習の一環ですが、何らかの理由でセキュリティ設定をOFFにしたい場合は、MS3_DIFFICULTY 環境変数を設定することで無効にできるようです。

$ MS3_DIFFICULTY=easy vagrant up

VMが既に作成されている場合は、コマンドプロンプトから次のコマンドを実行します。

$ netsh advfirewall set allprofiles state off

CTFが用意されている

CTF問題がいくつか用意されており、リバースエンジニアリングの知識が必要らしいです。
write upも公開されているようですし、興味ある方は挑戦してみてはいかがでしょうか。

インストール方法

VagrantやVirtualBox環境が整っている方は、githubのクイックスタートが早いです。

Linuxの場合

mkdir metasploitable3-workspace
cd metasploitable3-workspace
curl -O https://raw.githubusercontent.com/rapid7/metasploitable3/master/Vagrantfile && vagrant up

Windowsの場合

mkdir metasploitable3-workspace
cd metasploitable3-workspace
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/rapid7/metasploitable3/master/Vagrantfile" -OutFile "Vagrantfile"
vagrant up

自分はWindowsのパターンでインストールを行いましたが、特に問題なくインストールできました。
RequirementsにPackerが必要と書いてありますが、自分はインストールしなくても成功したのでクイックスタートの場合は無くても大丈夫なのかも・・・?

ちなみにVagrant のBoxダウンロードは結構時間が掛かります。自分は無量空処を構えながら呪術廻戦を2.5本見たところで完了しました。

インストール直後の構成

分かり難いかもしれませんが、以下のような構成になっています。

f:id:wild0ni0n:20201209023153p:plain

それぞれの端末にNATアダプタとホストオンリーアダプタが設定されていました。
NATアダプタはVagrant ssh用に設定されているみたいです。WindowsサーバはVagrant用ssh以外にもルールが設定されていましたが用途が分からず。

Wordpressの修正

WordpressはWindowsサーバのWAMP環境上で構築されています。
ホスト端末や別の端末のブラウザからhttp://[windowsサーバのIP]:8585/wordpress/ にアクセスすると、以下のようにCSSが反映されていない画面が表示されました。また、他のページにもアクセスできずリンクを見るとIPが異なることが分かります。

f:id:wild0ni0n:20201209023829p:plain
IPが異なる

Wordpressインストール時にNATアダプタにバインドされたIPでインストールされてしまったようなので、MySQLに直接アクセスしてサイトURLを変更します。
CLIから操作してもよいですが、phpMyAdminが折角インストールされているので利用します。

Windowsサーバのコンソールを開き、http://localhost:8585/phpmyadmin/ にアクセスします。

f:id:wild0ni0n:20201209024151p:plain

wordpress を選択します。

f:id:wild0ni0n:20201209024309p:plain

wp_options テーブルを選択します。
siteurlhome に設定されているURLのIPアドレスをWindowsサーバのIPアドレスに変更します。

別の端末からブラウザでWordpressの画面を確認します。

f:id:wild0ni0n:20201209024429p:plain

これで問題なく動作していることが分かりました。

Metasploitを使ってみる(Wordpress編)

当初の目的の業務検証ではMetasploitは使いませんが、折角構築したのですからMetasploitを使ったエクスプロイトを試してみます。

とりあえずWordpressなのでwpscanを行います。

root@kali:~# wpscan --url http://172.28.128.5:8585/wordpress/ --enumerate p --plugins-detection aggressive
[i] Plugin(s) Identified:

[+] akismet
    ...(略)...
[+] ninja-forms
 | Location: http://172.28.128.5:8585/wordpress/wp-content/plugins/ninja-forms/
 | Last Updated: 2020-11-16T19:13:00.000Z
 | Readme: http://172.28.128.5:8585/wordpress/wp-content/plugins/ninja-forms/readme.txt
 | [!] The version is out of date, the latest version is 3.4.32
 |
 | Found By: Known Locations (Aggressive Detection)
 |  - http://172.28.128.5:8585/wordpress/wp-content/plugins/ninja-forms/, status: 200
 |
 | Version: 2.9.42 (100% confidence)
 | Found By: Readme - Stable Tag (Aggressive Detection)
 |  - http://172.28.128.5:8585/wordpress/wp-content/plugins/ninja-forms/readme.txt
 | Confirmed By: Readme - ChangeLog Section (Aggressive Detection)
 |  - http://172.28.128.5:8585/wordpress/wp-content/plugins/ninja-forms/readme.txt

オプション無しでスキャンしたところ、プラグインが検出されなかったのでプラグイン検出をアグレッシブモードにしました。
akismetninja-forms がインストールされているようです。 akismetはデフォルトでインストールされているプラグインですが、ninja-formsは怪しいです。バージョン情報も判明しているのでExploitDBで検索してみます。

f:id:wild0ni0n:20201209024752p:plain

それっぽいのがあります。調べてみると、Ninja Forms 2.9.42にはFile upload(CVE-2016-1209)の脆弱性があることが分かりました。

MetasploitでCVE番号で検索します。

f:id:wild0ni0n:20201209025130p:plain

exploit/multi/http/wp_ninja_forms_unauthenticated_file_upload のモジュールが利用できるので、これを使っていきます。

次に必要なオプションを設定していきます。 今回はお試しなのでオプションの説明は省略します。

f:id:wild0ni0n:20201209025349p:plain

show optionsで設定を確認します。

f:id:wild0ni0n:20201209025428p:plain

exploitを実行するとmeterpreterのセッションが取れている事が確認できます。

f:id:wild0ni0n:20201209025506p:plain

sysinfoコマンドでWindowsサーバのシステム情報を取得したり、lsコマンドでCドライブ直下のファイルやディレクトリを一覧表示することができました。

f:id:wild0ni0n:20201209025600p:plain

ちなみにこのmeterpreterのプロセスはLOCAL SERVICEとして動いており色々と制約が多いです。より上位の権限に昇格したいところですが、今回は割愛します。

Metasploitを使ってみる(ElasticSearch編)

ElasticSearchでも試してみました。 本来のペネトレーションテストであれば、脆弱性を見つけるまでの工程としてポートスキャンやバージョン情報の取得といった手順が必要だと思いますが、業務時間の都合上省きます(;'∀')

Vulnerabilitiesページで攻撃可能なモジュール名が公開されているので、exploit/multi/elasticsearch/script_mvel_rceモジュールを使って攻撃してみました。

f:id:wild0ni0n:20201209121013g:plain

ね?簡単でしょう?

終わりに

Metasploitable3の紹介と簡単なMetasploitを使ったエクスプロイトを紹介しました。
今まで脆弱性検証と言えば、Metasploitable2やOWASPのBroken Web Applicationを利用していましたが、これからはMetasploitable3も使って行きたいと思いました。CTFなども用意されているようなので色々と楽しめそうです。

今回はMetasploitable3の構築がメインで、Metasploitは業務の合間の暇つぶしに利用しただけなので突っ込みどころが多いかもしれませんがご容赦ください(;'∀')
Metasploitable2は使い慣れてるけど、Metasploitable3はまだ使ったことがないという方は是非使ってみてはいかがでしょうか!