コンピューター ウィンドウズ インターネット

Nmapリファレンスマニュアル(マニュアルページ)。 Nmapを使用してネットワークをスキャンする方法単一のホストまたはIPアドレスをスキャンする

少なくともしばらくの間、作業タスクが情報セキュリティに密接に関連している私たちの多くにとって、Nmapは長い間使い慣れた便利なツールでした。 寒い冬の夜は暖かい毛布と同じくらい欠かせません。 Nmapが非常に効果的なブランケットであることを除いて。

Nmapは、あらゆるネットワークの非常に効率的な検査を実行するために使用できる、人気のある強力なコマンドラインクロスプラットフォームネットワークセキュリティスキャナーです。 また、ネットワークに接続されているシステムの概要を把握するのにも役立ちます。 これを使用して、すべてのライブホストのIPアドレスを調べたり、それらのホストで実行されている開いているポートやサービスをスキャンしたりすることができます。

間違いなく、Nmapは現在存在する中で最も用途の広いポートスキャナーです。 はい、より高速なスキャナーを見つけることができますが、多くのタスクを解決するためにこれほど便利で単純に不可欠なものはありません。 そして、情報セキュリティの分野の専門家の大多数は、この声明に断固として同意するでしょう。

ただし、Nmapの最も興味深い機能の1つがNSEスクリプトを使用できることを知っている人ははるかに少なく、これにより、お気に入りのネットワークセキュリティツールの柔軟性と効率がさらに向上します。 彼らの助けを借りて、Nmapのような非常に高度なポートスキャナーからでも、期待できないことを行うことができます。

NSEスクリプトを詳しく見てみましょう。おそらく、その可能性に驚かされるでしょう。

つまり、Nmapスキャナーによる開いているポートの標準チェックに加えて、NSEを使用することで、NSEで実行されているサービスに関する拡張情報を取得することもできます。 したがって、たとえば、NSEスクリプトを使用すると、ネットワークサービスを詳しく調べて、それらがどの程度適切に構成されているか、どの情報が利用可能か、弱いクレデンシャルが使用されているかどうかなどを確認できます。実際、NSEスクリプトはNmapを柔軟にします。ネットワークサービスとの相互作用のためのプラットフォーム。

Nmapスクリプティングエンジンのスクリプティング機能

Nmapポートスキャナー開発チームは、主に次のような問題を解決するためにスクリプトエンジンを考案し、作成しました。

1.ネットワーク探索

これは、Nmapの主な実用的なアプリケーションです。 一部のスクリプトは、お気に入りのポートスキャナーの作業を容易にし、最適化し、高速化するように設計されています。 それらの使用例には、次のようなタスクの実行が含まれます。

  • 対応するドメインのWHOISデータ(TCPプロトコルに基づくアプリケーション層ネットワークプロトコル。その主なアプリケーションは、ドメイン名、IPアドレス、および自律システムの所有者に関する登録データをテキスト形式で取得することです)を検索します。
  • 特定のIPアドレスの所有者を特定するために、主要な地域のWHOISサーバーであるARIN(北アメリカ)、RIPE(ヨーロッパおよび中東)、またはAPNIC(アジアおよび太平洋)にクエリを送信します。
  • identd-開いているポートを検索します(ポートに接続しているユーザーを識別できます)。
  • SNMPプロトコル(TCP / UDPアーキテクチャに基づくIPネットワーク内のデバイスを管理するためのインターネットプロトコル)を介して要求を行う。
  • リモートアクセスNFS、SMB、またはRPCのネットワークプロトコルを介して利用可能なリソースとサービスのリストをコンパイルします。

2.より洗練されたバージョン管理

サービスとアプリケーション用のNmapバージョニングシステムは、プローブと正規表現の署名照合を使用して何千もの異なるサービスを認識できますが、全能ではありません。 たとえば、Skype v2サービスの識別には、バージョン管理機能があまり柔軟ではない2つの独立して動作するプローブが必要です。 Nmapは、力ずくで数百のコミュニティ名を列挙しようとすると、SNMPサービスの一部を認識することもできます。 上記のタスクは両方とも、標準のNmapバージョン管理方法を使用するのにあまり便利ではありませんが、どちらもNSEを使用して簡単に実行できます。 このため、バージョン管理システムは、いくつかの複雑なサービスを処理するときに、デフォルトでNSEを呼び出してバージョン管理タスクを解決するようになりました。

3.脆弱性を検索します

新しい脆弱性が発見されると、それは一般に知られるようになり、ネットワークセキュリティの専門家は、悪意のあるユーザーが脆弱なシステムを特定する前に、ネットワークをスキャンして脆弱なシステムをすばやく特定する必要があります。 Nmapは本格的な脆弱性スキャナーではありませんが、NSEの強力な機能により、非常に厳しい要件があっても脆弱性チェックを実行できます。 たとえば、OpenSSL暗号化ソフトウェアのHeartbleedバグが世界中の数十万のシステムを危険にさらした場合、Nmap開発者は2日以内にssl-heartbleed検出スクリプトを作成することで対応しました。

4.バックドア検出

