Nmap で Metasploit スキャナを開発する

NmapNmapBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Metasploit のモジュール構造と機能分析を再確認し、次にスキャナーの紹介に焦点を当てます。あなたは独自の Metasploit スキャナーを開発する方法を学びます。

この実験は実践的なチュートリアルです。いくつかの操作を理解するのを助けるために、いくつかの情報セキュリティ理論を含め、読む価値のある記事をおすすめします。これにより、実践しながら理論的な基礎を固めることができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/host_discovery("Host Discovery Techniques") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") subgraph Lab Skills nmap/port_scanning -.-> lab-416123{{"Nmap で Metasploit スキャナを開発する"}} nmap/host_discovery -.-> lab-416123{{"Nmap で Metasploit スキャナを開発する"}} nmap/target_specification -.-> lab-416123{{"Nmap で Metasploit スキャナを開発する"}} nmap/service_detection -.-> lab-416123{{"Nmap で Metasploit スキャナを開発する"}} end

Metasploit の構造を復習し、simple_tcp.rb ファイルを作成する

まず、Metasploit の構造を復習しましょう。

Metasploit は、コードの再利用効率を向上させるためにモジュール化された概念で設計されています。このフレームワークは Ruby で開発されており、Perl、C、アセンブリ、Python で書かれたコンポーネントも含まれています。主に Linux オペレーティングシステム向けに設計されているため、そのコマンド構造は Linux コマンドシェルに非常に似ています。ただし、現在では Windows、Solaris、Mac などの主要なオペレーティングシステムをすべてサポートしています。

+---------------+------------------+----------------------------------------------+
| English Name  | Module Name      | Description                                  |
+---------------+------------------+----------------------------------------------+
| `Aux`         | Auxiliary Module | Provides a wealth of auxiliary modules for   |
|               |                  | information gathering during penetration,    |
|               |                  | including scanning and fingerprinting        |
|               |                  | various network services, building fake      |
|               |                  | services to collect login credentials,       |
|               |                  | password guessing, etc.                      |
+---------------+------------------+----------------------------------------------+
| `Exploits`    | Exploit Module   | Code components that exploit discovered      |
|               |                  | security vulnerabilities or configuration    |
|               |                  | weaknesses to attack remote target systems,  |
|               |                  | plant and run payloads, and gain access      |
|               |                  | control over the target systems.             |
+---------------+------------------+----------------------------------------------+
| `Post`        | Post-Exploit     | Supports various post-exploitation actions   |
|               | Module           | on the controlled system after gaining       |
|               |                  | remote access control through exploitation,  |
|               |                  | such as obtaining sensitive information,     |
|               |                  | further pivoting, and launching pivot        |
|               |                  | attacks.                                     |
+---------------+------------------+----------------------------------------------+
| `Payloads`    | Payload Module   | Payloads are code segments that run on the   |
|               |                  | target system after a successful             |
|               |                  | exploitation, typically to open a control    |
|               |                  | session connection for the attacker.         |
+---------------+------------------+----------------------------------------------+
| `Encoders`    | Encoder Module   | After assembling the payload and NOP         |
|               |                  | instructions into an instruction sequence,   |
|               |                  | Metasploit needs to perform an important     |
|               |                  | encoding step before the exploit module      |
|               |                  | injects the malicious data buffer into the   |
|               |                  | target system for execution.                 |
+---------------+------------------+----------------------------------------------+
| `Nops`        | NOP Module       | NOP (No Operation) instructions are          |
|               |                  | operations or instructions that have no      |
|               |                  | substantial effect on the program's          |
|               |                  | execution state.                             |
+---------------+------------------+----------------------------------------------+

Metasploit はまた、いくつかの脆弱性スキャナーコンポーネントを統合しています。例えば:

  • Nmap スキャナー:Windows、Linux、Mac OS に適しています。ホストの発見、ポートスキャンまたは列挙、サービスの発見、オペレーティングシステム、ハードウェアアドレス、ソフトウェアバージョン、脆弱性の検出に使用されます。

  • NeXpose スキャナー:ネットワークをスキャンして稼働中のデバイスを見つけ、そのオペレーティングシステムとアプリケーションの脆弱性を特定し、スキャンしたデータを分析し、脆弱性スキャンレポートを生成します。

  • Nessus スキャナー:最も広く使用されている脆弱性スキャンツールの 1 つです。クライアント/サーバーモデルを採用しており、サーバーがセキュリティチェックを実行し、クライアントがサーバーを構成および管理します。サーバーはまた、プラグインシステムを使用しており、ユーザーが特定の機能やより複雑なセキュリティチェック用のプラグインを追加できます。

では、simple_tcp.rb という新しい Metasploit スキャナーモジュールを作成しましょう。

  1. LabEx ホストマシンで xfce ターミナルを開き、以下のコマンドを実行して Metasploitable2 ターゲットを起動します。
sudo virsh start Metasploitable2

ターゲットマシンが起動するのを待ちます。これには 1 ~ 3 分かかる場合があります。

  1. ターゲットマシンに ping を送信して接続性をテストします。
ping 192.168.122.102

Ctrl+C を押して ping を停止します。

  1. Kali Linux コンテナを起動し、以下のコマンドを実行して bash 環境に入ります。
