HTB攻略の​第一歩 - nmapで​確実に​ポートを​見つける​方​法

5 min read


NOTE

この記事は合法的なペネトレーションテスト環境(HTB, THM等)での使用を前提としています。許可のないシステムへの攻撃は違法です。

シリーズ: HTB Enumeration シリーズ - Initial Foothold への道

TL;DR

すぐに使いたい人向けのクイックリファレンスです。

Terminal window
# 1. 準備
mkdir -p nmap
# 2. 全ポートスキャン(TCP)
nmap -Pn -p- --min-rate=1000 -T4 <target> -oG nmap/allports.gnmap
# 3. ポート番号を抽出
grep -oP '\d+/open' nmap/allports.gnmap | cut -d '/' -f 1 | tr '\n' ',' | sed 's/,$//'
# 4. 詳細スキャン(見つかったポートを指定)
nmap -Pn -p 22,80,443 -sC -sV -oA nmap/detailed <target>
# 5. UDPスキャン
nmap -Pn -sU --top-ports 20 -oA nmap/udp <target>

ワンライナー版(全ポート→詳細を一気に実行)

Terminal window
mkdir -p nmap && ports=$(nmap -Pn -p- --min-rate=1000 -T4 <target> -oG - | tee nmap/allports.gnmap | grep -oP '\d+/open' | cut -d '/' -f 1 | tr '\n' ',' | sed 's/,$//') && nmap -Pn -p$ports -sC -sV -oA nmap/targeted <target>

各オプションの詳細は以下で解説します。

はじめに

nmap(Network Mapper)は、ネットワーク探索とセキュリティ監査のためのオープンソースツールです。HTBやTHMでマシンを攻略する際、最初に実行するツールといっても過言ではありません。

この記事では、nmapの基本的な使い方から、実践的なテクニックまでを詳しく解説します。

nmapの基本

基本的な使い方

最もシンプルな使い方は、ターゲットを指定するだけです。

Terminal window
nmap <target>

これだけで、よく使われる1000ポートをスキャンしてくれます。

ホスト発見のスキップ (-Pn)

HTBのマシンはPing(ICMP Echo Request)に応答しない設定になっていることが多く、その場合nmapは「ホストがダウンしている」と判断してスキャンを中止してしまいます。

ターゲットが生きていることが確実な場合(HTBなど)は、-Pn オプションを付けてホスト発見をスキップするのが無難です。

Terminal window
nmap -Pn <target>

スキャンタイプ

nmapには様々なスキャンタイプがあります。状況に応じて使い分けましょう。

TCP SYNスキャン (-sS)

Terminal window
nmap -sS <target>
  • 別名: ステルススキャン、ハーフオープンスキャン
  • 仕組み: SYNパケットを送信し、SYN/ACKが返ればポートオープン、RSTが返ればクローズと判断
  • 特徴: 完全なTCP接続を確立しないため、ログに残りにくい
  • root権限: 必要

TCP Connectスキャン (-sT)

Terminal window
nmap -sT <target>
  • 仕組み: 通常のTCP 3ウェイハンドシェイクを完了させる
  • 特徴: root権限不要だが、ログに残りやすい
  • 使用場面: root権限がない場合、またはプロキシ経由でスキャンする場合

UDPスキャン (-sU)

Terminal window
nmap -sU <target>
  • 仕組み: UDPパケットを送信し、ICMPポート到達不能が返ればクローズと判断
  • 特徴: 非常に時間がかかる(UDPは応答がないことが多い)
  • ポイント: --top-ports 100 などで対象を絞ると効率的

NOTE

UDPスキャンは、ポートが開いている場合に「応答がない」ことが多いです(open|filteredと判定されます)。そのため、TCPスキャンに比べてタイムアウト待ちが発生しやすく、非常に時間がかかります。

Terminal window
# よく使うUDPスキャン
nmap -sU --top-ports 100 <target>

その他のスキャンタイプ

オプション名称用途
-sAACKスキャンファイアウォールのルール確認
-sWWindowスキャンACKスキャンの拡張
-sNNULLスキャンフラグなしパケット
-sFFINスキャンFINフラグのみ
-sXXmasスキャンFIN, PSH, URGフラグ

NOTE

NULL, FIN, Xmasスキャンは、ファイアウォール回避に使えることがありますが、Windowsでは正しく動作しません。

ポート指定オプション

基本的なポート指定

Terminal window
# 単一ポート
nmap -p 80 <target>
# 複数ポート
nmap -p 22,80,443 <target>
# ポート範囲
nmap -p 1-1000 <target>
# 全ポート(1-65535)
nmap -p- <target>
# よく使われるポート上位N個
nmap --top-ports 100 <target>

おすすめの使い方

HTBでは、まず全ポートスキャンを行い、その後詳細スキャンを行うのが定番です。 詳しいワークフローは「実践的なワークフロー」で解説します。

サービス・バージョン検出

バージョン検出 (-sV)

Terminal window
nmap -sV <target>

各ポートで動作しているサービスとバージョンを特定します。Exploit検索に必要な情報を取得できます。

バージョン検出の強度

Terminal window
# 強度を下げて高速化(デフォルトは7)
nmap -sV --version-intensity 2 <target>
# 全プローブを試す(最も詳細)
nmap -sV --version-all <target>

OS検出 (-O)

Terminal window
nmap -O <target>
  • 仕組み: TTLやTCPウィンドウサイズなどの特徴からOSを推測
  • root権限: 必要(生のパケットを扱うため)

タイミングオプション

タイミングテンプレート (-T)