多くのサイバー攻撃者や一部の自動化されたワームは、バックドアを残して、将来、システムに侵入しやすくするための抜け穴を提供します。 これらのバックドアの一部は、正規表現シグネチャマッチングに基づく標準のNmapバージョニングを使用して検出できますが、より複雑なワームやバックドアの多くは、確実に検出するために高度なNSE機能を必要とします。 特に、NSEは、SMBプロトコル、UnrealIRCd IRCサーバーのバックドアバージョン、vsftpdおよびProFTPdFTPサーバーの実装に脆弱性を使用するDoublePulsarバックドアを検出するために使用されます。

5.脆弱性の検出

NSEは、汎用スクリプト言語に実装されており、脆弱性が一般に知られる前に発見するのに役立つエクスプロイトを作成するために使用することもできます。 カスタムスクリプトエクスプロイトを追加するこの機能は、一部の人(主に侵入テスター)にとって非常に役立つ場合があります。 ただし、NSEは、Metasploitのように、シグネチャやエクスプロイトを作成するための本格的なプラットフォームではありません。

NSEスクリプトにはどのようなカテゴリがありますか?

現在、メインのNmapディレクトリのサブディレクトリである「scripts」フォルダにある598個のNSEスクリプトがあります。 パフォーマンスを向上させるために、すべてのスクリプトは「scripts / script.db」データベースでインデックス付けされます。これは、各スクリプトが属する1つまたは複数のカテゴリを示します。

