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

NmapBeginner
オンラインで実践に進む

はじめに

この実験(Lab)では、Nmap を使用して HTTP サービスを列挙する方法を学びます。まず、http-enum スクリプトを使用してローカルホスト 127.0.0.1 に対して HTTP 列挙を実行します。次に、ポート 80 をスキャンし、ユーザーエージェントを追加して、列挙結果を保存します。最後に、HTTP の調査結果を確認し、Xfce ターミナルでのバナースキャンと比較します。

実際のシナリオでは、明示的な許可を得たネットワークおよびシステムのみをスキャンする必要があることを忘れないでください。

nmap --script http-enum 127.0.0.1 で HTTP enum を実行する

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

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

この実験(Lab)では、ローカルホストの IP アドレス 127.0.0.1 をターゲットにします。これは、自分のローカルマシンをスキャンするため、学習には安全なアプローチです。

それでは、Nmap コマンドを実行しましょう。

sudo nmap --script http-enum 127.0.0.1

このコマンドは Nmap に以下を指示します。

  • sudo: 一部の Nmap 操作で必要となる可能性がある、管理者権限でコマンドを実行します。
  • nmap: Nmap ツールを呼び出します。
  • --script http-enum: http-enum スクリプトを使用することを指定します。
  • 127.0.0.1: スキャン対象の IP アドレス(ローカルホスト)です。

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000020s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
8080/tcp open  http-proxy
| http-enum:
|   /robots.txt: Robots file
|_  /session/: Potentially interesting folder

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

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

  • /robots.txt: Web ロボットによってクロールされるべきではない Web サイトの部分を指定するファイルです。
  • /session/: セッション関連のファイルや機能が含まれている可能性のある、興味深いディレクトリです。

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

nmap --script http-enum -p 8080 127.0.0.1 でポート 8080 をスキャンする

このステップでは、http-enum スクリプトを使用して、Nmap スキャンを特定のポートであるポート 8080 に絞り込みます。ポートを指定することで、スキャンを絞り込み、より的を絞った結果を得ることができます。スキャン対象はループバックアドレスである 127.0.0.1、つまりローカルマシンです。これは、自身のシステムで実行されているサービスをテストするのに役立ちます。

使用するコマンドを分解してみましょう。

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

コマンドの各部分の意味は次のとおりです。

  • sudo: 管理者権限でコマンドを実行します。特に低いポート番号では、正確な結果を得るために必要となる場合があります。
  • nmap: Nmap ツールを呼び出します。
  • --script http-enum: HTTP リソースを列挙するために http-enum スクリプトを使用することを指定します。
  • -p 8080: このオプションは、ポート 8080 のみをスキャンするように Nmap に指示します。ポート 8080 は、開発サーバーやプロキシサービスでよく使用される代替 HTTP ポートです。
  • 127.0.0.1: ターゲット IP アドレス。この場合、ローカルマシンを指すループバックアドレスです。

それでは、ターミナルでコマンドを実行してください。

sudo nmap --script http-enum -p 8080 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.0000020s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy
| http-enum:
|   /robots.txt: Robots file
|_  /session/: Potentially interesting folder

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

この例では、http-enum スクリプトは /robots.txt/session/ を発見しました。これらは Web サーバー上の一般的なリソースであり、さらに調査することで、サーバーの設定や潜在的な脆弱性に関する詳細情報が明らかになる可能性があります。ポート 8080 を指定することで、スキャンを集中させ、ローカルマシンで実行されている HTTP サービスに固有の結果を得ることができました。

nmap --script http-enum --script-args http.useragent=Test 127.0.0.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 127.0.0.1

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

  • sudo: 管理者権限でコマンドを実行します。
  • nmap: Nmap ツールを呼び出します。
  • --script http-enum: http-enum スクリプトを使用することを指定します。
  • --script-args http.useragent=Test: これが重要な部分です。http-enum スクリプトに引数を渡します。具体的には、http.useragent 変数を "Test" という値に設定します。これは、スクリプトが HTTP リクエストを送信する際に、User-Agent ヘッダーとして "Test" を使用することを意味します。
  • 127.0.0.1: スキャン対象の IP アドレス(ローカルホスト)です。

ターミナルでコマンドを実行してください。

sudo nmap --script http-enum --script-args http.useragent=Test 127.0.0.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 localhost (127.0.0.1)
Host is up (0.0000020s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
8080/tcp open  http-proxy
| http-enum:
|   /robots.txt: Robots file
|_  /session/: Potentially interesting folder

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

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

nmap --script http-enum -oN http_enum.txt 127.0.0.1 で enum 結果を保存する

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

使用するコマンドは次のとおりです。

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

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

  • sudo: 管理者権限でコマンドを実行します。
  • nmap: Nmap ツールを呼び出します。
  • --script http-enum: http-enum スクリプトを使用することを指定します。
  • -oN http_enum.txt: このオプションは、結果を通常の形式で http_enum.txt という名前のファイルに保存するように Nmap に指示します。ファイルは現在のディレクトリ(~/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.0000020s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
8080/tcp open  http-proxy
| http-enum:
|   /robots.txt: Robots file
|_  /session/: Potentially interesting folder

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

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

cat http_enum.txt

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

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

このステップでは、前のステップで作成した http_enum.txt ファイルからの http-enum スクリプトの検出結果を確認します。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.0000020s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
8080/tcp open  http-proxy
| http-enum:
|   /robots.txt: Robots file
|_  /session/: Potentially interesting folder

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

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

  • /robots.txt: このファイルは、Web ロボット(クローラー)に対して、サイトのどの部分をインデックス化すべきでないかについての指示を提供します。これにより、サイトの隠された領域や機密性の高い領域が明らかになることがあります。
  • /session/: これは潜在的に興味深いディレクトリであり、セッション関連ファイル、設定ファイル、またはその他の機密情報が含まれている可能性があります。

これらの検出結果を確認することで、Web サーバーの構造をより深く理解し、さらなる調査の対象となる可能性のある領域を特定できます。たとえば、Web ブラウザを使用して http://127.0.0.1:8080/robots.txt および http://127.0.0.1:8080/session/ にアクセスして、それらが何を含んでいるかを確認できます。

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

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

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

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

sudo nmap -sV -p 8080 127.0.0.1

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

出力例:

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
8080/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 スクリプトは、/robots.txt/session/ のような、潜在的に興味深いファイルやディレクトリを特定しました。

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

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

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

まとめ

この実験では、参加者は Nmap の http-enum スクリプトを使用して HTTP サービスを列挙する方法を学びました。ローカルホスト(127.0.0.1)のポート 8080 をターゲットにスキャンを実行し、カスタムユーザーエージェントを追加して、結果をテキストファイルに保存するコマンドを実行しました。この実験では、一部の操作でスーパーユーザー権限を使用することの重要性が強調され、ローカルホストを使用することによる安全なスキャン方法が実演されました。

スキャンを実行した後、参加者は HTTP の検出結果を確認し、Xfce ターミナルでのバナースキャン結果と比較しました。これにより、ローカル Web サーバー上の潜在的な脆弱性や設定ミスを特定するのに役立ちました。この実践的なアプローチにより、ネットワーク偵察技術に関する実践的な経験が得られました。