docker run -ti --network host b5b709a49cd5 bash
  1. Kali コンテナ内で、ターゲットマシンへのネットワーク接続をテストします。
ping 192.168.122.102

Ctrl+C を押して ping を停止します。

  1. 次に、scanner モジュールディレクトリに移動します。
cd /usr/share/metasploit-framework/modules/auxiliary/scanner
  1. simple_tcp.rb という名前の新しいファイルを作成します。
sudo vi simple_tcp.rb
  1. 以下のコードをコピーしてファイルに貼り付けます。
require 'msf/core'
class MetasploitModule < Msf::Auxiliary
    include Msf::Exploit::Remote::Tcp
    include Msf::Auxiliary::Scanner

    def initialize
        super(
            'Name'        => 'Mr_Zhou Scanner',
            'Version'     => '$Revision$',
            'Description' => 'Shiyanlou TCP Scanner',
            'Author'      => 'lucat',
            'License'     => MSF_LICENSE
        )
        register_options(
            [
                Opt::RPORT(12345)
            ], self.class)
    end

    def run_host(ip)
        connect()
        sock.puts('HELLO SERVER')
        data = sock.recv(1024)
        print_status("Received: #{data} from #{ip}")
        disconnect()
    end
end
  1. このコードは、TCP ポートをスキャンし、サーバーから受信したデータを表示する "Mr_Zhou Scanner" という新しい Metasploit モジュールを定義しています。コードを見ていきましょう。
def initialize
    super(
        'Name'        => 'Mr_Zhou Scanner',
        'Version'     => '$Revision$',
        'Description' => 'Shiyanlou TCP Scanner',
        'Author'      => 'lucat',
        'License'     => MSF_LICENSE
    )

このセクションでは、モジュールの名前、説明、作者、ライセンスなどのメタデータを設定しています。

register_options(
    [
        Opt::RPORT(12345)
    ], self.class)

この行は、ポート 12345 をスキャンするオプションを登録しています。

def run_host(ip)
    connect()
    sock.puts('HELLO SERVER')
    data = sock.recv(1024)
    print_status("Received: #{data} from #{ip}")
    disconnect()
end

このメソッドは、各ターゲット IP アドレスに対して実行されます。指定されたポートに接続し、"HELLO SERVER" という文字列を送信し、サーバーからのデータを受信して表示し、その後切断します。

ファイルを保存し、エディターを終了します。

リスニングサーバーをセットアップする

simple_tcp.rb スキャナーをテストするために、ターゲットマシン上にリスニングサーバーをセットアップする必要があります。

LabEx ホストで新しい Xfce ターミナルを開きshiyanlou.txt という名前のファイルを作成します。

vi shiyanlou.txt

このファイルに、任意のテキストを入力します。このテキストは、スキャナーがリスニングポートに接続したときにスキャナーに返されます。例えば:

Life is short, i use Python.

ファイルを保存し、エディターを終了します。

次に、ポート 12345(スキャナーが設定されているポート)でリスニングサーバーを起動し、接続してきたクライアントに shiyanlou.txt の内容を送信します。

sudo nc -l 12345 < shiyanlou.txt

これでサーバーはポート 12345 でリスニングし、着信接続を待機する状態になります。

simple_tcp スキャナーを実行する

simple_tcp スキャナーモジュールとリスニングサーバーがセットアップされたので、スキャナーを実行して動作を確認しましょう。

まず、Kali Linux コンテナ内で Metasploit コンソールを起動します。

cd ~
sudo msfconsole

コンソールが読み込まれたら、simple_tcp モジュールを使用します。

use auxiliary/scanner/simple_tcp

info コマンドでモジュール情報を表示できます。

info

以下は、表示される出力の例です。

Name:          Mr_Zhou Scanner
Description:   Shiyanlou TCP Scanner
Author:        lucat
License:       Metasploit Framework License (BSD)
Version:       $Revision$

次に、ターゲットホストの IP アドレスを設定します。

set RHOSTS 192.168.122.1

注意:RHOST ではなく RHOSTS(末尾に 's' がある)を使用してください。show options コマンドで使用するオプションを確認できます。

最後に、スキャナーを実行します。

run

すべてが正しくセットアップされていれば、リスニングサーバーからのメッセージが表示されるはずです。

[+] Received: Life is short, i use Python. from 192.168.122.1

このメッセージが表示されない場合は、リスニングサーバーに戻り、sudo nc -l 12345 < shiyanlou.txt を再度実行してください。

おめでとうございます!独自の Metasploit スキャナーモジュールを開発し、テストすることに成功しました。

Ctrl+D を押して Metasploit コンソールを終了し、次に検査を開始します

まとめ

この実験では、独自の Metasploit スキャナーモジュールを開発する方法を学びました。Metasploit のモジュール構造を復習し、simple_tcp.rb という新しい TCP スキャナーモジュールを作成し、スキャナーをテストするためのリスニングサーバーをセットアップし、スキャナーを正常に実行してサーバーからのデータを受信し表示しました。

Metasploit スキャナーを開発するこの実践的な経験は、フレームワークの機能と、カスタムモジュールで拡張する方法をより深く理解するのに役立ちます。この知識を利用して、さまざまな侵入テストタスクに対応するより高度なスキャナーや他の種類のモジュールを作成することができます。