使用目的に応じて、また使用を簡素化するために、NSEスクリプトはさまざまなカテゴリにグループ化されています。 現在、次のカテゴリのNSEスクリプトが定義されています:auth、broadcast、brute、default。 検出、dos、エクスプロイト、外部、ファザー、侵入型、マルウェア、セーフ、バージョン、および脆弱性(カテゴリ名では大文字と小文字は区別されません)。 以下は、各カテゴリの詳細です。

  • auth-このカテゴリのスクリプトは、ターゲットシステムの認証クレデンシャルを処理します(またはバイパスします)。 このようなスクリプトの例としては、「x11-access」、「ftp-anon」、「oracle-enum-users」があります。 ブルートフォース攻撃を使用して資格情報を判別しようとするスクリプトは、ブルートとして分類されることに注意してください。
  • ブロードキャスト-このカテゴリのスクリプトは通常、ローカルネットワークとのブロードバンド通信を介してコマンドラインで指定されていないホストを検出するために使用されます。 「newtargets」スクリプト引数を使用すると、検出したホストがスキャンキューに自動的に追加されます。
  • 野蛮人-このカテゴリのスクリプトは、ブルートフォース攻撃を実行してリモートサーバーの認証資格情報を取得するために使用されます。 Nmapは、数十のプロトコルに対するブルートフォース攻撃用のスクリプトを提供します。 これらには、次のスクリプトが含まれます:「http-brute」、「oracle-brute」、「snmp-brute」など。
  • デフォルト-このカテゴリのスクリプトは、Nmap開発者がスキャナーの機能を拡張したり、その操作を最適化したりするのに役立つものとして選択し、基本的な「デフォルト」セットを参照するスクリプトを定義します。 これらは、「-sC」または「-A」オプションを使用するときに実行され、「-script」オプションを使用して特定のスクリプトリストを指定することによっては実行されません。 「--script=default」を使用して、他のスクリプトと同様に、このカテゴリのスクリプトを明示的に指定することができます。 Nmapチームは、特定のスクリプトをデフォルトとして分類する必要があるかどうかを判断するときに、次の要件に依存しようとします。
    • 速度-デフォルトでは、スキャンは迅速に完了する必要があります。これには、ブルートフォース方式を使用する認証クラッカー、Webスパイダー、および1つのサービスのスキャン時間が数分または数時間で計算されるその他のスクリプトは含まれません。
    • 効用-デフォルトのカテゴリでスキャンを実行するには、貴重で最新の情報を取得する必要があります。 言い換えれば、そのようなスクリプトをスキャンした結果は、平均的なネットワークセキュリティの専門家にとって理解可能で有用なものでなければなりません。 それ以外の場合は、デフォルトで実行しても意味がありません。
    • 簡潔-Nmapスキャナーによって受信された情報の出力は、さまざまな目的とニーズに使用されるため、この情報は読みやすく簡潔である必要があります。 受信したすべての情報を完全に出力して多くのページを作成することが多いスクリプトも、デフォルトのスクリプトカテゴリに属していません。 つまり、重要な情報が見つからない場合にデフォルトとして分類されるNSEスクリプトは、レポートに何も表示されません。 これは、隠れた脆弱性を探すデフォルトのスクリプトにも当てはまります。これらの脆弱性が見つかった場合にのみ結果を出力します。
    • 信頼性-作業中の多くのスクリプトは、ヒューリスティック分析とファジー署名マッチングデータに依存して、ターゲットホストまたはサービスに関する特定の結論を導き出すことができます。 このようなスクリプトの例としては、「sniffer-detect」や「sql-injection」があります。 このようなスクリプトは、作業の結果が誤っていることが多く、作業の詳細をすべて明確に理解していないユーザーを誤解させる可能性があるため、デフォルトのカテゴリには含まれません。
    • 目立たない-一部のスクリプトは、リモートシステムの大量のリソースを使用する場合に過度に煩わしくなり、このシステムまたはサービスの障害につながる可能性があります。または、スクリプトのアクションがリモート管理者による攻撃と見なされる可能性があります。 このようなスクリプトもデフォルトのカテゴリには含まれていません。 ただし、一部の「適度に攻撃的な」スクリプトは、他の要因を考慮して、その有用性と動作の程度に基づいて、Nmapチームによってデフォルトとして分類されています。
    • 守秘義務-多くのスクリプトは、作業の詳細に基づいて、機密情報を第三者に開示する可能性があります。 たとえば、WHOISデータを検索するためのスクリプトは、ターゲットIPアドレスを地域のレジストラに報告する必要があります。 つまり、NSEスクリプトのデフォルトのカテゴリでは、Nmapチームはプライバシーを侵害する可能性のあるスクリプトを追加しないようにしています。
  • 発見-このカテゴリのスクリプトは、レジストラ、SNMP対応デバイス、ディレクトリサービスなどにパブリックリクエストを送信することにより、ネットワークについて積極的に学習しようとします。 このようなスクリプトの例としては、「html-title」(Webサイトのルートパスのタイトルを取得)、「smb-enum-shares」(Windows共有を一覧表示)、「snmp-sysdescr」(標準のインターネットを介して詳細なシステム情報を取得)があります。 SNMPデバイス管理のプロトコル)。
  • dos-このカテゴリのスクリプトは、サービス拒否につながる可能性があるため、細心の注意を払って使用する必要があります。 これらは、セキュリティテスターがサービス拒否攻撃に対するシステムの脆弱性をテストするために使用することがありますが、そのようなテストは、一部の脆弱なサービスをクラッシュさせるなど、望ましくない副作用を引き起こす可能性があります。
  • エクスプロイト-これらのスクリプトは、特定の脆弱性を積極的に悪用することを目的としています。 このカテゴリのスクリプトの例は、「jdwp-exec」および「http-shellshock」です。
  • 外部の-このカテゴリのスクリプトは、データベースまたはその他のネットワークリソースを制御するサードパーティにデータを送信できます。 このようなスクリプトの例は、「whois-ip」です。これは、WHOISサーバーに接続して、ターゲットのIPアドレスに関する情報を取得します。 サードパーティのデータベースオペレータが送信したすべてのものを記録する可能性は常にあります。これには、多くの場合、IPアドレスとターゲットのIPアドレスに関する情報が含まれます。 スキャンコンピュータとクライアント間のトラフィックのみを処理するほとんどのスクリプトは、このカテゴリに分類されません。
  • ファザーは、予期しないフィールドまたはランダム化されたフィールドを各バッチでサーバーソフトウェアに送信するように設計されたスクリプトのカテゴリです。 この方法は、ソフトウェアの未知のバグや脆弱性を見つけるのに役立ちますが、処理が遅く、帯域幅を大量に消費します。 このカテゴリのスクリプトの例は「dns-fuzz」です。これは、サーバーがダウンするか、ユーザーが設定した期限が切れるまで、部分的に変更されたドメインクエリでDNSサーバーを攻撃します。
  • 押し付けがましい-このカテゴリのスクリプトには、安全(安全)として分類できないスクリプトが含まれます。リスクが高すぎるため、ターゲットシステムが圧力を受けて崩壊するため、ターゲットホストに大量のリソース(帯域幅やプロセッサ時間など)が必要になります。 )、またはそれ以外の場合、それらの実行は、ターゲットシステムの管理者によって悪意のあるアクティビティとして認識されます。 このようなスクリプトの例としては、「http-open-proxy」(ターゲットサーバーをHTTPプロキシとして使用しようとする)や「snmp-brute」(人気のある送信によってSNMPデバイスのいわゆる「コミュニティ文字列」を推測しようとする)があります。 public、private、ciscoなどの値)。 スクリプトがバージョンの特別なカテゴリに属していない場合は、安全または侵入として分類する必要があります。
  • マルウェア-これらのスクリプトは、ターゲットプラットフォームがマルウェアまたはバックドアに感染しているかどうかを確認します。 このカテゴリのスクリプトのスクリプトの例としては、異常なポート番号で実行されているSMTPサーバーを監視する「smtp-strangeport」や、偽の応答を提供するスプーフィングされたidentdデーモン(ユーザー認証プロトコルのサポートを実装)を検出する「auth-spoof」があります。リクエストを受け取る前に。 最初の例でも2番目の例でも、この動作が検出された場合、通常はシステムでのマルウェア感染の兆候です。
  • 安全-サービス障害を引き起こすために作成されておらず、大量のネットワーク帯域幅またはその他のリソースを使用し、セキュリティホールを悪用することを目的としていないすべてのスクリプトは、安全として分類されます。 リモート管理者の注意を引く可能性ははるかに低くなりますが、(他のNmap機能と同様に)付随的な注意を引くことがないことを100%保証することはできません。 これらのスクリプトのほとんどは、一般的なネットワーク探索に関連するタスクを実行します。 このカテゴリのスクリプトの例は、「ssh-hostkey」(ホストのSSHキーを取得する)および「html-title」(Webページからタイトルを取得する)です。 バージョンカテゴリのスクリプトは安全として分類されませんが、他の安全でないスクリプトは侵入型として定義する必要があります。
  • バージョン-この特別なカテゴリのスクリプトは、バージョン検出機能の拡張であり、明示的に選択することはできません。 これらは、Nmapバージョン( "-sV")を決定するように求められた場合にのみ実行するように選択されます。 それらの出力をバージョン管理関数の出力から分離することはできず、ホストまたはサービススクリプトとして機能しません。 このようなスクリプトの例としては、「skypev2-version」、「pptp-version」、「iax2-version」があります。
  • 脆弱性-このカテゴリのスクリプトは、特定の既知の脆弱性の存在をチェックし、通常、そのような脆弱性が見つかったことを確認する結果のみを提供します。 このようなスクリプトの例は、「realvnc-auth-bypass」および「afp-path-vuln」です。

