Nmap で HTTP サービスを列挙する

NmapNmapBeginner
今すぐ練習

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

はじめに

この実験では、Nmap を使って HTTP サービスを列挙する方法を学びます。まず、http-enumスクリプトを使ってターゲット IP アドレス192.168.1.1で HTTP 列挙を実行します。次に、127.0.0.1のポート 80 をスキャンし、ユーザーエージェントを追加して列挙結果を保存します。最後に、HTTP の調査結果を確認し、Xfce 端末でのバナースキャンと比較します。

覚えておいてください。実際のシナリオでは、明示的な許可がある場合にのみネットワークとシステムをスキャンする必要があります。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/output_formats("Output Formats") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/os_version_detection("OS and Version Detection") 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-547098{{"Nmap で HTTP サービスを列挙する"}} nmap/save_output -.-> lab-547098{{"Nmap で HTTP サービスを列挙する"}} nmap/port_scanning -.-> lab-547098{{"Nmap で HTTP サービスを列挙する"}} nmap/target_specification -.-> lab-547098{{"Nmap で HTTP サービスを列挙する"}} nmap/os_version_detection -.-> lab-547098{{"Nmap で HTTP サービスを列挙する"}} nmap/service_detection -.-> lab-547098{{"Nmap で HTTP サービスを列挙する"}} nmap/scripting_basics -.-> lab-547098{{"Nmap で HTTP サービスを列挙する"}} nmap/script_management -.-> lab-547098{{"Nmap で HTTP サービスを列挙する"}} end

nmap --script http-enum を使って HTTP 列挙を実行する 192.168.1.1

このステップでは、Nmap とhttp-enumスクリプトを使って、ターゲットマシン上の HTTP サービスを列挙します。このスクリプトは、一般的な Web サーバーファイルやディレクトリを見つけることで、潜在的な脆弱性や設定ミスを特定するのに役立ちます。

始める前に、Nmap と NSE スクリプトが何かについて簡単に説明しましょう。Nmap(「Network Mapper」)は、ネットワーク探索とセキュリティ監査用の無料のオープンソースユーティリティです。NSE(Nmap Scripting Engine)は、ユーザーがさまざまなネットワーキングタスクを自動化するためのスクリプトを書けるようにします。http-enumスクリプトは、一般的な HTTP リソースを列挙するために設計されたそのような NSE スクリプトの 1 つです。

この実験では、IP アドレス192.168.1.1をターゲットにします。実際のシナリオでは、テストする明示的な許可があるネットワークとシステムのみをスキャンする必要があることに注意してください。

では、Nmap コマンドを実行しましょう:

sudo nmap --script http-enum 192.168.1.1

このコマンドは Nmap に次のことを指示します:

  • sudo:特定の Nmap 操作には必要な可能性のあるスーパーユーザー権限でコマンドを実行する。
  • nmap:Nmap ツールを呼び出す。
  • --script http-enumhttp-enumスクリプトを使用したいことを指定する。
  • 192.168.1.1:スキャンするターゲット IP アドレス。

コマンドを実行した後、次のような出力が表示されます(正確な出力はターゲットシステムによって異なります):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
80/tcp open  http
|_http-enum:
|  /icons/: Potentially interesting directory w/ listing on 'apache/2.4.18 (ubuntu)'
|  /robots.txt: Robots file
|_ /server-status/: Server status page

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

出力は、http-enumスクリプトがいくつかの興味深いリソースを見つけたことを示しています:

  • /icons/:アイコンが含まれており、Web サーバーに関する情報を明らかにする可能性のあるディレクトリ。
  • /robots.txt:Web ロボットによるウェブサイトのクローリング対象外の部分を指定するファイル。
  • /server-status/:サーバーのステータス情報を表示するページ。

これらの結果は、潜在的な脆弱性や設定ミスを特定するためにさらに調査することができます。

nmap --script http-enum -p 80 を使ってポート 80 をスキャンする 127.0.0.1

このステップでは、http-enumスクリプトを使って Nmap スキャンを特定のポート、ポート 80 に絞り込みます。ポートを指定することで、スキャンを絞り込み、よりターゲットに合った結果を得ることができます。今回は、ローカルマシンを表すループバックアドレスである127.0.0.1をスキャンします。これは、自分自身のシステム上で実行されているサービスをテストする際に便利です。

使うコマンドを分解してみましょう:

sudo nmap --script http-enum -p 80 127.0.0.1

