Metasploit: The Basics

ペネトレーションテストでよく利用されている「Metasploit」フレームワークの基礎を学ぶルームです。

Task1 Introduction to Metasploit Framewaork

ペネトレーションテスト(侵入テスト)で広く使われるオープンソースの脆弱性攻撃フレームワーク「Metasploit Framework」の基礎概要です。

自作のエクスプロイト開発には時間と技術が必要ですが、Metasploitは数千の攻撃コード(エクスプロイト)やペイロード、スキャナーなどを一元管理し、情報収集から攻撃、事後展開(ポストエクスプロイト)、報告書作成までの一連のライフサイクルを効率化します。

製品には、GUIや自動化を備えた商用版「Pro」と、Kali Linux等に標準搭載されているCLIベースのオープンソース版「Framework」の2種類があり、本教材では後者を扱います。

フレームワークは主に以下の3つの要素で構成されています。

msfconsole: モジュールの検索、設定、実行を行う主要なコマンドラインインターフェース(コックピット)。

モジュール: 特定の処理を行う独立したコードの塊。エクスプロイトやペイロードなど7つのカテゴリがあります。

ツール: スタンドアロンのペイロードを作成する「msfvenom」などの独立したコマンド群。

本ルームは全4種類あるMetasploitモジュールの初級編であり、基本的な操作方法やセッション管理の習得を目標としています。

Question

No answer needed

Task2 Core Concepts and Module Types

Metasploitを扱う上で最重要となる概念、モジュールの分類、およびペイロードの命名規則についてです。

まず、ハッキングの一連の流れを「脆弱性(鍵の壊れたドア)」「エクスプロイト(ドアを開ける行為)」「ペイロード(侵入後の行動、実行コード)」の3つに分解し、これらを正しく組み合わせることの重要性を説明しています。

次に、フレームワーク内の全モジュールを役割ごとに7つに分類しています。

  • Exploits: 特定の脆弱性を突く攻撃コード(最多)
  • Auxiliary: スキャナーや情報収集ツール
  • Payloads: 攻撃成功後に実行するコード
  • Post-Exploitation: 侵入後の情報奪取や権限昇格
  • Encoders: コード整形(バッドキャラクタ除去など)
  • NOPs: バッファオーバーフロー時のメモリ調整用
  • Evasion: 防御機能(Windows Defender等)の回避を試みるコード

最後にペイロードの種類と言語規則に触れています。ペイロードには、単体で完結する「シングル(インライン)」と、軽量な接続用コード(スタージャー)が後から本体(ステージ)を落とす「ステージド」があります。これらはパスの区切り文字で見分けられ、shell_reverse_tcp(アンダースコア)ならシングル、shell/reverse_tcp(スラッシュ)ならステージドを表します。

Qestion

What is the name of the code that takes advantage of a flaw on the target system?
ターゲットシステムの脆弱性を悪用するコードの名称は何ですか?

Answer

What is the name of the code that runs on the target system after a successful exploit?
エクスプロイトが成功した後、ターゲットシステム上で実行されるコードの名前は何ですか?

Answer


What type of payload is self-contained and does not require a second download?
どのような種類のペイロードが、すべてを内蔵しており、追加のダウンロードを必要としないものですか?

Answer

What symbol in a payload’s path name indicates it is a staged payload? 
ペイロードのパス名にあるどの記号が、それがステージド・ペイロードであることを示していますか?

Answer


Task3 Navigating Msfconsole

Metasploitの主要なCUI画面である「msfconsole」の起動方法から、効率的なモジュールの検索・調査方法までを解説しています。

ターミナルで msfconsole と入力して起動すると、専用のプロンプト(msf6 >)に切り替わります。コンソール内では whoami や ip といった標準的なLinuxコマンドがそのまま利用できるため、画面を切り替えずに攻撃側IPの確認などが可能です。

数千あるモジュールから目的のものを探すには search コマンドを使用します。キーワード単体での検索に加え、type:exploit や platform:windows、cve:年号 などのフィルタを組み合わせることで、対象の絞り込みが可能です。検索結果には、攻撃の成功率や安定性を示す7段階の「Rank(Excellent、Average段階など)」や、非破壊的な脆弱性検証が可能かを示す「Check」項目が表示されます。

候補を絞り込んだ後は、info <モジュール名または番号> コマンドで詳細(特権奪取の成否、必要オプション、CVE参照情報など)を確認し、実戦に即しているかを判断します。例として、歴史的かつ著名な脆弱性攻撃である「EternalBlue(MS17-010)」を挙げ、一連の検索・調査フローを説明しています。

Question

How would you search for all exploit modules related to Apache?
Apacheに関連するすべてのエクスプロイトモジュールを検索するにはどうすればよいでしょうか?

Answer

You found an interesting module in your search results listed as index number 3. What command would you use to view detailed information about it?
検索結果の3番目に、興味深いモジュールが見つかりました。そのモジュールの詳細情報を表示するには、どのようなコマンドを使いますか?

Answer

What command would you use to go back from a module’s context to the main `msf6 >` prompt?
モジュールのコンテキストからメインの `msf6 >` プロンプトに戻るには、どのようなコマンドを使いますか?