スクリプトは、機能の方向性、およびスクリプトが実行されるスキャンフェーズに応じて、4つのタイプに分けられます(一部のスクリプトは、一度に複数のタイプの操作をサポートできます)。

  • プレルールスクリプト-このタイプのスクリプトは、Nmap操作が実行される前に実行されるため、Nmapがターゲットに関する情報をまだ収集していない場合、スキャンフェーズの前に実行されます。 これらのスクリプトは、DHCPおよびDNS SDサーバーをポーリングするブロードキャスト要求を行うなど、特定のスキャンターゲットに依存しないタスクを実行する場合に役立ちます。 これらのスクリプトの一部は、Nmapスキャンの新しいターゲットを作成できます(NSE引数「newtargets」を指定した場合のみ)。 したがって、たとえば、「dns-zone-transfer」スクリプトは、ゾーン転送要求を使用してドメイン内のIPアドレスのリストを取得し、それらをNmapスキャンのターゲットのリストに自動的に追加できます。 プレルールスクリプトは、プレルール機能を使用して識別されます。
  • ホストスクリプト-これらのスクリプトは、Nmapスキャナーがターゲットホストでホスト検出、ポートスキャン、バージョン管理、OS検出などの通常の操作を実行した後、標準のNmapスキャンプロセス中に実行されます。 このタイプのスクリプトは、hostrule関数に一致するターゲットホストごとに1回呼び出されます。 たとえば、ターゲットIPアドレスの所有者情報を検索する「whois-ip」や、断片化を必要とせずにターゲットに到達できるIPパケットの最大サイズを決定しようとする「path-mtu」などがあります。
  • サービススクリプト-このタイプのスクリプトは、ターゲットホストで特定のサービスが見つかったときに実行されます。 たとえば、Nmapには、Webサーバーと連携するために実行される15を超えるhttpサービススクリプトが含まれています。 ホストに複数のポートで実行されているWebサーバーがある場合、これらのスクリプトは複数回実行できます(ポートごとに1つ)。 これはNmapで最も一般的なタイプのスクリプトであり、検出されたサービスのどれに対してスクリプトを実行するかを決定するためのポートルール関数が含まれているという点で異なります。
  • ポストルールスクリプト-このタイプのスクリプトは、Nmapが目的のすべてのターゲットをスキャンした後、1回実行されます。 これらは、Nmapスキャナーによって受信された情報の出力をフォーマットおよび表示するのに役立ちます。 たとえば、「ssh-hostkey」スクリプトは、SSHサーバーに接続し、それらの公開鍵を検出して出力するサービススクリプト(ポートルールが定義されている)としてより一般的に知られています。 ただし、検証済みのすべてのホスト間で重複するキーをチェックし、見つかったすべてのキーを出力するポストルール機能も含まれています。 このタイプのスクリプトのもう1つの潜在的な使用例は、Nmapスキャナーの出力を逆印刷することです。たとえば、サービスを実行しているすべてのホストを単に一覧表示するのではなく、特定のサービスを実行しているすべてのホストを一覧表示します。 ポストルールスクリプトは、ポストルール機能を使用して識別されます。

ノート:多くのスクリプトは、ポストルールスクリプトだけでなくプレルールスクリプトとしても実行できます。 このような場合、不整合を避けるためにプレルール機能を使用することをお勧めします。

永遠のパラノイド、アントンコチュコフ。


参照:

nmap [ <Тип сканирования> ...] [ <Опции> ] { <цель сканирования> }

説明