コマンドの各部分の意味は以下の通りです:

  • sudo:スーパーユーザー権限でコマンドを実行します。正確な結果を得るために必要な場合があり、特に低いポート番号の場合です。
  • nmap:Nmap ツールを呼び出します。
  • --script http-enum:HTTP リソースを列挙するためにhttp-enumスクリプトを使用することを指定します。
  • -p 80:このオプションは Nmap にポート 80 のみをスキャンするように指示します。ポート 80 は、ほとんどのウェブサイトで使用される HTTP(ハイパーテキスト転送プロトコル)の標準ポートです。
  • 127.0.0.1:ターゲット IP アドレスで、この場合はローカルマシンを指すループバックアドレスです。

では、ターミナルでコマンドを実行しましょう:

sudo nmap --script http-enum -p 80 127.0.0.1

出力はこのようになります(正確な出力は、ローカルマシン上で実行されているサービスによって異なります):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000087s latency).

PORT   STATE SERVICE
80/tcp open  http
|_http-enum:
|  /index.html: Possible interesting file
|_ /robots.txt: Robots file

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

この例では、http-enumスクリプトが/index.html/robots.txtを見つけました。これらは Web サーバー上の一般的なファイルであり、さらなる調査でサーバーの設定や潜在的な脆弱性に関する詳細が明らかになるかもしれません。ポート 80 を指定することで、スキャンを絞り込み、ローカルマシン上で実行されている HTTP サービスに固有の結果を得ました。

nmap --script http-enum --script-args http.useragent=Test を使ってユーザーエージェントを追加する 192.168.1.1

このステップでは、http-enumスクリプトが使用する User-Agent ヘッダをカスタマイズします。User-Agent ヘッダは、クライアント(この場合は Nmap)からサーバーに送信され、クライアントソフトウェアを識別します。User-Agent を変更すると、いくつかの理由で役立つ場合があります。たとえば:

  • 基本的なセキュリティ対策を回避する:一部のサーバーは、既知のスキャニングツールからの要求をブロックする場合があります。User-Agent を変更することで、これらのブロックを回避することができます。
  • サーバーの動作をテストする:サーバーが異なる User-Agent 文字列にどのように応答するかを観察することができます。
  • ステルス化:あまり一般的な User-Agent を使用することで、スキャンを目立たなくすることができます。

--script-argsオプションを使ってhttp.useragentの値を変更します。

使うコマンドはこちらです:

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

このコマンドを分解してみましょう:

  • sudo:スーパーユーザー権限でコマンドを実行します。
  • nmap:Nmap ツールを呼び出します。
  • --script http-enumhttp-enumスクリプトを使用することを指定します。
  • --script-args http.useragent=Test:これが重要な部分です。これは、http-enumスクリプトに引数を渡します。具体的には、http.useragent変数を値「Test」に設定します。これは、スクリプトが HTTP 要求を送信する際に、User-Agent ヘッダとして「Test」を使用することを意味します。
  • 192.168.1.1:スキャンするターゲット IP アドレス。

ターミナルでコマンドを実行しましょう:

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

出力は最初のステップの出力と似たものになりますが、サーバーに送信される HTTP 要求には現在、User-Agent: Testヘッダが含まれます。Nmap の出力に直接 User-Agent は表示されませんが、スキャン中にバックグラウンドで使用されます。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
80/tcp open  http
|_http-enum:
|  /icons/: Potentially interesting directory w/ listing on 'apache/2.4.18 (ubuntu)'
|  /robots.txt: Robots file
|_ /server-status/: Server status page

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

このステップでは、--script-argsオプションを使って Nmap スクリプトをカスタマイズする方法を示しています。これにより、スクリプトの動作を微調整し、特定の状況に合わせることができます。

nmap --script http-enum -oN http_enum.txt を使って列挙結果を保存する 127.0.0.1

このステップでは、http-enumスクリプトの結果をファイルに保存します。これは、後の分析とレポート作成にとって重要です。Nmap は、スキャン結果をさまざまな形式で保存するためのいくつかのオプションを提供しています。今回は、結果を「通常の」人間が読みやすい形式で保存する-oNオプションを使用します。

使うコマンドはこちらです:

sudo nmap --script http-enum -oN http_enum.txt 127.0.0.1

このコマンドを分解してみましょう:

  • sudo:スーパーユーザー権限でコマンドを実行します。
  • nmap:Nmap ツールを呼び出します。
  • --script http-enumhttp-enumスクリプトを使用することを指定します。
  • -oN http_enum.txt:このオプションは、Nmap に結果を通常の形式でhttp_enum.txtという名前のファイルに保存するように指示します。ファイルは現在のディレクトリ(~/project)に作成されます。
  • 127.0.0.1:スキャンするターゲット IP アドレス(ループバックアドレス)。

ターミナルでコマンドを実行しましょう:

sudo nmap --script http-enum -oN http_enum.txt 127.0.0.1

ターミナルの出力は、前のステップの出力と似たものになりますが、画面に結果を表示するだけでなく、Nmap は結果をhttp_enum.txtファイルにも保存します。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000087s latency).
PORT   STATE SERVICE
80/tcp open  http
|_http-enum:
|  /index.html: Possible interesting file
|_ /robots.txt: Robots file

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

