Nmapは、人気のある強力なクロスプラットフォームのコマンドラインネットワークセキュリティスキャナーおよび探索ツールです。 また、ネットワークに接続されているシステムの概要を把握するのにも役立ちます。 これを使用して、ライブホストのすべてのIPアドレスを調べたり、それらのホストで実行されている開いているポートやサービスをスキャンしたりできます。
の興味深い機能の1つ Nmap それは Nmapスクリプトエンジン ((NSE)、これによりさらに柔軟性と効率が向上します。 これにより、Luaプログラミング言語で独自のスクリプトを記述し、これらのスクリプトを他のNmapユーザーと共有することができます。
また読む:Linux用のNmapコマンドの29の実用例
NSEスクリプトには、次の4つのタイプがあります。
- プレルールスクリプト – Nmapのスキャン操作の前に実行されるスクリプトであり、Nmapがターゲットに関する情報をまだ収集していないときに実行されます。
- ホストスクリプト – Nmapがホスト検出、ポートスキャン、バージョン検出、ターゲットホストに対するOS検出などの通常の操作を実行した後に実行されるスクリプトです。
- サービススクリプト –ターゲットホストでリッスンしている特定のサービスに対して実行されるスクリプトです。
- ポストルールスクリプト –Nmapがすべてのターゲットホストをスキャンした後に実行されるスクリプトです。
次に、これらのスクリプトは、認証用のスクリプトを含むさまざまなカテゴリにグループ化されます(auth)、ホストの発見(放送)、認証資格情報を推測するブルートフォース攻撃(野蛮人)、ネットワークについてもっと知る(発見)、サービス拒否を引き起こします(dos)、いくつかの脆弱性を悪用する(エクスプロイト)など。多くのスクリプトがデフォルトのカテゴリに属しています。
注意:先に進む前に、次の重要なポイントに注意する必要があります。
- 第三者からのスクリプトを批判的に調べずに、または作成者を信頼する場合にのみ実行しないでください。 これは、これらのスクリプトがサンドボックスで実行されないため、予期せずまたは悪意を持ってシステムに損害を与えたり、プライバシーを侵害したりする可能性があるためです。
- 次に、これらのスクリプトの多くは、次のいずれかとして実行される可能性があります。 プレルール または ポストルール 脚本。 これを考慮して、一貫性を保つためにプリルールを使用することをお勧めします。
- Nmapは scripts / script.db 利用可能なデフォルトのスクリプトとカテゴリを把握するためのデータベース。
使用可能なすべてのNSEスクリプトの場所を確認するには、次のようにターミナルで検索ユーティリティを実行します。
$ locate *.nse /usr/share/nmap/scripts/acarsd-info.nse /usr/share/nmap/scripts/address-info.nse /usr/share/nmap/scripts/afp-brute.nse /usr/share/nmap/scripts/afp-ls.nse /usr/share/nmap/scripts/afp-path-vuln.nse /usr/share/nmap/scripts/afp-serverinfo.nse /usr/share/nmap/scripts/afp-showmount.nse /usr/share/nmap/scripts/ajp-auth.nse /usr/share/nmap/scripts/ajp-brute.nse /usr/share/nmap/scripts/ajp-headers.nse /usr/share/nmap/scripts/ajp-methods.nse /usr/share/nmap/scripts/ajp-request.nse /usr/share/nmap/scripts/allseeingeye-info.nse /usr/share/nmap/scripts/amqp-info.nse /usr/share/nmap/scripts/asn-query.nse ...
NSEスクリプトは、 --script
フラグ。カテゴリ、スクリプトファイル名、またはスクリプトが配置されているディレクトリの名前を指定して、独自のスクリプトを実行することもできます。
スクリプトを有効にするための構文は次のとおりです。
$ nmap -sC target #load default scripts OR $ nmap --script filename|category|directory|expression,... target
スクリプトの説明は、 --script-help
オプション。 さらに、を介していくつかのスクリプトに引数を渡すことができます --script-args
そして --script-args-file
オプションの場合、後者はコマンドライン引数ではなくファイル名を提供するために使用されます。
ほとんどのデフォルトスクリプトでスキャンを実行するには、 -sC
フラグを立てるか、代わりに使用します --script=default
示されているように。
$ nmap -sC scanme.nmap.org OR $ nmap --script=default scanme.nmap.org OR $ nmap --script default scanme.nmap.org
サンプル出力
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:36 IST Nmap scan report for scanme.nmap.org (45.33.32.156) Host is up (0.0027s latency). Not shown: 999 filtered ports PORT STATE SERVICE 80/tcp open http |_http-title: Go ahead and ScanMe! Nmap done: 1 IP address (1 host up) scanned in 11.74 seconds
適切な目的でスクリプトを使用するには、まず、スクリプトが実際に何をするかについて簡単に説明します。たとえば、 http-headers。
$ nmap --script-help http-headers scanme.nmap.org
サンプル出力
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:37 IST http-headers Categories: discovery safe https://nmap.org/nsedoc/scripts/http-headers.html Performs a HEAD request for the root folder ("/") of a web server and displays the HTTP headers returned.
Nmapスキャンを実行するためのNSEスクリプトのロード
スクリプトを選択またはロードして、以下で説明するさまざまな方法でスキャンを実行できます。
スクリプト名の使用
スクリプトの機能がわかれば、それを使用してスキャンを実行できます。 1つのスクリプトを使用することも、スクリプト名のコンマ区切りリストを入力することもできます。 以下のコマンドを使用すると、ターゲットホストのWebサーバーで構成されているHTTPヘッダーを表示できます。
$ nmap --script http-headers scanme.nmap.org
HTTPヘッダーをスキャンする
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:39 IST Nmap scan report for scanme.nmap.org (45.33.32.156) Host is up (0.27s latency). Not shown: 996 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http | http-headers: | Date: Wed, 15 Nov 2017 05:10:04 GMT | Server: Apache/2.4.7 (Ubuntu) | Accept-Ranges: bytes | Vary: Accept-Encoding | Connection: close | Content-Type: text/html | |_ (Request type: HEAD) 179/tcp filtered bgp 31337/tcp open Elite Nmap done: 1 IP address (1 host up) scanned in 20.96 seconds
カテゴリの使用
1つのカテゴリから、またはカテゴリのコンマ区切りリストからスクリプトをロードすることもできます。 この例では、デフォルトおよびブロードキャストカテゴリのすべてのスクリプトを使用して、ホストでスキャンを実行しています。 192.168.56.1。
$ nmap --script default,broadcast 192.168.56.1
*ワイルドカードの使用
これは、特定の名前パターンを持つスクリプトを選択する場合に役立ちます。 たとえば、名前がで始まるすべてのスクリプトをロードするには ssh、ターミナルで以下のコマンドを実行します。
$ nmap --script "ssh-*" 192.168.56.1
ブール式の使用
ブール式を使用してスクリプトを選択することもできます。ブール式は、 そして、 または、および ない 演算子。 また、ブール式の名前はカテゴリ、ファイル名は script.db、またはすべて。
次のコマンドは、デフォルトまたはブロードキャストカテゴリからスクリプトをロードします。
$ nmap --script "default or broadcast" 192.168.56.10
これは次と同等です:
$ nmap --script default,broadcast 192.168.56.10
内のスクリプトを省略してすべてのスクリプトをロードするには 脆弱性 カテゴリの場合、ターミナルでこのコマンドを実行します。
$ nmap --script "not vuln" 192.168.56.10
次のコマンドは少し複雑に見えますが、理解しやすいです。デフォルトまたはブロードキャストカテゴリのスクリプトを選択し、名前がssh-で始まるものを除外します。
$ nmap --script "(default or broadcast) and not ssh-*" 192.168.56.10
重要なのは、次のように、カテゴリ、スクリプト名、カスタムスクリプトを含むディレクトリ、またはブール式を組み合わせてスクリプトをロードすることができることです。
$ nmap --script broadcast,vuln,ssh-auth-methods,/path/to/custom/scripts 192.168.56.10
NSEスクリプトへの引数の受け渡し
以下は、スクリプトに引数を渡す方法を示す例です。 –script-args オプション:
$ nmap --script mysql-audit --script-args "mysql-audit.username="root", mysql-audit.password='password_here', mysql-audit.filename="nselib/data/mysql-cis.audit""
ポート番号を渡すには、 -p nmapオプション:
$ nmap -p 3306 --script mysql-audit --script-args "mysql-audit.username="root", mysql-audit.password='password_here' , mysql-audit.filename="nselib/data/mysql-cis.audit""
上記のコマンドは、MySQLデータベースサーバーのセキュリティ構成の監査を実行します。 CIS MySQL v1.0.2 基準。 他のMySQL監査用に独自の便利なカスタム監査ファイルを作成することもできます。
今のところ以上です。 詳細については、Nmapのmanページを参照するか、チェックアウトしてください。 NSEの使用法。
独自のNSEスクリプトの作成を開始するには、次のガイドを確認してください。 https://nmap.org/book/nse-tutorial.html
結論
Nmap は、すべてのシステムまたはネットワーク管理者がセキュリティの武器として必要とする、非常に強力で便利なツールです。 NSE 単にそれに効率を追加します。
この記事では、 Nmapスクリプトエンジン さまざまなカテゴリで利用可能なさまざまなスクリプトを見つけて使用する方法を検討しました。 ご不明な点がございましたら、下のコメントフォームからお気軽にご返信ください。
Hope this helps!