Answer

Task4 Configuring and Running Modules

モジュールの選択からパラメータ(変数)の設定、そして実際の攻撃実行にいたる一連のワークフローを解説しています。

はじめに、作業状況を示す5つのプロンプト(Linux通常、msfグローバル、モジュール選択中、Meterpreter、OSシェル)の違いを正しく把握することの重要性が示されます。

モジュールの操作手順は以下の通りです。

  1. 選択と確認: use <モジュール名> でロードし、show options で設定項目一覧を表示します。「Required」が「yes」の項目は必須入力です。
  2. 主要パラメータの設定: set <変数名> <値> を使用します。頻出する変数には、標的IPを指定する RHOSTS、攻撃側の待ち受けIPを指定する LHOST などがあります。また、setg を使うとセッション全体にグローバルな値を固定でき、別モジュールへ切り替えても設定が引き継がれます。
  3. ペイロードの変更: デフォルトから変更したい場合は、show payloads で互換性のある一覧を確認し、set PAYLOAD <名> で切り替えます。
  4. 実行: 設定完了後、exploit(または run)で攻撃を開始します。セッションを即座にバックグラウンドへ送る -z オプションや、攻撃前に安全に脆弱性の有無を調べる check コマンドも有用です。

Question

How would you set the LPORT value to 6666?
LPORTの値を6666に設定するにはどうすればよいですか?

Answer

How would you set the global value for RHOSTS to 10.10.19.23?
RHOSTS のグローバル値を 10.10.19.23 に設定するにはどうすればよいですか?

Answer

What command would you use to clear a set payload?
設定済みのペイロードを消去するには、どのコマンドを使いますか?

Answer

What command do you use to launch an exploit module?
エクスプロイトモジュールを起動するには、どのコマンドを使いますか?

Answer

You want to exploit a target but continue working in msfconsole immediately after the session opens. What flag do you add to the exploit command?
ターゲットをエクスプロイトしたいが、セッションが開いた直後にmsfconsoleでの作業を続けたいとします。エクスプロイトコマンドにどのようなフラグを追加しますか?

Answer

Task5 Managing Sessions

攻撃成功後に確立される標的マシンとの通信経路「セッション」の管理方法と、複数標的を扱う実戦での重要性を解説しています。

セッションには、多機能な環境を提供する「Meterpreter」、標準的なコマンドラインの「Shell」、特定のデータベース等に特化した「Protocol-specific」などの種類があり、それぞれ固有のID(識別番号)で管理されます。

セッション管理の主要コマンドとワークフローは以下の通りです。

  1. バックグラウンド化: 接続中の画面で background(または CTRL+Z)を実行すると、接続を維持したまま msfconsole の操作画面に戻れます。これにより、別の攻撃モジュールを同時並行で動かすことが可能になります。
  2. 一覧表示: sessions コマンドで、稼働中の全セッションのID、種類、権限情報(SYSTEM特権か一般ユーザーかなど)、接続元のIPペアを一覧確認できます。
  3. 再接続と切断: sessions -i <ID> で指定したセッションに再侵入し、sessions -k <ID> で特定のセッションを切断します(大文字の -K は全切断)。

また、奪取したセッションのIDは、侵入後の情報収集(ハッシュ奪取など)を行う「Post-Exploitationモジュール」の必須引数(SESSION 変数)としても再利用されます。

Question

What command do you use to background a Meterpreter session and return to the msfconsole prompt?
Meterpreterセッションをバックグラウンドに移行し、msfconsoleのプロンプトに戻るには、どのようなコマンドを使いますか?

Answer

What flag do you use with the `sessions` command to interact with a specific session by ID?
ID 指定で特定のセッションを操作するには、`sessions` コマンドにどのオプションを使いますか?

Answer

You have three active sessions. You need to terminate session 2 without affecting the others. What full command do you use?
現在、3つのセッションがアクティブです。他のセッションに影響を与えずに、セッション2を終了させる必要があります。どのfullコマンドを使用しますか?

Answer

Task7 Conclusion

このルームのまとめです。

構成要素の理解(Building Blocks)
Metasploitは機能を7つのモジュール(エクスプロイト、補助、ペイロード、事後展開、エンコーダ、NOP、回避)に分類しています。標的へのアクセスを奪取する基本メカニズムは、これらを組み合わせた「エクスプロイト $\rightarrow$ ペイロード」の連鎖です。

適切なモジュールの検索(Find)
6,100以上のライブラリから、search コマンド(type: や cve: などのフィルタ)を用いて目的のモジュールを絞り込み、info コマンスで技術詳細を確認して標的に適しているかを判断します。

設定と実行(Configure & Launch)
use でモジュールを読み込み、set / setg で変数を指定し、show options で確認します。準備完了後、exploit(または run)で実行します。安全な事前検証として check コマンドも有効です。

セッション管理(Manage)
background(一時退避)、sessions(一覧表示)、sessions -i(再侵入)により、複数標的への接続を効率的に管理します。セッションは対話型端末としてだけでなく、侵入後モジュールを動かすための再利用可能な接続経路となります。

Question

No answer needed