はじめてのNSEスクリプト
提供: セキュリティ
スポンサーリンク
ここでは、nmap用のHello World的なNSEスクリプトを説明します。スキャンを行うのではなく、ただ単にHelloを表示します。
読み方
- NSEスクリプト
- えぬえすいーすくりぷと
目次
概要
ここで出てくるスクリプトは、特別なスキャンしたりしません。 このスクリプトは、単に以下のことをするためのスクリプトです。
- デバッグメッセージで Hello world を表示する
- スキャン結果として Hello NSE を表示する
NSEのスケルトンスクリプトとして利用できます。
インストール
事前にnmapをインストールしてください。
nmapのバージョン
nmap 6.46 でテストしてあります。
NSEスクリプトの開発環境
vimで .nse のファイルを開くと、デフォルトの設定では、色付けされないでしょう。 vimでNSEスクリプトをシンタックスハイライト(syntax)するには、以下の設定を加えておくとよいでしょう。
""" Nmap/NSE script autocmd! BufRead,BufNewFile *.nse set filetype=lua
NSEスクリプトの構造
NSEスクリプトは、
- 5つのフィールド
- 1つのルールセクション
- 1つのアクション
から成り立ちます。
フィールド
- description
- スクリプトの説明
- author
- スクリプトの製作者
- license
- ライセンス
- categories
- スクリプトが属するカテゴリ
- dependencies
- 省略可能なフィールドです。先に実行したいスクリプトを指定します。
ルールセクション
ルールセクションは、特定のサービス、ホストに対してスクリプトの動作を実行、もしくは、スキップするか決定します。
- portrule
- スキャンを実行する対称(port)を指定します。
- hostrule
- スキャンするホスト(ホストやIPアドレス)を指定します。
アクション関数
NSEスクリプトのメイン部分です。アクション関数の戻り値がnmapの出力になります。
hello.nse
description = [[ Hello NSE script ]] author = "Kaoru"; license = "" categories = {"default,safe"} local shortport = require "shortport" local stdnse = require "stdnse" portrule = shortport.port_or_service ({80,443}, {"http","https"}) action = function (host, port) stdnse.print_debug(1, "Hello world") return "Hello NSE" end
使い方
実行するNSEスクリプトの指定は、 nmapの--scriptオプションで指定します。 ローカルホストの80ポートに hello.nse スクリプトを実行するには、以下のコマンドラインを実行します。
$ nmap --script ./hello.nse localhost -p 80
hello.nse の実行例
以下、コマンドラインでの実行例です。
$ nmap --script ./hello.nse localhost -p 80 Starting Nmap 6.46 ( http://nmap.org ) at 2014-07-17 19:53 JST Nmap scan report for localhost (127.0.0.1) Host is up (0.00021s latency). PORT STATE SERVICE 80/tcp open http |_hello: Hello NSE Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds
このようにメッセージが表示できました。
80/tcp open http |_hello: Hello NSE
デバッグ実行の例
デバッグメッセージも表示する例です。出力が多くて、わかりにくいですが、
NSE: Hello world
と真ん中あたりで表示されています。 デバッグモードでnmapを起動するには、 -d オプションを使用します。
$nmap --script ./hello.nse localhost -p 80 -d Starting Nmap 6.46 ( http://nmap.org ) at 2014-07-17 19:54 JST --------------- Timing report --------------- hostgroups: min 1, max 100000 rtt-timeouts: init 1000, min 100, max 10000 max-scan-delay: TCP 1000, UDP 1000, SCTP 1000 parallelism: min 0, max 0 max-retries: 10, host-timeout: 0 min-rate: 0, max-rate: 0 --------------------------------------------- NSE: Using Lua 5.2. NSE: Script Arguments seen from CLI: NSE: Loaded 1 scripts for scanning. NSE: Script Pre-scanning. NSE: Starting runlevel 1 (of 1) scan. Initiating Ping Scan at 19:54 Scanning localhost (127.0.0.1) [2 ports] Completed Ping Scan at 19:54, 0.00s elapsed (1 total hosts) Overall sending rates: 1501.50 packets / s. mass_rdns: Using DNS server 192.168.60.2 Initiating Connect Scan at 19:54 Scanning localhost (127.0.0.1) [1 port] Discovered open port 80/tcp on 127.0.0.1 Completed Connect Scan at 19:54, 0.00s elapsed (1 total ports) Overall sending rates: 1104.97 packets / s. NSE: Script scanning 127.0.0.1. NSE: Starting runlevel 1 (of 1) scan. NSE: Starting hello against localhost (127.0.0.1:80). Initiating NSE at 19:54 NSE: Hello world NSE: Finished hello against localhost (127.0.0.1:80). Completed NSE at 19:54, 0.00s elapsed Nmap scan report for localhost (127.0.0.1) Host is up, received unknown-response (0.00042s latency). Scanned at 2014-07-17 19:54:57 JST for 0s PORT STATE SERVICE REASON 80/tcp open http no-response |_hello: Hello NSE Final times for host: srtt: 415 rttvar: 3803 to: 100000 NSE: Script Post-scanning. NSE: Starting runlevel 1 (of 1) scan. Read from /usr/local/share/nmap: nmap-payloads nmap-services. Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds
もう少し実用的なNSEスクリプトの入門
今回は、まったくスキャン活動をしないスクリプトの例でした。実際のスキャンを行うスクリプトの入門には、 NSEスクリプトでApacheのバージョンを取得する をご参照ください。
関連項目
- nmap NSEスクリプト
- はじめてのNSEスクリプト
- NSEスクリプトでApacheのバージョンを取得する
ツイート
スポンサーリンク