基本スキャン
スキャン対象の指定
nmap 192.168.1.1 # 単一ホスト nmap 192.168.1.0/24 # サブネット全体 nmap 192.168.1.1-50 # IPレンジ nmap -iL targets.txt # ファイルからホストを読み込み
ターゲット指定
192.168.1.1単一IPアドレス
192.168.1.0/24CIDR表記(256ホスト)
192.168.1.1-254IPレンジ
example.comホスト名(IPに解決)
-iL file.txtファイルからターゲットを読み込み
--exclude 192.168.1.1特定のホストを除外
--excludefile skip.txtファイルのホストを除外
ポートスキャン
スキャンの種類
-sSTCP SYNスキャン(デフォルト、ステルス、root必要)
-sTTCP接続スキャン(完全ハンドシェイク、rootなし)
-sUUDPスキャン(低速、フィルタリングされやすい)
-sATCP ACKスキャン(ファイアウォール検出)
-sNTCP NULLスキャン(フラグなし)
-sFTCP FINスキャン(FINフラグのみ)
-sXXmasスキャン(FIN+PSH+URGフラグ)
ポートの選択
nmap -p 80,443 target # 特定のポート nmap -p 1-1000 target # ポートレンジ nmap -p- target # 全65535ポート nmap --top-ports 100 target # よく使われる上位100ポート
ポートの状態
openアプリケーションが接続を受け付けている
closedポートは到達可能だがサービスが待機していない
filteredファイアウォールがブロック、状態を判定できない
unfilteredポートはアクセス可能だが開/閉不明
open|filtered開いているかフィルタリングされているか不明
ホスト探索
探索方法
-snピングスキャンのみ(ポートスキャンなし)
-Pnホスト探索をスキップ(全て稼働中として扱う)
-PS 80,443ポートへのTCP SYN探索
-PA 80TCP ACK探索
-PU 53UDP探索
-PEICMPエコーリクエスト
-PRARP探索(ローカルネットワーク)
ネットワークスイープ
nmap -sn 192.168.1.0/24 # サブネットのpingスイープ nmap -sn -n 10.0.0.0/24 # スイープ、DNS解決スキップ nmap -sn -PR 192.168.1.0/24 # ARPスキャン(最速)
サービス検出
バージョン検出
nmap -sV target # サービスバージョンを検出 nmap -sV --version-intensity 5 target # より詳細なプローブ nmap -sV --version-all target # 全プローブを試行(低速) nmap -A target # OS+バージョン+スクリプト+トレースルート
サービスフラグ
-sV開いているポートのサービス/バージョンをプローブ
--version-intensity 0-9プローブの強度(デフォルト7)
--version-light軽量プローブ(強度2)
--version-all全プローブを試行(強度9)
-Aアグレッシブ:-sV -O --script=default -traceroute
-sCデフォルトNSEスクリプトを実行
OS検出
OSフィンガープリンティング
nmap -O target # OS検出(root必要) nmap -O --osscan-limit target # 有望なホストのみスキャン nmap -O --osscan-guess target # アグレッシブなOS推測 nmap -A target # OS検出を含む
OS検出フラグ
-OOS検出を有効化
--osscan-limit開放+閉鎖TCPポートがないホストをスキップ
--osscan-guessよりアグレッシブにOSを推測
--max-os-tries NホストあたりのOS検出最大試行回数
スクリプト(NSE)
スクリプトの使用
nmap --script=default target # defaultカテゴリ nmap --script=vuln target # 脆弱性スクリプト nmap --script=http-headers target nmap --script="http-*" target # ワイルドカードマッチ
スクリプトカテゴリ
default安全で有用なスクリプト(-sCの省略形)
vuln既知の脆弱性をチェック
safe非侵襲的なスクリプト
intrusive対象をクラッシュさせたりIDSを起動する可能性あり
discoveryネットワークとサービスの探索
auth認証関連のチェック
bruteブルートフォース認証テスト
exploit積極的な悪用の試み
便利なスクリプト
http-titleWebページのタイトルを取得
ssl-certSSL証明書の詳細を表示
ssh-hostkeySSHホストキーのフィンガープリントを表示
dns-bruteDNSサブドメインを列挙
smb-os-discoverySMB経由でWindows OSを検出
vuln全脆弱性チェックを実行
出力フォーマット
出力オプション
nmap -oN scan.txt target # 通常テキスト出力 nmap -oX scan.xml target # XML出力 nmap -oG scan.gnmap target # grepable出力 nmap -oA scan_all target # 全フォーマット同時出力
出力フラグ
-oN file通常出力をファイルに保存
-oX fileXML出力(ツール/パース用)
-oG fileGrepable出力(1ホスト1行)
-oA basename3つの全フォーマット(basename.nmap/xml/gnmap)
-v冗長度を上げる(-vvでさらに詳細)
-dデバッグ出力(-ddでさらに詳細)
--open開いているポートのみ表示
--reasonポート状態の理由を表示
タイミングとパフォーマンス
タイミングテンプレート
-T0(paranoid)非常に低速、IDS回避(プローブ間隔5分)
-T1(sneaky)低速、IDS回避(プローブ間隔15秒)
-T2(polite)低速、帯域幅を抑える
-T3(normal)デフォルトのタイミング
-T4(aggressive)高速、信頼性の高いネットワークを前提
-T5(insane)最速、結果を見逃す可能性あり
細かいチューニング
--min-rate 1000最低1000パケット/秒を送信
--max-rate 500500パケット/秒に制限
--max-retries 2プローブの最大再送回数
--host-timeout 30m30分超えたらホストをスキップ
--scan-delay 1sプローブ間の遅延
--min-parallelism 10最小並列プローブグループ数
ファイアウォール回避
回避テクニック
-fパケットを断片化(8バイトチャンク)
-D RND:55つのランダムIPでデコイスキャン
-S spoof_ip送信元IPを偽装(rawパケットが必要)
-e eth0特定のネットワークインターフェースを使用
--source-port 53特定の送信元ポートを使用(例:DNS)
--data-length 25パケットにランダムデータを追加
--spoof-mac 0MACアドレスをランダム化
回避の例
nmap -f -D RND:3 target # 断片化+デコイ nmap --source-port 53 target # DNSポート(許可されやすい) nmap -T1 --scan-delay 5s target # IDS回避のため低速化
よくあるパターン
クイック偵察
nmap -T4 -F target # 一般的なポートの高速スキャン nmap -T4 -A -v target # OS+サービス検出 nmap -sV --top-ports 1000 target # 上位1000ポート+バージョン
総合スキャン
# 完全TCP+サービス+OS+スクリプト nmap -sS -sV -O -sC -p- -T4 -oA full target # 一般的なポートのUDPスキャン nmap -sU --top-ports 50 target
Webサーバー監査
nmap -p 80,443 --script=http-title,http-headers,\ ssl-cert,http-methods target # オープンプロキシと脆弱性のチェック nmap -p 80,443,8080 --script=http-open-proxy,vuln target
ネットワークインベントリ
# OS情報と共に全稼働ホストを探索 nmap -sn 192.168.1.0/24 -oG - | grep "Up" # サブネットのサービスインベントリ nmap -sV -T4 192.168.1.0/24 -oX inventory.xml