Nmap Scripting Engine の活用

NmapNmapBeginner
今すぐ練習

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

はじめに

この実験では、Nmap スクリプティング エンジンを活用する方法を学びます。この実験では、デフォルトのスクリプトを実行し、特定のスクリプトを使用し、スクリプトに引数を追加し、スクリプトを更新し、複数のスクリプトをテストし、Xfce 端末でスクリプトの出力を表示する方法について説明します。nmap -sCnmap --scriptnmap --script-updatedb などのコマンドを対象の IP アドレスに対して実行して、さまざまなスキャンを行い、情報を収集します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/output_formats("Output Formats") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") nmap/NmapGroup -.-> nmap/scripting_basics("Scripting Engine Basics") nmap/NmapGroup -.-> nmap/script_management("Script Categories and Updating") subgraph Lab Skills nmap/output_formats -.-> lab-530187{{"Nmap Scripting Engine の活用"}} nmap/port_scanning -.-> lab-530187{{"Nmap Scripting Engine の活用"}} nmap/service_detection -.-> lab-530187{{"Nmap Scripting Engine の活用"}} nmap/scripting_basics -.-> lab-530187{{"Nmap Scripting Engine の活用"}} nmap/script_management -.-> lab-530187{{"Nmap Scripting Engine の活用"}} end

nmap -sC 192.168.1.1 を使ってデフォルトのスクリプトを実行する

このステップでは、Nmap を使って対象に対してデフォルトのスクリプトセットを実行する方法を調べます。Nmap スクリプトは、脆弱性の特定から対象システムに関する情報の収集まで、幅広いタスクを自動化できる強力なツールです。-sC オプションは、Nmap に「デフォルト」のスクリプトカテゴリを使用するように指示します。このカテゴリには、一般的なスキャンにとって安全で有用であると考えられるスクリプトが含まれています。

始める前に、正しいディレクトリにいることを確認しましょう。

cd ~/project

次に、対象の IP アドレス 192.168.1.1 に対して -sC オプションで Nmap を実行しましょう。この IP アドレスは仮のものです。実際のシナリオでは、これを対象とする実際の IP アドレスに置き換えます。この実験環境では、192.168.1.1 が有効な対象であると仮定します。

sudo nmap -sC 192.168.1.1

このコマンドは、標準的な Nmap スキャン(ポートスキャンとサービス検出を含む)を実行し、次に開いているポートに対してデフォルトのスクリプトを実行します。出力には、ポートスキャン、サービス検出の結果、およびスクリプトによって収集された情報が表示されます。

出力は次のようになります(正確な出力は対象システムによって異なります):

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu)
| ssh-hostkey:
|   2048 ... (RSA)
| ssh-rsa ...
|_ssh-algorithm: ...
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: -1s, deviation: 0s, median: -1s
|_nbstat: NetBIOS name: ..., NetBIOS user: ..., NetBIOS MAC: ... (unknown)
| smb-os-discovery:
|   OS: Unix
|   ...
|_  System time: ...

Nmap done: 1 IP address (1 host up) scanned in ... seconds

この例では、出力によるとポート 22 が開いており、SSH が実行されています。ssh-hostkey スクリプトが SSH ホストキーを特定し、ssh-algorithm スクリプトがサポートされているアルゴリズムを特定しています。clock-skew スクリプトが対象システムのわずかなクロックズキューを検出しています。nbstatsmb-os-discovery スクリプトがそれぞれ NetBIOS と SMB サービスに関する情報を収集しています。

このステップでは、特定の Nmap スクリプトをどのように使用するかを学びます。Nmap には、さまざまなタスクを実行するために使用できる大きなスクリプト ライブラリがあります。ここでは、対象ホスト上で実行されているサービスからバナーを取得しようとする banner スクリプトを使用します。バナーには、ソフトウェア バージョンやその他の詳細に関する情報が含まれており、偵察に役立つ場合があります。

まず、~/project ディレクトリにいることを確認します。

cd ~/project

次に、--script オプションを使って nmap コマンドを使用して、banner スクリプトを指定し、localhost の IP アドレス 127.0.0.1 を対象にします。

sudo nmap --script banner 127.0.0.1

このコマンドは、Nmap に対して 127.0.0.1 のすべての開いているポートに対して banner スクリプトを実行するように指示します。出力には、取得されたバナーを含むスクリプトの結果が表示されます。

