導入
本記事は以下の続編です。
この記事で得られること
- 能動的な偵察としてNmap、各種列挙、Scapyの概要把握
- Nmap / Scapy / Wireshark を用いた具体的なスキャン手法を、ログベースで把握
⚠️ 注意(必読)
本記事で学ぶ技術は、悪用すると法的問題や社会的被害を生む可能性があります。
学習・実験は必ず許可された環境(サンドボックス化された学習 VM など)で行ってください。無許可のハッキングは違法です。
🧭 第3章の概要
本章では、攻撃前段階にあたる「情報収集」と「脆弱性スキャン」について扱います。
攻撃者視点では「偵察」、防御者視点では「攻撃対象の特定・可視化」にあたる重要なフェーズです。
3章詳細:
- 受動的な情報収集(Passive Reconnaissance)(3.1章)
- 能動的な情報収集(Active Reconnaissance)(3.2章)👈本記事
- 脆弱性スキャンの実行(3.3章)
- スキャン結果の解析(3.4章)
3.2 能動的偵察(Active Reconnaissance)
● ポートスキャンの基礎
偵察フェーズの衝動ではホスト列挙(Host Enumeration)が実施され、これに続けてポートスキャンを行います。本節ではその基本動作を整理します。
特定ホストに対し、TCP/UDPプローブを送信し、以下の応答によりポート状態を判定します。
| 応答 | 判定内容 |
|---|---|
| SYN/ACK | ポートは LISTEN 状態 |
| RST | ポートは閉塞(Closed) |
| 応答なし | FW/ACL によるフィルタリングの可能性が高い |
● Nmap の代表的スキャン手法
Nmapとは主にUNIX系OSで用いられるネットワーク調査ツールの一つです。
■ TCP Connect Scan(-sT)
- デフォルトのスキャン方式
- 3-way ハンドシェイクを完了するため IDS/IPS に検知されやすい
| 応答 | 判定内容 |
|---|---|
| SYN/ACK | ポートは LISTEN 状態 |
| RST | ポートは閉塞(Closed) |
| 応答なし | FW/ACL によるフィルタリングの可能性が高い |
■ UDP Scan(-sU)
- DNS / SNMP / DHCP など UDP サービス列挙に使用
- ICMP Unreachableに依存するため レート制限で遅延しやすい
| 応答 | 判定内容 |
|---|---|
| ICMP Port Unreachable | ポート閉塞(closed) |
| 応答なし | ポート開放またはフィルター(open/filterd) |
| UDPの応答 | ポート開放(open) |
■ TCP FIN Scan(-sF)
- ステルス性の高いスキャン
- FIN パケット送信後の応答差異を利用しポート状態を推定
※BSD系OSで有効ですが、WindowsはすべてRSTのため利用は限定的
| 応答 | 判定内容 |
|---|---|
| ICMP到達不能エラー | FW/ACL によるフィルタリングまたはタイムアウト |
| RSTを受信 | ポートは閉塞(Closed) |
| 応答なし | ポートは開放(Open)されている可能性がある |
■ Host Discovery(-sn)
- ICMP Echo / Timestamp 等を用いた生存ホスト調査
■ Timing Templates(-T0〜-T5)
- 6つのタイミングテンプレートを使い分けたスキャンが可能
| テンプレート | 特徴 |
|---|---|
| T0 Paranoid | 最低速。IDS 回避を目的とした超低速設定 |
| T1 Sneaky | Paranoid より高速だが依然として低速 |
| T2 Polite | 帯域節約。デフォルトの約10倍遅い |
| T3 Normal | デフォルト設定 |
| T4 Aggressive | 低遅延環境向けの高速スキャン |
| T5 Insane | 極めて高速。誤判定・検知リスクが高い |
列挙(Enumeration)
偵察で収集した情報をもとに、システムから実データを体系的に抜き出す工程(詳細な情報収集)
● ホスト列挙
- ホスト(主にIPアドレス)を収集する行為
- 外部ネットワークでは IP レンジ指定、内部ではサブネット全体を対象として収集
- Nmap / Masscan など高速スキャナが利用される
コマンドと抜粋結果例
$namp -sn 192.168.0.0/16
Starting Nmap 7.80 ( https://nmap.org ) at 20XX-XX-XX 14:32 EDT
~略~
Nmap scan report for 192.168.0.1
Host is up (0.00094s latency).
~略~
● SMB/Windows ユーザー列挙
SMB(Server Message Block)はWindowsで利用されるファイルやプリンターを共有される通信プロトコルのことです。
■ SMB_COM_NEGOTIATE
クライアントからサーバーに対して送信されるネゴシエーション
サーバー応答から以下が判別可能:
- メッセージ署名(SMB Signing)の有無
- 認証方式(ユーザー/共有レベル)
- 平文パスワード利用可否
- サーバー時刻・タイムゾーン
→ ミスコンフィグにより "内部メタデータなど" が露呈するケースあり
■ SMB_COM_SESSION_SETUP_ANDX
ネゴシエーション後の認証プロセス
- 認証フェーズでユーザー名・パスワード・ドメイン情報を送信
- 暗号化されていない場合には簡単に盗聴される
- 暗号されていても、Lanman/NTLM などのツールによるオフライン総当たり攻撃が可能なこともある
SMB/Windowsのユーザー列挙に関するコマンドと抜粋結果例
$namp --script smb-enum-users.nse 192.168.XXX.YYY
Starting Nmap 7.80 ( https://nmap.org ) at 20XX-XX-XX 14:32 EDT
~略~
Host script results:
| smb-enum-users:
| VULNHOST-1\user (RID: 1200)
| Full name:
| Description:
~略~
● グループ列挙(SID/RID ベース)
RIDは相対識別子を表し、SIDという絶対識別子(キュリティ識別子)の一部を表す。
RID から以下のデフォルトロールが推定可能:
- Administrator/Guest/Domain Users など
コマンドと抜粋結果例
$nmap --script smb-enum-groups.nse --script-args smbusername=user,smbpass=user 192.168.XXX.YYY
Starting Nmap 7.80 ( https://nmap.org ) at 20XX-XX-XX 14:32 EDT
~略~
| smb-enum-groups:
| Builtin\Administrators (RID: 500): Administrator
~略~
● ネットワーク共有列挙
SMBを利用しファイル、フォルダ、プリンタの共有しているシステムを洗い出し、横展開攻撃の起点を発見することが目的です。
コマンドと抜粋結果例
$nmap --script smb-enum-shares.nse -p 445 192.168.XXX.YYY
Starting Nmap 7.80 ( https://nmap.org ) at 20XX-XX-XX 14:32 EDT
~略~
Host script results:
| smb-enum-shares:
~略~
| \\192.168.XXX.YYY\secret_folder:
| Type: STYPE_DISKTREE
| Comment: Extremely sensitive information
~略~
● SMB 列挙ツール
更なる列挙のためのSMBのツールをいくつか補足で紹介。
■ Nmap NSE(-sC)
NSEとはNmap Scripting Engineの略で、Nmapツールが持つスクリプトエンジンのこと。
NSEスクリプトと呼ばれ要はスクリプトが動作するイメージ。
- -sCはデフォルトカテゴリに属するNSEスクリプト群を実行
- Samba バージョン検出やOSverの確認が可能
コマンドと抜粋結果例
$nmap -sC 445 192.168.XXX.YYY
Starting Nmap 7.80 ( https://nmap.org ) at 20XX-XX-XX 14:32 EDT
~略~
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.9.5-Debian)
| Computer name: user-1
| NetBIOS computer name: user-1\x00
| Domain name: user.org
| FQDN: user-1.user.org
~略~
■ enum4linux / enum4linux-ng
enum4linuxは、WindowsとSamba/CIFSサーバー上の情報を列挙(列挙)するためのLinuxコマンドラインツール
- ユーザー/グループ/共有等を一括列挙
- ng版は Python 実装で高速・可読性良好
enum4linuxのコマンドと抜粋結果例
$enum4linux 192.168.XXX.YYY
Starting enum4linux v0.8.9 ( http://labs.portcullis.co.uk/application/enum4linux/ )
~略~
=============================================
| Getting domain SID for 192.168.XXX.YYY |
=============================================
Domain Name: WORKGROUP
Domain Sid: (NULL SID)
~略~
========================================
| OS information on 192.168.XXX.YYY |
========================================
・・・
[+] Got OS info for 192.168.XXX.YYY from srvinfo:
user-1 Wk Sv PrQ Unx NT SNT Samba 4.9.5-Debian
~略~
===============================
| Users on 192.168.XXX.YYY |
===============================
index: 0x1 RID: 0x3e8 acb: 0x00000010 Account: user Name: Desc:
user:[user] rid:[0x3e8]
===========================================
| Share Enumeration on 192.168.XXX.YYY |
===========================================
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
secret_folder Disk Extremely sensitive information
[+] Attempting to map shares on 192.168.XXX.YYY
//192.168.XXX.YYY/print$ Mapping: DENIED, Listing: N/A
//192.168.XXX.YYY/secret_folder Mapping: DENIED, Listing: N/A
~略~
=======================================================
| Users on 192.168.XXX.YYY via RID cycling (RIDS: 500-550, 1000-1050) |
=======================================================
・・・
[+] Enumerating users using SID S-1-22-1 and logon username '', password ''
S-1-22-1-1000 Unix User\user (Local User)
~略~
■ smbclient
- 対話形式で共有リソースへ接続し詳細確認が可能
コマンドと抜粋結果例
$smbclient -L \\\192.168.XXX.YYY
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
secret_folder Disk Extremely sensitive information
● Web アプリケーション列挙
前述のホスト列挙などで対象のサーバーが稼働中であることを前提に実施する内容。
NmapのNSEスクリプトで:
- ディレクトリ/ファイルのブルートフォース
- Apache/Tomcat のデフォルト管理ページ検出
コマンドと抜粋結果例
$nmap -sV --script=http-enum -p 80 \\\192.168.XXX.YYY
~略~
| http-enum:
| /admin/: Possible admin folder
| /admin/index.html: Possible admin folder
|_ /s/: Potentially interesting folder
|_http-server-header: nginx/1.17.2
~略~
Niktoで:
NiktoはオープンソースのWeb脆弱性スキャナーツール。
Nmapとの違いとしてはスキャンが体系的で網羅的だが、
結果が冗長で誤検知も一定数含まれる
コマンドと抜粋結果例
$nikto -h 192.168.XXX.YYY
- Nikto v2.1.6
-----------------------------------------------------------------------
+ Target IP: 192.168.XXX.YYY
+ Target Hostname: 192.168.XXX.YYY
+ Target Port: 80
-----------------------------------------------------------------------
+ Server: nginx/1.17.2
~略~
+ OSVDB-3092: /admin/: This might be interesting...
+ /admin/index.html: Admin login page/section found.
+ /wp-admin/: Admin login page/section found.
+ /wp-login/: Admin login page/section found.
~略~
● サービス列挙(Windows Services)
NmapのNSEスクリプトのうち smb-enum-processes により、サービス一覧を収集可能。
コマンド例
$nmap --script smb-enum-processes.nse --script-args smbusername=user 、smbpass=user -p445 192.168.XXX.YYY
● パケットクラフティング(Scapy)
Scapy は Pythonベースのパケット生成ツール。
できること:
- 任意プロトコルパケット生成
- SYN スキャン
- カスタムペイロード埋め込み
SYNスキャンのコマンド例
>>> ans, unans = sr1(IP(dst='192.168.XXX.YYY')/TCP(dport=445,flags='S'))
🔍実践学習①Nmap による列挙
Nmapの基本的な使い方を実際の偵察/列挙の流れに沿って確認していきます。
1. ネットワークインターフェース確認
- br-internalのインターフェース(サブネット)を確認します。
- br-internalを対象とするのは、当該サブネット上にスキャン対象のサーバーを立てているためです。
┌──(kali㉿Kali)-[~]
└─$ ifconfig
br-internal: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.6.6.1 netmask 255.255.255.0 broadcast 10.6.6.255
inet6 fe80::42:dff:fe45:516b prefixlen 64 scopeid 0x20<link>
ether 02:42:0d:45:51:6b txqueuelen 0 (Ethernet)
RX packets 640 bytes 36608 (35.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 46 bytes 4182 (4.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:9eff:febc:6bea prefixlen 64 scopeid 0x20<link>
ether 02:42:9e:bc:6b:ea txqueuelen 0 (Ethernet)
RX packets 338 bytes 58366 (56.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 125 bytes 9095 (8.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 3952 bytes 8966417 (8.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3952 bytes 8966417 (8.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
br-internalが10.6.6.1/24であることが3行目から確認できます。
2. Nmap バージョン確認
- 今回使用するNmapのバージョンを確認します。
┌──(kali㉿Kali)-[~]
└─$ nmap -V
Nmap version 7.94 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.4.4 openssl-3.0.9 libssh2-1.10.0 libz-1.2.13 libpcre-8.39 libpcap-1.10.4 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select
3行目よりバージョンを確認してます。(あまり意識してません。)
3. Discovery Scan
- 偵察対象特定のためにbr-internalのサブネット上のホストを探索します。
※ICMP/TCP SYN/ACK/Timestamp を併用し生存ホストを特定しています。
┌──(kali㉿Kali)-[~]
└─$ nmap -sn 10.6.6.0/24
Starting Nmap 7.94 ( https://nmap.org ) at 2025-09-15 11:18 UTC
Nmap scan report for 10.6.6.1
Host is up (0.00034s latency).
Nmap scan report for webgoat.vm (10.6.6.11)
Host is up (0.00044s latency).
Nmap scan report for juice-shop.vm (10.6.6.12)
Host is up (0.00039s latency).
Nmap scan report for dvwa.vm (10.6.6.13)
Host is up (0.00011s latency).
Nmap scan report for mutillidae.vm (10.6.6.14)
Host is up (0.000051s latency).
Nmap scan report for gravemind.vm (10.6.6.23)
Host is up (0.00035s latency).
Nmap scan report for 10.6.6.100
Host is up (0.00032s latency).
Nmap done: 256 IP addresses (7 hosts up) scanned in 2.52 seconds
今回は対象ホストを10.6.6.23として以降のスキャニングを実行します。
4. デフォルトスキャン
- nampのデフォルトでスキャンを実行し、どういったプロトコルが動作しているかを確認します。
┌──(kali㉿Kali)-[~]
└─$ nmap 10.6.6.23
Starting Nmap 7.94 ( https://nmap.org ) at 2025-09-15 11:21 UTC
Nmap scan report for gravemind.vm (10.6.6.23)
Host is up (0.00016s latency).
Not shown: 994 closed tcp ports (conn-refused)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
53/tcp open domain
80/tcp open http
139/tcp open netbios-ssn
445/tcp open microsoft-ds
Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds
8行目あたりのログより、ftp,ssh,DNS,HTTP,SMB(139,445)が動作していることが確認できます。
5. OS Detection
- 同様のホストに
-Oのオプションを付けて動作するOSを確認します。
┌──(kali㉿Kali)-[~]
└─$ sudo nmap -O 10.6.6.23
[sudo] password for kali:
Starting Nmap 7.94 ( https://nmap.org ) at 2025-09-15 11:22 UTC
Nmap scan report for gravemind.vm (10.6.6.23)
Host is up (0.000069s latency).
Not shown: 994 closed tcp ports (reset)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
53/tcp open domain
80/tcp open http
139/tcp open netbios-ssn
445/tcp open microsoft-ds
MAC Address: 02:42:0A:06:06:17 (Unknown)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
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 1.51 seconds
19行目より、OSバージョンがLinux 4.15 - 5.8であることが確認できます。
6. 詳細スキャン(-v -p -sV -T4)
- 一部おさらいですが、
-v -p -sV -T4のオプションを利用し、詳細モードでポートを指定しサービス/バージョン情報を確認しながら高速スキャンを実行します。 - FTPにあたりを付けてスキャンしてます。
──(kali㉿Kali)-[~]
└─$ nmap -v -p21 -sV -T4 10.6.6.23
Starting Nmap 7.94 ( https://nmap.org ) at 2025-09-15 11:25 UTC
NSE: Loaded 46 scripts for scanning.
Initiating Ping Scan at 11:25
Scanning 10.6.6.23 [2 ports]
Completed Ping Scan at 11:25, 0.00s elapsed (1 total hosts)
Initiating Connect Scan at 11:25
Scanning gravemind.vm (10.6.6.23) [1 port]
Discovered open port 21/tcp on 10.6.6.23
Completed Connect Scan at 11:25, 0.00s elapsed (1 total ports)
Initiating Service scan at 11:25
Scanning 1 service on gravemind.vm (10.6.6.23)
Completed Service scan at 11:25, 0.00s elapsed (1 service on 1 host)
NSE: Script scanning 10.6.6.23.
Initiating NSE at 11:25
Completed NSE at 11:25, 0.00s elapsed
Initiating NSE at 11:25
Completed NSE at 11:25, 0.00s elapsed
Nmap scan report for gravemind.vm (10.6.6.23)
Host is up (0.00016s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
Service Info: OS: Unix
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
FTP(21番)のバージョン情報が3.0.3であることが24行目からわかります。
※本記事では扱ってませんが、このFTPバージョンで脆弱性がある場合エクスプロイト(脆弱性の悪用)の恐れがあります。
7. 高度スキャン(-A)
- FTPにおける脆弱性の追加調査のため
-Aオプションを利用しより多くの情報(OS検出、スクリプトスキャン、tracerouteなど)を取得していきます。
┌──(kali㉿Kali)-[~]
└─$ nmap -p21 -sV -A 10.6.6.23
Starting Nmap 7.94 ( https://nmap.org ) at 2025-09-15 11:51 UTC
Nmap scan report for gravemind.vm (10.6.6.23)
Host is up (0.00020s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-r--r-- 1 0 0 16 Aug 13 2021 file1.txt
| -rw-r--r-- 1 0 0 16 Aug 13 2021 file2.txt
| -rw-r--r-- 1 0 0 29 Aug 13 2021 file3.txt
|_-rw-r--r-- 1 0 0 26 Aug 13 2021 supersecretfile.txt
| ftp-syst:
| STAT:
| FTP server status:
| Connected to 10.6.6.1
| 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
| At session startup, client count was 1
| vsFTPd 3.0.3 - secure, fast, stable
|_End of status
Service Info: OS: Unix
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds
10行目より4つのアクセス可能ファイルを検出できます。
参考. フルスキャン
- 最初から対象指定せずフルスキャンも可能ですが、今回のローカル環境での探索でも20秒程度時間を必要とします。
┌──(kali㉿Kali)-[~]
└─$ nmap -A 10.6.6.23
Starting Nmap 7.94 ( https://nmap.org ) at 2025-09-15 11:53 UTC
Nmap scan report for gravemind.vm (10.6.6.23)
Host is up (0.00010s latency).
Not shown: 994 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
| ftp-syst:
| STAT:
| FTP server status:
| Connected to 10.6.6.1
| 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
| At session startup, client count was 3
| vsFTPd 3.0.3 - secure, fast, stable
|_End of status
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-r--r-- 1 0 0 16 Aug 13 2021 file1.txt
| -rw-r--r-- 1 0 0 16 Aug 13 2021 file2.txt
| -rw-r--r-- 1 0 0 29 Aug 13 2021 file3.txt
|_-rw-r--r-- 1 0 0 26 Aug 13 2021 supersecretfile.txt
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 7f:9d:b7:59:47:74:0e:8e:90:83:24:2a:33:6c:06:30 (RSA)
| 256 52:a2:29:69:72:54:dc:47:ab:9f:0f:ce:b9:79:e1:c1 (ECDSA)
|_ 256 cd:4b:02:54:ea:60:df:a7:2d:a2:05:7f:e1:df:af:9d (ED25519)
53/tcp open domain ISC BIND 9.11.5-P4-5.1+deb10u5 (Debian Linux)
| dns-nsid:
|_ bind.version: 9.11.5-P4-5.1+deb10u5-Debian
80/tcp open http nginx 1.14.2
|_http-server-header: nginx/1.14.2
|_http-title: Home
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open �w?(hU Samba smbd 4.9.5-Debian (workgroup: WORKGROUP)
Service Info: Host: GRAVEMIND; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.9.5-Debian)
| Computer name: gravemind
| NetBIOS computer name: GRAVEMIND\x00
| Domain name: \x00
| FQDN: gravemind
|_ System time: 2025-09-15T11:53:40+00:00
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-time:
| date: 2025-09-15T11:53:40
|_ start_date: N/A
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 19.53 seconds
🔍SMB サービス列挙
Nmapによる偵察結果をもとにSMBサービスの列挙方法を理解します。
● ユーザー列挙
- SMBサービスの脆弱性探索のためポート139及び445のスキャンを実行します。
┌──(kali㉿Kali)-[~]
└─$ nmap -A -p139,445 10.6.6.23
Starting Nmap 7.94 ( https://nmap.org ) at 2025-09-15 11:58 UTC
Nmap scan report for gravemind.vm (10.6.6.23)
Host is up (0.00021s latency).
PORT STATE SERVICE VERSION
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-0 Samba smbd 4.9.5-Debian (workgroup: WORKGROUP)
Service Info: Host: GRAVEMIND
Host script results:
| smb2-time:
| date: 2025-09-15T11:58:39
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.9.5-Debian)
| Computer name: gravemind
| NetBIOS computer name: GRAVEMIND\x00
| Domain name: \x00
| FQDN: gravemind
|_ System time: 2025-09-15T11:58:38+00:00
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 16.44 seconds
20行目あたりからSambaが4.9.5-Debianで動作していることやComuputer nameがgraveminであることなどがわかります。
- SMBユーザーを偵察するために、以下NSEスクリプトを利用して列挙します。
┌──(kali㉿Kali)-[~]
└─$ nmap --script smb-enum-users.nse -p139,445 10.6.6.23
Starting Nmap 7.94 ( https://nmap.org ) at 2025-09-15 12:09 UTC
Nmap scan report for gravemind.vm (10.6.6.23)
Host is up (0.00014s latency).
PORT STATE SERVICE
139/tcp open netbios-ssn
445/tcp open microsoft-ds
Host script results:
| smb-enum-users:
| GRAVEMIND\arbiter (RID: 1001)
| Full name:
| Description:
| Flags: Account disabled, Normal user account, Password not required
| GRAVEMIND\masterchief (RID: 1000)
| Full name:
| Description:
|_ Flags: Account disabled, Normal user account, Password not required
Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds
13,17行目からarbiterとmasterchidefというSMBユーザーがいることがわかり、16,20行目からそれぞれパスワードが不要であることもわかります。
● 共有フォルダ列挙
- NSEスクリプトを利用しセキュリティホールとなりうる公開された共有ディレクトリを列挙
┌──(kali㉿Kali)-[~]
└─$ nmap --script smb-enum-shares.nse -p445 10.6.6.23
Starting Nmap 7.94 ( https://nmap.org ) at 2025-09-15 12:10 UTC
Nmap scan report for gravemind.vm (10.6.6.23)
Host is up (0.00025s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
Host script results:
| smb-enum-shares:
| account_used: <blank>
| \\10.6.6.23\IPC$:
| Type: STYPE_IPC_HIDDEN
| Comment: IPC Service (Samba 4.9.5-Debian)
| Users: 1
| Max Users: <unlimited>
| Path: C:\tmp
| Anonymous access: READ/WRITE
| \\10.6.6.23\print$:
| Type: STYPE_DISKTREE
| Comment: Printer Drivers
| Users: 0
| Max Users: <unlimited>
| Path: C:\var\lib\samba\printers
| Anonymous access: READ/WRITE
| \\10.6.6.23\workfiles:
| Type: STYPE_DISKTREE
| Comment: Confidential Workfiles
| Users: 0
| Max Users: <unlimited>
| Path: C:\var\spool\samba
|_ Anonymous access: READ/WRITE
Nmap done: 1 IP address (1 host up) scanned in 7.39 seconds
13行目以降からIPC$,print$,workfilesという3つの共有フォルダが確認できます。
実践演習②Scapyによるスニッフィング及びPacket作成
Scapyの基本的な使い方を理解します。
1.Scapyの起動
- Scapyを起動し対話モードに移行したことを確認します。
┌──(kali㉿Kali)-[~]
└─$ sudo su
[sudo] password for kali:
┌──(root㉿Kali)-[/home/kali]
└─# scapy
INFO: Can't import PyX. Won't be able to use psdump() or pdfdump().
aSPY//YASa
apyyyyCY//////////YCa |
sY//////YSpcs scpCY//Pp | Welcome to Scapy
ayp ayyyyyyySCP//Pp syY//C | Version 2.5.0
AYAsAYYYYYYYY///Ps cY//S |
pCCCCY//p cSSps y//Y | https://github.com/secdev/scapy
SPPPP///a pP///AC//Y |
A//A cyP////C | Have fun!
p///Ac sC///a |
P////YCpc A//A | Craft packets like I craft my beer.
scccccp///pSP///p p//Y | -- Jean De Clerck
sY/////////y caa S//P |
cayCyayP//Ya pY/Ya
sY/PsY////YCc aC//Yp
sc sccaCY//PCypaapyCP//YSs
spCPY//////YPSps
ccaacs
using IPython 8.14.0
>>>
2.利用可能なプロトコル一覧
- ls()関数を用いると利用できるプロトコルや指定したプロトコルのナビゲートをしてくれます。
TIP: You may use explore() to navigate through all layers using a clear GUI
>>> ls(IP)
version : BitField (4 bits) = ('4')
ihl : BitField (4 bits) = ('None')
tos : XByteField = ('0')
len : ShortField = ('None')
id : ShortField = ('1')
flags : FlagsField = ('<Flag 0 ()>')
frag : BitField (13 bits) = ('0')
ttl : ByteField = ('64')
proto : ByteEnumField = ('0')
chksum : XShortField = ('None')
src : SourceIPField = ('None')
dst : DestIPField = ('None')
options : PacketListField = ('[]')
>>>
3.スニッフィング
実際にスニッフィングする方法を確認していきます。
- sniff()でスニッフィングを開始し、途中で強制終了させます。その間に通ったトラフィックを収集します。
- pythonベースのため一度変数aへ直前に実行された関数を「_(アンダースコア)」で呼び出しその結果をsummary関数を介して表示します。。
>>> sniff()
^C<Sniffed: TCP:0 UDP:17 ICMP:10 Other:7>
>>> a=_
>>> a.summary()
Ether / IPv6 / ICMPv6ND_RA / ICMPv6NDOptSrcLLAddr / ICMPv6 Neighbor Discovery Option - Prefix Information fd00::/64 On-link 1 Autonomous Address 1 Router Address 0
Ether / fe80::a00:27ff:fe4a:f36e > ff02::16 (0) / IPv6ExtHdrHopByHop / ICMPv6MLReport2
Ether / fe80::a00:27ff:fe4a:f36e > ff02::16 (0) / IPv6ExtHdrHopByHop / ICMPv6MLReport2
Ether / IP / UDP / DNS Qry "b'www.cisco.com.'"
Ether / IP / UDP / DNS Ans "b'www.cisco.com.akadns.net.'"
Ether / IP / UDP / DNS Qry "b'www.cisco.com.'"
Ether / IP / UDP / DNS Ans "b'www.cisco.com.akadns.net.'"
Ether / IP / ICMP 10.0.2.15 > 184.28.244.116 echo-request 0 / Raw
Ether / IP / ICMP 184.28.244.116 > 10.0.2.15 echo-reply 0 / Raw
Ether / IP / UDP / DNS Qry "b'116.244.28.184.in-addr.arpa.'"
Ether / IP / UDP / DNS Ans "b'a184-28-244-116.deploy.static.akamaitechnologies.com.'"
Ether / ARP who has 10.0.2.3 says 10.0.2.15
Ether / ARP is at 52:55:0a:00:02:03 says 10.0.2.3 / Padding
>>>
ここではwww.cisco.comにpingを打っている最中にスニッフィングをしていますが、その様子が12行目あたりで確認できます。
インターフェース指定:
- 当然のことですが、特定のインターフェースを指定してスニッフィング可能です。
>>> sniff(iface="br-internal")
^C<Sniffed: TCP:93 UDP:0 ICMP:0 Other:0>
>>> a=_
>>> a.summary
<bound method _PacketList.summary of <Sniffed: TCP:93 UDP:0 ICMP:0 Other:0>>
>>> a.summary()
Ether / IP / TCP 10.6.6.1:56584 > 10.6.6.23:http S
Ether / IP / TCP 10.6.6.23:http > 10.6.6.1:56584 SA
Ether / IP / TCP 10.6.6.1:56584 > 10.6.6.23:http A
Ether / IP / TCP 10.6.6.1:56584 > 10.6.6.23:http PA / Raw
Ether / IP / TCP 10.6.6.23:http > 10.6.6.1:56584 A
Ether / IP / TCP 10.6.6.23:http > 10.6.6.1:56584 PA / Raw
Ether / IP / TCP 10.6.6.1:56584 > 10.6.6.23:http A
Ether / IP / TCP 10.6.6.23:http > 10.6.6.1:56584 PA / Raw
Ether / IP / TCP 10.6.6.1:56584 > 10.6.6.23:http A
Ether / IP / TCP 10.6.6.23:http > 10.6.6.1:56584 PA / Raw
Ether / IP / TCP 10.6.6.1:56584 > 10.6.6.23:http A
Ether / IP / TCP 10.6.6.1:56584 > 10.6.6.23:http PA / Raw
Ether / IP / TCP 10.6.6.23:http > 10.6.6.1:56584 PA / Raw
Ether / IP / TCP 10.6.6.1:56584 > 10.6.6.23:http A
Ether / IP / TCP 10.6.6.1:56594 > 10.6.6.23:http S
br-internalからローカルサーバーに対してhttpで接続していますがその様子が見て取れます。
ICMPのみスニッフィング:
- フィルタリング機能を利用してICMP10回上限としてスニッフィングします。
- また、nsummary()関数を用いて番号を付与し、指定したパケットを呼び出します。
>>> sniff(iface="br-internal", filter="icmp", count=10)
<Sniffed: TCP:0 UDP:0 ICMP:10 Other:0>
>>> a=_
>>> a.nsummary()
0000 Ether / IP / ICMP 10.6.6.1 > 10.6.6.23 echo-request 0 / Raw
0001 Ether / IP / ICMP 10.6.6.23 > 10.6.6.1 echo-reply 0 / Raw
0002 Ether / IP / ICMP 10.6.6.1 > 10.6.6.23 echo-request 0 / Raw
0003 Ether / IP / ICMP 10.6.6.23 > 10.6.6.1 echo-reply 0 / Raw
0004 Ether / IP / ICMP 10.6.6.1 > 10.6.6.23 echo-request 0 / Raw
0005 Ether / IP / ICMP 10.6.6.23 > 10.6.6.1 echo-reply 0 / Raw
0006 Ether / IP / ICMP 10.6.6.1 > 10.6.6.23 echo-request 0 / Raw
0007 Ether / IP / ICMP 10.6.6.23 > 10.6.6.1 echo-reply 0 / Raw
0008 Ether / IP / ICMP 10.6.6.1 > 10.6.6.23 echo-request 0 / Raw
0009 Ether / IP / ICMP 10.6.6.23 > 10.6.6.1 echo-reply 0 / Raw
>>> a[2]
<Ether dst=02:42:0a:06:06:17 src=02:42:0d:45:51:6b type=IPv4 |<IP version=4 ihl=5 tos=0x0 len=84 id=10634 flags=DF frag=0 ttl=64 proto=icmp chksum=0xf0fb src=10.6.6.1 dst=10.6.6.23 |<ICMP type=echo-request code=0 chksum=0x1217 id=0xc2e9 seq=0x2 unused='' |<Raw load='\\xab\x1d\\xc8h\x00\x00\x00\x00\\xe9\\xa3\x07\x00\x00\x00\x00\x00\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./01234567' |>>>>
>>>
ここではbr-internalからローカルサーバーへpingし続けてますが、10個のみスニッフィングされておりトラフィックの中身まで見えていることがわかります。
4.pcap 保存
- wrpacap関数で結果を保存しwiresharkなどで表示可能です。
>>> wrpcap("capture1.pcap",a)

ここでは先ほどのping10回スニッフィングした結果をpcapファイルに保存した結果を表示してます。
5.ICMP 生成
- scapyを二つのターミナルで起動し、片方でスニッフィング、他方でパケット生成可能です。
###Terminal A.
>>> sniff(iface="br-internal")
^C<Sniffed: TCP:0 UDP:0 ICMP:2 Other:4>
>>> a=_
>>> a.nsummary()
0000 Ether / ARP who has 10.6.6.23 says 10.6.6.1
0001 Ether / ARP is at 02:42:0a:06:06:17 says 10.6.6.23
0002 Ether / IP / ICMP 10.6.6.1 > 10.6.6.23 echo-request 0 / Raw
0003 Ether / IP / ICMP 10.6.6.23 > 10.6.6.1 echo-reply 0 / Raw
0004 Ether / ARP who has 10.6.6.1 says 10.6.6.23
0005 Ether / ARP is at 02:42:0d:45:51:6b says 10.6.6.1
>>> a[2]
<Ether dst=02:42:0a:06:06:17 src=02:42:0d:45:51:6b type=IPv4 |<IP version=4 ihl=5 tos=0x0 len=41 id=1 flags= frag=0 ttl=64 proto=icmp chksum=0x5ab0 src=10.6.6.1 dst=10.6.6.23 |<ICMP type=echo-request code=0 chksum=0x90c0 id=0x0 seq=0x0 unused='' |<Raw load='This is test.' |>>>>
>>>
###Terminal B.
>>> send(IP(dst="10.6.6.23")/ICMP()/"This is test.")
.
Sent 1 packets.
>>>
Linux上で実行するICMPとほぼ同等ですが、ここではThis is test.という文字列を送っておりTerminal Aの14行目のRaw loadの中身がThis is test.となっていることがわかります。
6.TCP SYN 生成
- TCP SYNをポート445で送付した際のサーバーからのSYN/ACKがa[3]から確認できます。
### Teminal A.
>>> sniff(iface="br-internal")
^C<Sniffed: TCP:3 UDP:0 ICMP:0 Other:2>
>>> a=_
>>> a.nsummary()
0000 Ether / ARP who has 10.6.6.23 says 10.6.6.1
0001 Ether / ARP is at 02:42:0a:06:06:17 says 10.6.6.23
0002 Ether / IP / TCP 10.6.6.1:ftp_data > 10.6.6.23:microsoft_ds S
0003 Ether / IP / TCP 10.6.6.23:microsoft_ds > 10.6.6.1:ftp_data SA
0004 Ether / IP / TCP 10.6.6.1:ftp_data > 10.6.6.23:microsoft_ds R
>>> a[2]
<Ether dst=02:42:0a:06:06:17 src=02:42:0d:45:51:6b type=IPv4 |<IP version=4 ihl=5 tos=0x0 len=40 id=1 flags= frag=0 ttl=64 proto=tcp chksum=0x5aac src=10.6.6.1 dst=10.6.6.23 |<TCP sport=ftp_data dport=microsoft_ds seq=0 ack=0 dataofs=5 reserved=0 flags=S window=8192 chksum=0x6dee urgptr=0 |>>>
>>> a[3]
<Ether dst=02:42:0d:45:51:6b src=02:42:0a:06:06:17 type=IPv4 |<IP version=4 ihl=5 tos=0x0 len=44 id=0 flags=DF frag=0 ttl=64 proto=tcp chksum=0x1aa9 src=10.6.6.23 dst=10.6.6.1 |<TCP sport=microsoft_ds dport=ftp_data seq=257883859 ack=1 dataofs=6 reserved=0 flags=SA window=64240 chksum=0x2042 urgptr=0 options=[('MSS', 1460)] |>>>
>>>
### Teminal B.
>>> send(IP(dst="10.6.6.23")/TCP(dport=445, flags="S"))
.
Sent 1 packets.
>>>
⇒一つ手前の任意のICMP pingと合わせて様々なトラフィックを作成して偵察が可能なことがわかります。
実践演習:Wireshark によるスニッフィング
Wiresharkはtsharkやtcpdumpといったツールと並んでパケット解析に利用されるアプリやツールですが、ここではWiresharkを中心にスニッフィングでの使われ方を学びます。
● 前準備
- 現在のディレクトリをはじめ、NIC / MAC / GW / DNS の確認です。
┌──(kali㉿Kali)-[~]
└─$ pwd
/home/kali
┌──(kali㉿Kali)-[~]
└─$ ifconfig
br-internal: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.6.6.1 netmask 255.255.255.0 broadcast 10.6.6.255
inet6 fe80::42:dff:fe45:516b prefixlen 64 scopeid 0x20<link>
ether 02:42:0d:45:51:6b txqueuelen 0 (Ethernet)
RX packets 13342 bytes 2334531 (2.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13738 bytes 1377181 (1.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:9eff:febc:6bea prefixlen 64 scopeid 0x20<link>
ether 02:42:9e:bc:6b:ea txqueuelen 0 (Ethernet)
RX packets 376 bytes 68151 (66.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 125 bytes 9095 (8.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
inet6 fd00::5218:d382:a626:3654 prefixlen 64 scopeid 0x0<global>
inet6 fe80::a00:27ff:fe4a:f36e prefixlen 64 scopeid 0x20<link>
inet6 fd00::a00:27ff:fe4a:f36e prefixlen 64 scopeid 0x0<global>
ether 08:00:27:4a:f3:6e txqueuelen 1000 (Ethernet)
RX packets 87770 bytes 84171256 (80.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 40914 bytes 6137308 (5.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 4439 bytes 9008361 (8.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4439 bytes 9008361 (8.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
┌──(kali㉿Kali)-[~]
└─$ ip route
default via 10.0.2.2 dev eth0 proto dhcp src 10.0.2.15 metric 100
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 metric 100
10.6.6.0/24 dev br-internal proto kernel scope link src 10.6.6.1
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
┌──(kali㉿Kali)-[~]
└─$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.2.3
● パケットキャプチャ
- tcpdumpを利用してパケットをキャプチャします。
- 今回はgoogle.comやnetacad.comにアクセスしてその振る舞いを確認します。
┌──(kali㉿Kali)-[~]
└─$ sudo tcpdump -i eth0 -s 0 -w packetdump.pcap
[sudo] password for kali:
tcpdump: listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
^C6212 packets captured
6212 packets received by filter
0 packets dropped by kernel
● DNS 解析
-
netacad.comのパケットに注目すると、L2レイヤではVMのMACアドレスからデフォゲのMACアドレスに飛んでいることが確認できます。

-
同パケットのDNSクエリに注目すると、返答のパケットや具体的なIPアドレスが確認できます。

クエリの中身からキャッシュポイズニングが発生していることがわかる場合もあります。
● HTTP解析
- ここでは先ほどのtcpdumpではなく、Wiresharkから直接パケットキャプチャします。
- br-internal(10.6.6.1)のIFを指定し、DWDAのサイト(10.6.6.13)にHTTPで接続した際の挙動を確認します。


username/password が平文で中身が見えることが2枚目の画像からわかります。
⇒盗聴されればそのまま悪用されます。
- 302 Foundに該当するパケットを探すとSet-Cookieの中身が見え、GETのリクエストとレスポンスで同一であることが確認できます。


→ 乗っ取られるとセッションハイジャックにつながることがあります。
🧾 本記事のまとめ
能動的偵察(Active Recon)について、
その概要と共に以下の3点について実践を通じながら理解を深めた。
① 各種列挙(Enumeration)方法の実践
Nmap と各種 NSE スクリプトを用いて、以下を取得するプロセスの体得
- 稼働中サービスの抽出
- SMB のユーザー/共有/セキュリティ設定の可視化
- バージョン情報のフィンガープリンティング
② Scapyの実践
Scapy を活用して、以下の初歩的な使い方を把握
- ICMP/TCP の手動生成
- sniff によるトラフィック捕捉
- sr1 を利用したレスポンス解析
③ Wireshark による実トラフィック分析
Wireshark/tcpdump を活用し、以下の実トラフィック分析の手法を理解
- DNS 解析
- HTTP/HTTPS のセッション動作
- Cookie/認証トークンの挙動
📍次回予告
→ 「脆弱性スキャン」、「スキャン結果の分析」についてまとめる予定です。(3章は次回で完了を予定してます。)
次の記事はこちら

