
ターゲットサーバーでnmapを使用したところ、次のサービスが返されました。
PORT STATE SERVICE VERSION
53/tcp open domain?
80/tcp open http Microsoft IIS httpd 10.0
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2021-03-17 07:07:34Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap
443/tcp open https?
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap
3269/tcp open tcpwrapped
3389/tcp open ms-wbt-server Microsoft Terminal Services
問題は、Nmap が誤って識別した可能性のあるポートで実行されている実際のサービスを識別する方法です。たとえば、ポート 53 で、ターミナル経由で DNS サービスが実行されていることをどのように確認すればよいでしょうか。
どのテクニックを使用できますか? ターゲット サーバーにアクセスできないため、サーバー上で実行されているプロセスを確認できません。
答え1
Steffen が指摘しているように、サーバー X がホスト Z のポート Y で実行されているかどうかを確認するには、X と同じプロトコルを使用するクライアントを実行し、それをホスト Z のポート Y に向けます。たとえば、特定のサーバーが DNS を使用するかどうかをテストするには、 などの多くの DNS クライアントのいずれかを使用できますnslookup
。
もちろん、これは、使用したプロトコルと互換性があるということ以外、実際にそこで何が実行されているかについては何も教えてくれません。サーバーは、ほとんど何でもかまいません。たとえば、ポート 80 (例) のリスナーは、TCP ハンドシェイクに「HTTP 201 No content\r\nServer: Microsoft IIS httpd 10.0\r\n\r\n」で応答するだけの小さなスクリプトである可能性があります。これは、ほぼ有効な HTTP 応答です (クライアントが HTTP 要求を送信しなかった場合でも、この応答が送信される可能性があります)。ただし、リスナーが有用な意味で Web サーバーであることを意味するわけではなく、特に IIS 10.0 であることを意味するわけでもありません。
Nmap に組み込まれている認識スクリプトは、ほとんどのサーバーを認識するのにおそらくあなたよりも優れていますが、非常に柔軟性に欠け、誰かが試みれば簡単に騙される可能性があります。問題のツールとプロトコルに精通している人間は、異常なケース (あるサーバーが別のサーバーになりすましている場合や、管理者が Nmap に従ってサーバーを識別する通常の「兆候」を意図的に隠している場合など) では、スクリプトよりも多くの情報を抽出できる可能性があります。ただし、そのような知識の基本さえも一般に伝えることは、この回答、またはこのサイトの範囲を超えています。