Terminal window
nmap -T4 <target>
テンプレート名称特徴
-T0Paranoid非常に遅い、IDS回避用
-T1Sneaky遅い、IDS回避用
-T2Polite控えめ、帯域を抑える
-T3Normalデフォルト
-T4Aggressive高速、信頼できるネットワーク向け
-T5Insane最速、パケットロスの可能性あり

HTBでは-T4が一般的に使われます。

詳細なタイミング設定

Terminal window
# 最小送信レート
nmap --min-rate=1000 <target>
# 最大送信レート
nmap --max-rate=100 <target>
# パラレル実行数
nmap --min-parallelism=10 <target>

NSE(Nmap Scripting Engine)

nmapにはNSEスクリプトという強力な機能があります。

デフォルトスクリプト (-sC)

Terminal window
nmap -sC <target>

-sC--script=defaultと同等で、安全なデフォルトスクリプトを実行します。

スクリプトカテゴリ

Terminal window
# 脆弱性スキャン
nmap --script=vuln <target>
# 認証関連
nmap --script=auth <target>
# ブルートフォース
nmap --script=brute <target>
# 発見系
nmap --script=discovery <target>

便利なスクリプト例

Terminal window
# SMB脆弱性チェック
nmap --script=smb-vuln* -p 445 <target>
# HTTP関連情報収集
nmap --script=http-enum,http-headers,http-methods -p 80 <target>
# FTP匿名ログイン確認
nmap --script=ftp-anon -p 21 <target>
# SSH認証方式確認
nmap --script=ssh-auth-methods -p 22 <target>
# デフォルトクレデンシャル確認
nmap --script=*-brute -p 21,22,80 <target>

スクリプトの検索

Terminal window
# インストール済みスクリプト一覧
ls /usr/share/nmap/scripts/
# スクリプト検索
ls /usr/share/nmap/scripts/ | grep http

出力オプション

出力形式

Terminal window
# 通常出力
nmap -oN output.nmap <target>
# XML形式
nmap -oX output.xml <target>
# Grepable形式
nmap -oG output.gnmap <target>
# 全形式を一度に出力
nmap -oA output <target>

おすすめの出力設定

Terminal window
# 常にファイル出力する習慣をつける
nmap -sC -sV -oA nmap/initial <target>

ディレクトリnmap/を作っておき、そこに出力すると整理しやすいです。

実践的なワークフロー

HTBでの定番フロー

全ポートスキャンには -oG(Grepable出力)を使うと、後からポート番号を抽出しやすくなります。

Terminal window
# 1. ディレクトリ作成
mkdir -p nmap
# 2. クイック全ポートスキャン
nmap -Pn -p- --min-rate=1000 -T4 <target> -oG nmap/allports.gnmap
# 3. 結果から開いているポートを抽出
grep -oP '\d+/open' nmap/allports.gnmap | cut -d '/' -f 1 | tr '\n' ',' | sed 's/,$//'
# 4. 詳細スキャン(上記で見つかったポートを指定)
nmap -Pn -p 22,80,443 -sC -sV -oA nmap/detailed <target>
# 5. UDPも忘れずに
nmap -Pn -sU --top-ports 20 -oA nmap/udp <target>

ワンライナー(全ポート→詳細)

Terminal window
# ディレクトリ作成 & 全ポートスキャン(ファイルにも保存しつつポート番号を抽出)
mkdir -p nmap
ports=$(nmap -Pn -p- --min-rate=1000 -T4 <target> -oG - | tee nmap/allports.gnmap | grep -oP '\d+/open' | cut -d '/' -f 1 | tr '\n' ',' | sed 's/,$//')
# 詳細スキャンを実行
nmap -Pn -p$ports -sC -sV -oA nmap/targeted <target>

よくある落とし穴と対処法

1. UDPを忘れる

TCPだけでなく、UDPも確認しましょう。SNMP(161)やDNS(53)など、重要なサービスがUDPで動いていることがあります。

2. 高番号ポートを見逃す

デフォルトでは上位1000ポートしかスキャンしません。-p-で全ポートスキャンを忘れずに。

3. スキャン速度が遅い

-T4--min-rate=1000を組み合わせると、信頼できるネットワーク(HTBなど)では効率的にスキャンできます。

4. 結果を保存しない

毎回スキャンし直すのは時間の無駄です。-oAで常に保存する習慣をつけましょう。

便利なエイリアス

.bashrc.zshrcに追加しておくと便利です。

Terminal window
# クイック全ポートスキャン
alias nmapquick='nmap -Pn -p- --min-rate=1000 -T4'
# 詳細スキャン
alias nmapdetail='nmap -Pn -sC -sV -oA nmap/detailed'
# フルスキャン(全ポート + 詳細)
nmapfull() {
mkdir -p nmap
ports=$(nmap -Pn -p- --min-rate=1000 -T4 $1 -oG - | tee nmap/allports.gnmap | grep -oP '\d+/open' | cut -d '/' -f 1 | tr '\n' ',' | sed 's/,$//')
nmap -Pn -p$ports -sC -sV -oA nmap/full $1
}

まとめ

nmapはEnumerationの基礎であり、使いこなせるようになると効率が大幅に上がります。

ポイントをまとめると以下の通りです。

  • ホスト発見をスキップ (-Pn)
  • 全ポートスキャンを忘れない (-p-)
  • UDPもチェック (-sU)
  • バージョン検出を行う (-sV)
  • NSEスクリプトを活用 (-sC, --script)
  • 結果は必ず保存 (-oA)

次回は、発見したWebサービスに対するディレクトリ探索について解説します。

Happy Hacking!