出力は次のようになる場合があります(正確な出力は、localhost 上で実行されているサービスによって異なります):

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000028s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE SERVICE
22/tcp   open  ssh
111/tcp  open  rpcbind
631/tcp  open  ipp
5900/tcp open  vnc
8000/tcp open  http
8080/tcp open  http

Host script results:
|_banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_banner: 111/tcp:  rpcbind version 2-4
|_banner: 631/tcp: CUPS v2.4.1
|_banner: 5900/tcp: RFB 003.008
|_banner: 8000/tcp: Werkzeug/2.0.1 Python/3.9.7
|_banner: 8080/tcp: Jetty(9.4.44.v20210927)

Nmap done: 1 IP address (1 host up) scanned in ... seconds

この例では、banner スクリプトが 127.0.0.1 上で実行されているいくつかのサービス(SSH、rpcbind、CUPS、VNC、および HTTP サーバー)からバナーを正常に取得しました。バナーには、使用されているソフトウェア バージョンに関する情報が含まれています。

nmap --script http-title --script-args http.useragent=Test 192.168.1.1 で引数を追加する

このステップでは、Nmap スクリプトに引数を渡す方法を学びます。一部のスクリプトでは、引数をカスタマイズする必要がある場合や許可されています。ここでは、http-title スクリプトを使用して、その http.useragent 引数を変更します。http-title スクリプトは、HTTP サーバーからタイトルを取得します。http.useragent 引数は、HTTP 要求を行う際にスクリプトが使用する User-Agent 文字列を指定します。

まず、作業ディレクトリに移動しましょう。

cd ~/project

次に、--script オプションを使って Nmap を実行して http-title スクリプトを指定し、--script-args オプションを使って http.useragent 引数を Test に設定します。対象の IP アドレスは 192.168.1.1 を使用します。実際のシナリオでは、これを HTTP サーバーを実行している対象の実際の IP アドレスに置き換えます。

sudo nmap --script http-title --script-args http.useragent=Test 192.168.1.1

このコマンドは、Nmap に対して 192.168.1.1 の開いている HTTP ポートに対して http-title スクリプトを実行し、User-Agent 文字列を "Test" として使用するように指示します。

出力は次のようになる場合があります(正確な出力は対象システムとその HTTP サーバーの設定によって異なります):

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE VERSION
80/tcp open  http    nginx 1.18.0
|_http-title: Test

Nmap done: 1 IP address (1 host up) scanned in ... seconds

この例では、http-title スクリプトが 192.168.1.1 のポート 80 で実行されている HTTP サーバーからタイトルを正常に取得しました。http.useragent 引数は、HTTP 要求で User-Agent 文字列を "Test" に設定するために使用されました。サーバーはこの User-Agent 文字列をログに記録する場合があり、スキャンの特定に役立つ場合があります。対象がポート 80 を開いていない場合、異なる出力が表示されます。

nmap --script-updatedb を使ってスクリプトを更新する

このステップでは、Nmap のスクリプト データベースを更新します。Nmap スクリプティング エンジン (NSE) は、スクリプトのデータベースに依存しています。時間の経過とともに、新しいスクリプトが追加され、既存のスクリプトが更新されます。最新のスクリプトを使用できるようにするには、定期的にスクリプト データベースを更新する必要があります。

まず、~/project ディレクトリにいることを確認します。

cd ~/project

次に、--script-updatedb オプションを使って nmap コマンドを使用して、スクリプト データベースを更新します。

sudo nmap --script-updatedb

このコマンドは、最新のスクリプト情報をダウンロードしてデータベースを更新します。出力には、更新の進捗状況が表示されます。

出力は次のようになる場合があります。