nmap( " ネットワークマッパー»)は、オープンソースのネットワーク探索およびセキュリティユーティリティです。 大規模なネットワークをすばやくスキャンするように設計されていますが、単一のターゲットでもうまく機能します。 Nmapは、独自の方法で生のIPパケットを使用して、ネットワーク上で利用可能なホスト、それらが提供するサービス(アプリケーション名とバージョン)、使用するオペレーティングシステム(およびOSバージョン)、使用されるパケットフィルター/ファイアウォールのタイプを判別します。 、およびその他多数。その他の特性。 Nmapは一般的にセキュリティチェックに使用されますが、多くのシステム管理者は、ネットワーク構造の監視、サービスの起動スケジュールの管理、ホストまたはサービスの稼働時間の追跡などの一般的なタスクに役立つと考えています。

Nmapの出力は、スキャンされたターゲットのリストであり、指定されたオプションに応じて各ターゲットに関する追加情報が含まれます。 重要な情報は « 重要なポートテーブル» 。 このテーブルには、ポート番号、プロトコル、サービス名、およびステータスが含まれています。 ステータスは、開いている(開いている)、フィルターされている(フィルターされている)、閉じている(閉じている)、またはフィルターされていない(フィルターされていない)ことができます。 オープンとは、ターゲットマシン上のアプリケーションがこのポートでパケットを接続/受信する準備ができていることを意味します。 フィルタ済みとは、ファイアウォール、ネットワークフィルタ、またはその他のネットワーク干渉がポートをブロックしており、Nmapがポートが開いているか閉じているかを判断できないことを意味します。 閉じたポートはどのアプリケーションにも関連付けられていませんが、いつでも開くことができます。 ポートはNmap要求に応答するときにフィルタリングされていないと見なされますが、Nmapはポートが開いているか閉じているかを判断できません。 Nmapは、ポートが2つの状態のどちらを記述しているかを判別できない場合、open|filteredとclosed|filteredの組み合わせを発行します。 この表には、要求に応じてソフトウェアバージョンの詳細も記載されている場合があります。 IPプロトコル(-sO)を介してスキャンする場合、Nmapは、開いているポートに関する情報ではなく、サポートされているプロトコルに関する情報を提供します。

重要なポートのテーブルに加えて、Nmapは、解決されたDNS名、オペレーティングシステムの推測、デバイスタイプ、MACアドレスなどのターゲット情報をさらに提供できます。

Nmapを使用した一般的なスキャンを例1に示します。 この例で使用されている引数は、OSバージョン、スクリプトスキャン、およびトレースの場合は-Aのみです。 -実行を高速化するためのT4。 次に、2つのターゲットホスト。

例1.Nmapを使用したスキャンの典型的な例

#nmap -A -T4 scanme..org)scanme.site(64.13.134.52)の興味深いポート:(スキャンされたが以下に示されていない1663ポートは、状態:フィルター処理されています)ポート状態サービスバージョン22 / tcp open ssh OpenSSH 3.9p1 (プロトコル1.99)53/tcpオープンドメイン70/tcpクローズドgopher80/tcpオープンhttpApachehttpd 2.0.52((Fedora))113 / tcpクローズド認証デバイスタイプ:汎用実行中:Linux 2.4.X | 2.5.X | 2.6.X OSの詳細:Linux 2.4.7-2.6.11、Linux 2.6.0-2.6.11プレイグラウンドの興味深いポート..168.0.40):(スキャンされたが以下に示されていない1659ポートは状態:閉じています)ポートSTATE SERVICE VERSION 135 / tcp open msrpc Microsoft Windows RPC 139 / tcp open netbios-ssn 389 / tcp open ldap? 445 / tcp open microsoft-ds Microsoft Windows XP microsoft-ds 1002 / tcp open windows-icfw? 1025 / tcp open msrpc Microsoft Windows RPC 1720 / tcp open H.323 / Q.931 CompTek AquaGateKeeper 5800 / tcp open vnc-http RealVNC 4.0(解像度400x250; VNCポート:5900)5900 / tcp open vnc VNC(プロトコル3.8)MACアドレス:00:A0:CC:63:85:4B(Lite-on Communications)デバイスタイプ:汎用実行中:Microsoft Windows NT / 2K / XP OS詳細:Microsoft Windows XP Pro RC1 +から最終リリースまでサービス情報:OS:Windows 、Windows XP Nmapが終了しました:88.392秒でスキャンされた2つのIPアドレス(2つのホストがアップ)


Nmapの最新バージョンはからダウンロードできます

Nmapは、ハッカーなしではほとんどできないカルトスキャナーであるため、その機能を拡張するというトピックは多くの人にとって興味深いものだと思います。 Nmapと組み合わせて他のツールを使用することは、一般的な方法です。 この記事では、お気に入りのツールを使用してNmapを簡単に自動化する方法について説明します。 同じ一連のアクションを常に実行するよりも、「ボタンを1つ押す」と結果を取得する方が便利です。 Nmapでスクリプトを使用すると、ハッカーがシステムをより自動的にハッキングするのに役立ち、システム管理者はシステムのデフォルトの穴をチェックして、タイムリーに修正できます。

Nmapについて一言

Hackerマガジンのほとんどの読者は、Nmapが何であるかを知っており、おそらくネットワークを探索して情報を収集するためにNmapを複数回使用したことがあると確信しています。 念のため、忘れてしまった、または知らない人のために、次のことを思い出させてください。

  • Nmapは、ネットワークのスキャン、セキュリティの確認、OSのバージョンやさまざまなサービスの決定などを行うためのクロスプラットフォームツールです。 これは非常に柔軟で簡単に拡張できるユーティリティであり、NSEスクリプトエンジンがそれを実現します。
  • NSE(Nmap Scripting Engine)は、ユーザーがスクリプトを記述して、既存のNmap機能とのより柔軟な相互作用、脆弱性の検出と悪用など、さまざまなネットワークタスクを自動化できる強力なNmapコンポーネントです。 NSEはLua言語インタープリターに基づいています。
  • LuaはJavaScriptに似たスクリプト言語です。

問題の定式化

すでに述べたように、今日は独自のスクリプトを作成することでNmapの機能を拡張します。 ハッキング/侵入テストは通常​​、偵察とデータ収集から始まります。 最初のチェックの1つは、調査中のホストに開いているポートの存在と、実行中のサービスの識別です。 このような情報を収集するためのツールとして、Nmapほど優れたものはおそらくありません。 スキャン後の次のステップは、通常、見つかった脆弱なサービスのスプロイトを検索するか、ブルートフォース方式を使用してログインとパスワードのペアを選択することです。

THC-Hydraブルートフォーサーを積極的に使用して、いくつかのサービス(HTTP-Basic、SSH、MySQLなど)のパスワードを推測するとします。 この場合、各サービスに個別にハイドラを設定する必要があります。サービスの機能と、ハイドラを起動するために必要なフラグを覚えておく必要があります。 そして、5つ以上のサービスをブルートする必要が生じた場合は?..自動化してみませんか?

したがって、Hydraを起動して1つのサービス(PostgreSQLなど)のログイン/パスワードを選択するプロセスを自動化する簡単なスクリプトを作成しましょう。 このためには、次のツールが必要です。

  • nmap;
  • THC-ハイドラ;
  • 任意のテキストエディタ。

NmapやHydraをまだインストールしていない場合は、すぐに修正してください。

$ sudo apt-get install nmap hydra

さて、始めましょう。 Nmapのスクリプトは、拡張子が*.nseのプレーンテキストファイルです。 したがって、お気に入りのテキストエディタを開いて、新しいファイルを作成します。 Vimを使用します:

$ vim hydra.nse

NSEスクリプト構造

執筆に移る前に、すべてのスクリプトが特定の構造を持っていると言わなければなりません。 特定のアクションを自動化するコード自体に加えて、スクリプトの説明(目的と使用方法)、作成者、ライセンス、他のスクリプトへの依存、スクリプトが属するカテゴリに関する情報が含まれています、 等々。 これらの各部分を詳しく見ていきましょう。

スクリプトの説明(説明)

このセクションには、スクリプトの説明、作成者によるコメント、スクリプト実行の結果を画面に表示する例、および追加機能が含まれています。

PostgeSQLのログイン/パスワードを選択するスクリプトの場合、説明は次のようになります。

説明=[[ブルートフォースは、ターゲットホストで実行されているすべてのサービスを強制します。 結果は、各パス、検出されたメソッド、ログイン、および/またはパスワードを含むテーブルに返されます。 ]] --- --@ useage --nmap --script hydra [--script-args "lpath = 、ppath = "] --- @output --PORT STATE SERVICE-80 / tcp open http-| ヒドラ:-| パスメソッドログインパスワード-| 127.0.0.1 / private/index.htmlダイジェストログパス-|_127.0.0.1 / simple/index.txt基本ユーザー[email protected]:ログインを含むファイルへのパス。 例:-nmap --script hydra --script-args = "lpath = / home / my_logins.txt" --@args hydra.ppath:パスワードを含むファイルへのパス。 例:-nmap --script hydra --script-args = "ppath = / home / my_pass.txt"

コメント; ---複数行のコメント; @ used、@ output、@ args-スクリプトを呼び出し、結果を画面に表示し、呼び出すときに必要な引数を表示する例。

上記の@usageには、スクリプト起動形式が表示されています。 この場合、スクリプトの名前(hydra)のみが指定されます。 これは、スクリプトがディレクトリ/に配置されている場合に可能になります。 / nmap / scripts /、それ以外の場合は、絶対パスまたは相対パスを指定する必要があります。 将来的には、スクリプトの開始時に引数を設定できるようにする予定です。 引数は--script-argsフラグを使用して設定されます" "。この場合、ログインファイル(lpath)とパスワードファイル(ppath)へのパスを設定します。引数はオプションです。デフォルトでは、login.txtおよびpassword.txtという名前のファイルを検索します。カレントディレクトリ。

スクリプトが配置されているカテゴリ(カテゴリ)

NSEスクリプトを作成するときに、そのカテゴリ(または複数のカテゴリ)を指定できます。 これは、Nmapユーザーが特定のスクリプトではなく、同じカテゴリにある一連のスクリプトを使用する場合に役立ちます。 いくつかのカテゴリの例:

  • auth-スクリプトがターゲットホストの認証データを定義するカテゴリ。
  • brute-スクリプトがさまざまなサービスのログインとパスワードを決定するのに役立つカテゴリ。
  • デフォルト-メインスクリプトを含むカテゴリ。 スクリプトがこのカテゴリに属する​​かどうかを決定するいくつかの基準があります。スキャン速度、有用性、信頼性、機密性、視覚的出力。
  • マルウェア-マルウェアの識別に役立つカテゴリ。

たとえば、authカテゴリのすべてのスクリプトを実行する必要がある場合、コマンドは次のようになります。

$ nmap --script = auth example.com

この場合、このカテゴリのスクリプトは、指定されたホストに対して順番に実行されます。 私たちのスクリプトは、野蛮なカテゴリに属しています。 次の行をファイルに追加しましょう。

カテゴリ=( "野蛮な")

作者に関する情報(作者)

各スクリプトには、作成者に関する情報が含まれています。 私の場合:

著者="オルガバリノバ"

使用中のライセンスに関する情報(ライセンス)

Nmapはすべてのユーザー開発を歓迎し、NSEスクリプトを含む共有を奨励します。 ライセンスを指定するときは、スクリプトをコミュニティと共有する権利を確認します。 標準のNmapライセンスは次のようになります。

ライセンス="Nmapと同じ-http://nmap.org/book/man-legal.htmlを参照"

この行もスクリプトに追加しましょう。

他のスクリプトへの依存関係(依存関係)

この領域には、必要な情報を取得するためにこのスクリプトを実行する前に実行する必要があるNSEスクリプトの名前が含まれています。 例えば、

依存関係=( "smb-brute")。

この場合、この機能は必要ないため、依存関係を追加しません。

ホストとポート(ホストとポート)

Nmapは、スクリプトを実行するサービスとポートを知る必要があります。 これには特別なルールがあります。

  • prerule()-スクリプトは、ホストをスキャンする前に1回実行され、一部のネットワーク操作に使用されます。
  • hostrule(host)-スクリプトはテーブルからホストごとに実行され、引数として使用されます。
  • portrule(host、port)-スクリプトは、引数として受け取るテーブルから、ホストごとおよびポートごとに実行されます。
  • postrule()-スクリプトは、ホストをスキャンした後に1回実行されます。 主に結果の処理や統計の集計などに使用されます。

そのようなルールを形成するためのライブラリがあります。 このスクリプトでは、ポート番号(5432)とサービス名(postgresql)を指定するだけで、このポートとサービスに対してのみ機能します。 NSEには、さまざまなメソッドを含む非常に人気のあるショートポートライブラリが組み込まれています。 この方法を使用します

Port_or_service(ポート、サービス、プロト、状態)

ここで、ポートはポート番号、サービスはサービス名、プロトはプロトコル名(udpなど)、状態は状態です。

このメソッドは、現在解析されているサービスがポートリストのポートの1つにあるか、サービスリストのいずれかのサービスと一致する場合にtrueを返し、一致するかどうかプロトコルとステータスがチェックされます。一致しない場合はfalseが返されます。
スクリプトをPostgreSQLで機能させるには、ポート番号とサービス名を追加する必要があります。

Portrule = shortport.port_or_service((5432)、( "postgresql"))

ライブラリの接続

スクリプトの構造から少し離れて、外部ライブラリがどのように接続されているか、その機能にアクセスする必要があるかを考えてみましょう。

メンバーのみが引き続き利用可能

オプション1.「サイト」コミュニティに参加して、サイト上のすべての資料を読みます

指定された期間中にコミュニティに参加すると、すべてのハッカーマテリアルにアクセスできるようになり、個人の累積割引が増え、プロのXakepスコア評価を累積できるようになります。

以下に20の基本的なものがあります Nmapコマンドの使用例.

Nmapの使用方法を Linuxのコマンドラインネットワーク上のアクティブなホストを検索し、開いているポートをスキャンします。

あなたはどのように見るでしょう オペレーティングシステムをリモートで検出 TCP/IPスタックフィンガープリントの使用とその方法 ソフトウェアバージョンを確認するリモートサーバーで実行されています。

また、Nmapを使用して実装する方法も示します 秘密のスキャン、 どうやって ファイアウォールを定義するそしてどうやって MACアドレスを変更する.

1.単一のホストまたはIPアドレスをスキャンします

スキャン 個別のIPアドレス:

$ nmap 192.168.1.1

サーバーをスキャンする ホスト名:

$ nmap server.site

増加 詳細度スキャン結果:

$ nmap -v server..site

2.複数のIPアドレスをスキャンする

スキャン 複数のIPアドレス:

$ nmap 192.168.1.1 192.168.1.2 192.168.1.3 $ namp 192.168.1.1,2,3

スキャン サブネット:

$ nmap 192.168.1.0/24 $ nmap 192.168.1. *

スキャン IPアドレスの範囲 (192.168.1.0 — 192.168.1.200):

$ nmap 192.168.1.0-200

3.ネットワーク上でアクティブなコンピューターを検索します

役立つアドバイス:たった1つのpingコマンドでネットワークをスキャンしてください! すべてのアクティブなコンピューターを計算してください!

検索でネットワークをスキャンする アクティブなホスト:

$ nmap -sn 192.168.1.0/24

4.ファイルからホストのリストをスキャンする

からホスト/ネットワークのリストをスキャンします ファイル:

$ nmap -iL input.txt

ファイル形式:

#エントリは、コマンドラインから#Nmapが機能する任意の形式(IPアドレス、ホスト名、CIDR、IPv6、またはオクテットの範囲)にすることができます。 エントリは、1つ以上のスペース、タブ#、または改行で区切る必要があります。 $ cat input.txt server.site 192.168.1.0/24 192.168.2.1,2,3 192.168.3.0-200

5.スキャンからIP/ホスト/ネットワークを除外する

目標を除外する Nmapスキャンから:

$ nmap 192.168.1.0/24 --exclude 192.168.1.1 $ nmap 192.168.1.0/24 --exclude 192.168.1.1 192.168.1.5 $ nmap 192.168.1.0/24 --exclude 192.168.1.1,2,3

リストを除外するファイルから取得したホスト:

$ nmap 192.168.1.0/24 --excludefileexclude.txt

ホストを除外したファイル形式は上記と同じです。

6.特定のポートをスキャンします

スキャン 1つのポート:

$ nmap -p 80 192.168.1.1

スキャン 複数のポート:

$ nmap -p 80,443 192.168.1.1

スキャン ポート範囲:

$ nmap -p 80-1000 192.168.1.1

スキャン すべてのポート:

$ nmap -p "*" 192.168.1.1

最も多くのいくつかをスキャンします 共通ポート:

$ nmap --top-ports 5 192.168.1.1 $ nmap --top-ports 10 192.168.1.1

7.サポートされているIPプロトコルの定義

どれを決定する IPプロトコル(TCP、UDP、ICMPなど)スキャンされたホストをサポートします:

$ nmap -sO 192.168.1.1

8. TCP/UDPポートをスキャンします

スキャン すべてのTCPポート:

$ nmap -sT 192.168.1.1

スキャン 特定のTCPポート:

$ nmap -p T:80 192.168.1.1

スキャン すべてのUDPポート:

$ nmap -sU 192.168.1.1

スキャン 特定のUDPポート:

$ nmap -p U:53 192.168.1.1

異なるポートのスキャンを組み合わせる:

$ nmap -p U:53,79,113、T:21-25,80,443,8080 192.168.1.1

9.クイックスキャン

活性化 クイックモード走査:

$ nmap -F 192.168.1.1

* 通常のスキャンよりも少ないポートをスキャンします。

10.ポートステータスの理由を表示する

見せる 理由、これにより、Nmapはポートが特定の状態にあると見なします。

$ nmap --reason 192.168.1.1

11.開いているポートのみを表示する

見せる 開いているポートのみ(またはおそらく開いている):

$ nmap --open 192.168.1.1

12.OSの定義

Nmapの最もよく知られている機能の1つは、TCP/IPスタックの分析に基づくリモートOS検出です。

Nmapは、一連のTCPおよびUDPパケットをリモートホストに送信し、応答を調べます。

多くのテストを実行した後、Nmapは結果をデータベースと比較し、一致するものが見つかった場合は、OSに関する情報を表示します。

オンにする OSの定義:

$ nmap -O 192.168.1.1

13.サービスのバージョンの決定

オンにする サービスのバージョンの決定:

$ nmap -sV 192.168.1.1

* リモートサーバーで実行されているプログラムのバージョンを決定します。

14.ファイアウォールの検出

お使いのコンピュータがいずれかによって保護されているかどうかを確認します パケットフィルターまた ファイアウォール:

$ nmap -sA 192.168.1.1

15.MACアドレスのなりすまし

変化する MACアドレス:

$ nmap --spoof-mac 00:11:22:33:44:55 192.168.1.1

MACアドレスを変更する ランダムMAC:

$ nmap --spoof-mac 0 192.168.1.1

16.脆弱性のファイアウォールスキャン

これらの3つのスキャンタイプは、TCP RFCの微妙な抜け穴を使用して、開いているポートと閉じているポートを分離します。

RFC準拠のシステムがスキャンされている場合、SYN、RST、またはACKビットセットを含まないパケットは、ポートが閉じている場合は応答としてRSTが送信され、ポートが開いている場合は応答しません。 。

なぜなら これらのビットのいずれも設定されていない場合、残りの3つ(FIN、PSH、およびURG)の任意の組み合わせが有効になります。

TCPヌル走査:

$ nmap -sN 192.168.1.1

* ビット(TCPヘッダー0のフラグ)は設定されていません。

TCPフィン走査:

$ nmap -sF 192.168.1.1

* TCPFINビットのみが設定されます。

TCPクリスマス走査:

$ nmap -sX 192.168.1.1

* FIN、PSH、URGフラグが設定されています(パッケージはクリスマスツリーのように点灯します)。

17.隠しスキャン

役立つアドバイス:ポートスキャン中は匿名のままにしてください! Nmap + Tor + ProxyChainsを使用してください! 安全で簡単な侵入テスト!

TCPSYN走査:

$ nmap -sS 192.168.0.1

* フルTCP接続を開かないため、ハーフオープン接続スキャンと呼ばれます。

18.ホスト検出を無効にします(pingなし)

スキャンする前にホストにpingを実行しないでください。

$ nmap -Pn 192.168.1.1

19.DNSの使用を無効にする

役立つアドバイス: Linuxのセキュリティを強化する必要がありますか? DNSトラフィックを暗号化して、なりすましから保護します。

見つかったアクティブなIPアドレスごとに逆引きDNS解決を実行しないでください。