ファイルが作成され、スキャン結果が含まれていることを確認するには、catコマンドを使ってファイルの内容を表示できます:

cat http_enum.txt

出力に Nmap のスキャン結果が表示されるはずです。このファイルは、さらなる分析、レポート作成、または他のツールへの入力として使用できます。

Xfce ターミナルで HTTP の調査結果を確認する

このステップでは、前のステップで作成したhttp_enum.txtファイルからの HTTP の調査結果を確認します。Xfce ターミナルとcatコマンドを使って、ファイルの内容を表示し、結果を分析します。

まず、~/projectディレクトリにいることを確認してください。ここにhttp_enum.txtファイルがあるはずです。

http_enum.txtファイルの内容を表示するには、次のコマンドを使用します:

cat http_enum.txt

このコマンドにより、ファイルの内容がターミナルに表示されます。

出力の例(実際の出力はターゲットによって異なります):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000087s latency).
PORT   STATE SERVICE
80/tcp open  http
|_http-enum:
|  /index.html: Possible interesting file
|_ /robots.txt: Robots file

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

では、出力を分析してみましょう。http-enumスクリプトは、Web サーバー上の潜在的に興味深いファイルやディレクトリを特定しようとします。この例では、次のものが見つかりました:

  • /index.html:これは一般的なデフォルトの Web ページです。表示されているコンテンツを調べる価値があります。
  • /robots.txt:このファイルは、Web ロボット(クローラー)に対して、ウェブサイトのどの部分をインデックス化しないかを指示します。サイトの隠された部分や機密情報を明らかにすることもあります。

これらの調査結果を確認することで、Web サーバーの構造をよりよく理解し、さらなる調査の潜在的な対象を特定することができます。たとえば、Web ブラウザを使って/index.html/robots.txtにアクセスして、それらに何が含まれているかを確認することができます。

このステップでは、Nmap スクリプトの出力を確認し、潜在的に興味深い情報を特定する方法を示しています。これは偵察プロセスの重要な部分です。

Xfce ターミナルでバナースキャンの結果と比較する

このステップでは、Nmap を使ってバナースキャンを行い、その結果をhttp-enumスクリプトの調査結果と比較します。バナーグラビングは、接続が確立されたときにサービスが提示するバナーを調べることで、サービスに関する情報を収集するために使用される手法です。これにより、ソフトウェアのバージョンやその他の詳細が明らかになります。

まず、Nmap を使ってターゲット(127.0.0.1)のポート 80 でバナースキャンを行いましょう。バージョン検出を有効にする-sVオプションを使用します:

sudo nmap -sV -p 80 127.0.0.1

このコマンドは、ポート 80 で実行されているサービスとそのバージョンを特定しようとします。

出力の例:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:20 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000087s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    SimpleHTTPServer 0.6 (Python 3.7.5)

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

この例では、バナースキャンにより、Web サーバーがPython 3.7.5上で実行されているSimpleHTTPServer 0.6であることが明らかになりました。

次に、前のステップで確認したhttp-enumスクリプトの調査結果とこの情報を比較しましょう。http-enumスクリプトは、/index.html/robots.txtなどの潜在的なファイルやディレクトリを特定しました。

バナースキャンとhttp-enumスクリプトの結果を比較することで、ターゲットシステムのより完全な画像を構築することができます。バナースキャンはソフトウェアのバージョンに関する情報を提供し、http-enumスクリプトは潜在的なファイルやディレクトリを明らかにします。この組み合わされた情報は、脆弱性の特定やさらなる攻撃の計画立案にとって貴重です。

たとえば、Web サーバーソフトウェアのバージョンを知ることで、そのバージョン固有の既知の脆弱性を検索することができます。次に、特定されたファイルやディレクトリを攻撃の対象とすることができます。

このステップは、ターゲットシステムに関する包括的な情報を収集するために、異なるスキャン技術を組み合わせる重要性を示しています。

まとめ

この実験では、参加者は Nmap のhttp-enumスクリプトを使って HTTP サービスを列挙する方法を学びました。彼らは、192.168.1.1127.0.0.1のような特定の IP アドレスを対象に、ポート 80 を対象として、カスタム ユーザーエージェントを追加し、結果をテキストファイルに保存するコマンドを実行しました。この実験では、特定の操作にはスーパーユーザー権限を使用することと、実際のスキャンには許可を得ることの重要性も強調されました。

スキャンを実行した後、参加者には HTTP の調査結果を確認し、Xfce ターミナルでバナースキャンの結果と比較するよう指示され、これによりターゲットの Web サーバー上の潜在的な脆弱性や設定誤りを特定することができました。