Starting Nmap 7.80 ( https://nmap.org ) at ...
NSE: Updating rule database.
NSE: Using nmap.org/svn/nse_svn to download the latest scripts.
Downloaded nmap-mac-prefixes.lua
Downloaded nselib/data/nmap-services.
Downloaded nselib/data/service-ports.
Downloaded scripts/script.db
NSE: Script database updated.
Nmap done: 0 IP addresses (0 hosts up) scanned in ... seconds

この出力は、スクリプト データベースが正常に更新されたことを示しています。これで、最新の Nmap スクリプトを使用できるようになりました。

nmap --script banner,http-title 127.0.0.1 を使って複数のスクリプトをテストする

このステップでは、複数の Nmap スクリプトを同時に実行します。これにより、1 回のスキャンで対象に関するより多くの情報を収集できます。対象 127.0.0.1 に対して bannerhttp-title スクリプトを使用します。

まず、作業ディレクトリに移動しましょう。

cd ~/project

次に、--script オプションを使って Nmap を実行し、コンマで区切って bannerhttp-title スクリプトを指定します。対象の IP アドレスとして 127.0.0.1 を使用します。これはローカル マシンを指します。

sudo nmap --script banner,http-title 127.0.0.1

このコマンドは、Nmap に対して 127.0.0.1 の開いているポートに対して bannerhttp-title スクリプトの両方を実行するよう指示します。banner スクリプトはサービス バナーを取得しようとし、http-title スクリプトは HTTP サーバーからタイトルを取得します。

出力は次のようになる場合があります(正確な出力は 127.0.0.1 で実行されているサービスによって異なります):

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000018s latency).
Loopback interface ignored
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu)
| banner: SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.1
|_ssh-hostkey:
80/tcp open  http    nginx 1.18.0
|_http-title: Welcome to nginx!

Nmap done: 1 IP address (1 host up) scanned in ... seconds

この例では、banner スクリプトがポート 22 から SSH バナーを取得し、http-title スクリプトがポート 80 で実行されている HTTP サーバーからタイトルを取得しました。対象がこれらのポートを開いていない場合、異なる出力が表示されます。

Xfce ターミナルでスクリプトの出力を表示する

このステップでは、Xfce ターミナル内で Nmap スクリプトの出力を表示することに焦点を当てます。Xfce ターミナルは LabEx VM 環境の既定の端末エミュレータです。前のステップで既に使用してきました。このステップは、出力をどのように解釈するかを理解することに関するものであり、新しいコマンドを実行することに関するものではありません。

Nmap スクリプトの出力は、スキャンが完了した後、直接ターミナルに表示されます。出力の形式は、スクリプト自体に依存します。一部のスクリプトは単純なテキスト出力を提供し、他のスクリプトはより構造化されたデータを提供する場合があります。

前のステップのコマンドを見直してみましょう。

sudo nmap --script banner,http-title 127.0.0.1

このコマンドを実行すると、出力が直接 Xfce ターミナルに印刷されます。ターミナル出力をスクロールして、bannerhttp-title スクリプトの結果を確認することができます。

たとえば、出力には次のようなものが含まれる場合があります。

  • バナー情報banner スクリプトは、開いているポートからサービス バナーを取得しようとします。これにより、特定のポートで実行されているソフトウェアのバージョンを明らかにすることができます。
  • HTTP タイトルhttp-title スクリプトは、HTTP サーバーが提供する Web ページのタイトルを取得します。

重要なのは、有用な情報を探すために出力を注意深く調べることです。Xfce ターミナルは、この情報を表示するための簡単で直接的な方法を提供します。必要に応じて、grep のような標準的な Linux ツールを使って出力をフィルタリングすることもできます。たとえば、「http-title」を含む行のみを見つけるには、nmap コマンドの出力を grep にパイプすることができます。

sudo nmap --script banner,http-title 127.0.0.1 | grep "http-title"

このコマンドは、以前と同じ Nmap スキャンを実行しますが、出力の中で文字列「http-title」を含む行のみを表示します。これは、出力の特定の部分に焦点を当てるのに役立ちます。

このステップは主に観察と理解に関するものです。実行する単一のコマンドはありませんが、Xfce ターミナル環境内で前のステップで既に生成した結果をどのように解釈するかに焦点が当てられています。

まとめ

この実験では、参加者はさまざまなコマンドを使って Nmap スクリプト エンジンを活用する方法を学びました。まず、nmap -sC を使って対象の IP に対してデフォルトのスクリプトを実行しました。これには、一般的なスキャンに役立つ安全で便利なスクリプトが含まれています。また、nmap --script を使って特定のスクリプトを使用し、--script-args を使ってスクリプトに引数を追加し、--script-updatedb を使ってスクリプトを更新し、一度に複数のスクリプトをテストする方法も学びました。最後に、Xfce ターミナルでスクリプトの出力を表示しました。