คลัง
playbooks

Nmap Playbook

Nmap (Network Mapper) คือเครื่องมือสแกนเครือข่ายมาตรฐานที่ใช้ค้นหา host ที่ออนไลน์ พอร์ตที่เปิด บริการ+เวอร์ชันที่รัน และเดา OS เป็นจุดเริ่มต้นเกือบทุกครั้งของ pentest/HTB/OSCP เพราะผลของ Nmap กำหนดทิศทางการโจมตีทั้งหมดต่อจากนั้น บทนี้ไล่ตั้งแต่หลักการส่ง packet, กลยุทธ์ 2-ชั้น (fast → deep), NSE, ไปจนถึงการหลบ firewall/IDS

BeginnerIntermediateAdvanced#nmap#scanning#port-scan#recon#enumeration#nse#service-detection#firewall-evasion

1. Nmap ทำงานอย่างไร + กลยุทธ์ 2 ชั้น

Nmap ส่ง packet ไปยังเป้าหมายแล้ววิเคราะห์สิ่งที่ตอบกลับ พอร์ตหนึ่งจะถูกจัดเป็น open / closed / filtered ตามชนิดของ response เช่น SYN scan (-sS) ส่ง SYN → ถ้าได้ SYN/ACK = open, ได้ RST = closed, เงียบหาย = filtered (มี firewall) จุดสำคัญคือ อย่าสแกนแบบเดียวจบ — ให้ทำ 2 ชั้นเสมอ: ชั้นแรกหาพอร์ตเปิดทั้งหมดเร็วๆ แล้วชั้นสอง deep เฉพาะพอร์ตที่เปิดจริง

สถานะพอร์ตความหมายแปลว่า
openมีบริการรับ connection อยู่เป้าหมายหลักในการ enum ต่อ
closedhost ตอบ RST — ไม่มีบริการที่พอร์ตนั้นhost ออนไลน์แต่พอร์ตปิด
filteredไม่มี response / ICMP unreachableมี firewall คั่น — ลอง evasion
open|filteredแยกไม่ออก (พบบ่อยใน UDP)ต้อง probe เพิ่มด้วย -sV / NSE
กลยุทธ์สแกน 2 ชั้น
ชั้น 1: FAST nmap -p- --min-rate หาพอร์ตเปิดทั้ง 65535 ชั้น 2: DEEP nmap -sCV -p<open> service + version + NSE เลือกเส้นทาง web / SMB / AD nmap -p- --min-rate=1000 -T4 10.10.10.5 -oA fast # ชั้น 1 nmap -sCV -p22,80,445 10.10.10.5 -oA deep # ชั้น 2 (เอาพอร์ตจากชั้น 1) // เคล็ด: ดึงพอร์ตอัตโนมัติ ports=$(nmap -p- --min-rate=1000 -T4 IP | grep ^[0-9] | cut -d/ -f1 | paste -sd,)
one-liner ดึงพอร์ตจากชั้น 1 มา deep ต่อทันที: ports=$(nmap -p- --min-rate=1000 -T4 $IP | grep '^[0-9]' | cut -d/ -f1 | paste -sd,) && nmap -sCV -p$ports $IP -oA deep

2. ชนิดการสแกน (เลือกให้ถูกงาน)

ธงชนิดต้อง root?ใช้เมื่อ
-sSSYN / half-openใช่ค่าเริ่มต้นเมื่อมีสิทธิ์ root — เร็ว เงียบ
-sTTCP connect (full handshake)ไม่ไม่มี root หรือสแกนผ่าน proxychains
-sUUDPใช่หา DNS/SNMP/TFTP/NTP (53,161,69,123)
-snping sweep (ไม่สแกนพอร์ต)ไม่map host ที่ออนไลน์ทั้ง subnet
-sAACK scanใช่แยกว่า firewall เป็น stateful หรือไม่
-Pnข้าม host discoveryไม่host บล็อก ping แต่เรารู้ว่ามันมีชีวิต
Host discovery — เริ่มจากภาพรวมทั้งวง
# หา host ออนไลน์ทั้ง subnet (เร็ว ไม่แตะพอร์ต)
nmap -sn 10.10.10.0/24 -oA hosts

# ถ้า host บล็อก ICMP ping → บังคับสแกนด้วย -Pn
nmap -Pn -p- --min-rate=1000 10.10.10.5
internal pentest เริ่มด้วย -sn เสมอเพื่อวาดแผนที่เครือข่ายก่อนเจาะลึกทีละเครื่อง
UDP ช้ามาก เพราะพอร์ตปิดต้องรอ ICMP timeout — อย่าสแกน -sU -p- ทั้งหมด ให้ใช้ --top-ports 20 หรือระบุพอร์ตที่สำคัญเท่านั้น

3. Service/Version detection + NSE

-sV ดึง banner + probe เพื่อระบุเวอร์ชันบริการ (สำคัญที่สุดสำหรับหา known CVE) ส่วน -sC รัน default NSE scripts, -O เดา OS — รวมเป็น -A (aggressive) NSE (Nmap Scripting Engine) คือชุด script Lua ที่แบ่งตามหมวด (auth, vuln, smb-*, http-*) เก็บที่ /usr/share/nmap/scripts/

Deep scan มาตรฐาน
# -sC default scripts, -sV version, -O os, รวมเป็น -A
nmap -sCV -p22,80,445 10.10.10.5 -oA deep

# ค้นหา NSE script ตามชื่อ
ls /usr/share/nmap/scripts/ | grep smb
nmap --script-help smb-enum-shares
บริการที่เจอNSE ที่ควรรันทำต่อ
445/139 SMBsmb-enum-shares, smb-os-discovery, smb-vuln-*enum share, EternalBlue
80/443 HTTPhttp-enum, http-title, http-headers, http-methods→ directory enumeration
21 FTPftp-anon, ftp-systลอง anonymous login
88/389 Kerberos/LDAPkrb5-enum-users, ldap-search→ Active Directory (BloodHound)
161 SNMPsnmp-info, snmp-brutesnmpwalk community string
25 SMTPsmtp-enum-users, smtp-commandsuser enumeration (VRFY)
NSE ตามบริการ
# SMB enumeration
nmap -p445 --script smb-enum-shares,smb-os-discovery,smb-vuln-ms17-010 10.10.10.5

# HTTP enumeration
nmap -p80,443 --script http-enum,http-title,http-headers 10.10.10.5

# หมวด vuln (ใช้กับ scope ที่ได้รับอนุญาตเท่านั้น)
nmap --script vuln 10.10.10.5
smb-vuln-ms17-010 = ตรวจ EternalBlue; ใช้เฉพาะระบบที่ได้รับอนุญาต

4. Timing, ประสิทธิภาพ & Firewall/IDS evasion

ธงผล
-T0..-T5template ความเร็ว (0 ช้า/ลอบ, 5 เร็ว/ดัง) — จริงมักใช้ -T4
--min-rate 1000บังคับส่งอย่างน้อย 1000 packet/วิ (เร่ง -p-)
--max-retries 1ลดการส่งซ้ำ — เร็วขึ้นบนเครือข่ายเสถียร
-f / --mtuแตก packet เป็นชิ้นเล็ก หลบ IDS แบบเก่า
-D RND:10decoy — ปลอม source เพิ่ม 10 ตัวปนของจริง
--source-port 53ปลอม source port เป็น 53 (บาง firewall ยอมให้ DNS ผ่าน)
-sS -Pn -nลด noise: half-open, ข้าม ping, ไม่ resolve DNS
หลบ firewall (ใช้กับ scope ที่ได้รับอนุญาต)
# fragment + decoy + source port ปลอม
sudo nmap -sS -f -D RND:10 --source-port 53 -Pn 10.10.10.5

# ช้าและลอบ (หลบ rate-based IDS)
sudo nmap -sS -T2 --max-retries 1 --scan-delay 1s 10.10.10.5
-n = ไม่ resolve DNS (เร็วขึ้น + ไม่รั่ว query ออก resolver)
สำหรับสแกนใหญ่มากๆ นิยมใช้ rustscan หรือ masscan หาพอร์ตเปิดเร็วก่อน แล้วส่งต่อให้ Nmap ทำ -sCV: rustscan -a 10.10.10.5 -- -sCV

5. เจอเป้าหมายใหม่ — ไล่ตามนี้

Nmap decision flow
host ตอบ ping ไหม?
nmap -sn <target>
เงียบใช้ -Pn บังคับสแกน
ตอบไปสแกนพอร์ตต่อ
ชั้น 1: หาพอร์ตเปิดทั้งหมด
nmap -p- --min-rate=1000 -T4 -oA fast
ชั้น 2: deep เฉพาะพอร์ตเปิด
nmap -sCV -p<ports> -oA deep
เจอบริการอะไร?
80/443→ directory/param enumeration
445/139→ SMB enum + vuln
88/389/636→ Active Directory (BloodHound)
เวอร์ชันเก่า→ ค้น CVE (searchsploit)
บันทึกผลด้วย -oA แล้วเลือกเส้นทางโจมตี

ตัวอย่าง CTF: หลายโจทย์ซ่อน service สำคัญไว้พอร์ตแปลก (เช่น 31337, 8888) ถ้าไม่ทำ -p- จะพลาดและตันตั้งแต่ต้น — เจอ box ที่ -sCV ปกติเห็นแค่ 22/80 แต่ -p- เผยพอร์ต 50000 ที่รัน service ช่องโหว่อยู่

6. Output, ข้อผิดพลาดที่พบบ่อย & Cheatsheet

ธง outputไฟล์ใช้ทำอะไร
-oN.nmapอ่านคนปกติ
-oG.gnmapgrep ง่าย (แยกพอร์ต/host)
-oX.xmlimport เข้า Metasploit / แปลงเป็น HTML
-oAทั้ง 3 แบบใช้เสมอ — ครบในคำสั่งเดียว
  • ข้ามขั้น -p- → พลาดพอร์ตสูงๆ ที่ซ่อน service สำคัญ (ผิดพลาดอันดับ 1)
  • ลืม sudo กับ -sS/-sU/-O → Nmap เงียบๆ fallback ไป -sT ที่ช้าและดังกว่า
  • ตั้ง -T5 บนเครือข่ายจริง → packet หล่น ผลคลาดเคลื่อน (พอร์ตเปิดโชว์เป็น filtered)
  • ไม่บันทึกผล (-oA) → ต้องสแกนซ้ำเสียเวลา และไม่มีหลักฐานทำ report
  • เชื่อผลชั้นเดียว → เห็น filtered แล้วยอมแพ้ ทั้งที่ควรลอง -Pn / evasion
Cheatsheet — คัดลอกไปใช้ได้เลย
# 1) ping sweep ทั้งวง
nmap -sn 10.10.10.0/24 -oA hosts

# 2) fast all-port
nmap -p- --min-rate=1000 -T4 10.10.10.5 -oA fast

# 3) deep เฉพาะพอร์ตเปิด
nmap -sCV -p22,80,445 10.10.10.5 -oA deep

# 4) UDP top 20
sudo nmap -sU --top-ports 20 10.10.10.5 -oA udp

# 5) NSE vuln
nmap --script vuln 10.10.10.5 -oA vuln

# เดา OS จาก TTL: 64≈Linux  128≈Windows  255≈network device
ใช้ Nmap เฉพาะกับระบบที่คุณเป็นเจ้าของหรือได้รับอนุญาตเป็นลายลักษณ์อักษร การสแกนพอร์ตระบบผู้อื่นโดยไม่ได้รับอนุญาตผิดกฎหมายในหลายประเทศ

🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ

สมมติเพิ่งเจอ IP เป้าหมายในโจทย์ (เช่น HTB/THM) มีแค่ Kali เปล่าๆ ยังไม่รู้ว่าเครื่องนี้เปิดอะไรไว้บ้าง ทำตามนี้ทีละขั้นจนได้ attack surface ที่ชัดเจน

  1. 1เช็คว่ามี nmap ไหม: พิมพ์ `which nmap` — ปกติ Kali มีติดมาให้แล้ว ถ้าไม่มีให้ `sudo apt update && sudo apt install nmap -y`
  2. 2ยิง ping ดูก่อนว่าเครื่องมีชีวิตไหม: `ping -c 2 ` — ถ้าไม่ตอบก็ยังสแกนต่อได้ (บาง box บล็อก ICMP)
  3. 3สแกนพอร์ตทั้งหมดแบบเร็ว (ชั้น 1): `nmap -p- --min-rate=1000 -T4 -oA fast` แล้วรอ — ผลที่ควรเห็นคือ list พอร์ต state open
  4. 4ถ้าไม่เห็นพอร์ตเปิดเลย ให้เติม -Pn บังคับสแกนโดยไม่พึ่ง ping: `nmap -Pn -p- --min-rate=1000 -T4 `
  5. 5หยิบเลขพอร์ตที่ขึ้น open มาทำชั้น 2 (deep): `nmap -sCV -p22,80,445 -oA deep` (ใส่เลขพอร์ตจริงที่เจอ)
  6. 6อ่านผลชั้น 2 — ดูช่อง VERSION ของแต่ละบรรทัด นี่คือสิ่งที่บอกว่าต้องทำอะไรต่อ
  7. 7เจอ 80/443 → เปิดเบราว์เซอร์ดูหน้าเว็บก่อน แล้วไปทำ Directory Enumeration / FFUF Playbook ต่อ
  8. 8เจอ 445 → ลอง `smbclient -L /// -N` และ `enum4linux -a ` ดู share ที่เปิด
  9. 9เจอ 88/389/636 → นี่คือ Active Directory ไปที่ BloodHound Playbook เพื่อเก็บข้อมูลกราฟทั้งโดเมน
  10. 10บันทึกผลไว้เสมอด้วย -oA กันต้องสแกนซ้ำ แล้วเลือกเส้นทางที่เจอไปทำต่อ
จับมือทำ Nmap ตั้งแต่ศูนย์
เช็ค nmap พร้อมใช้ไหม
which nmap
✅ มีอยู่แล้ว (Kali default)→ ไปสแกนต่อได้เลย
❌ ไม่มี/error command not found→ sudo apt install nmap -y แล้วลองใหม่
host discovery
nmap -sn <IP>
host ตอบ ping ไหม
✅ ตอบ→ ไปสแกนพอร์ตปกติ
❌ เงียบ/timeout→ ใช้ -Pn บังคับสแกน
ชั้น 1: หาพอร์ตเปิดทั้งหมด
nmap -p- --min-rate=1000 -T4 <IP> -oA fast
เจอพอร์ตเปิดไหม
✅ เจอ→ ไป deep scan เฉพาะพอร์ตนั้น
❌ ไม่เจอเลย/ค้าง→ ลด --min-rate ลอง -Pn -sS เช็ค VPN/scope ผิด
ชั้น 2: deep scan + NSE
nmap -sCV -p<ports> <IP> -oA deep
เจอ service อะไรเด่น?
✅ 80/443 HTTP→ ทำ web enum ต่อ
✅ 445/139 SMB→ smbclient/enum4linux
✅ 88/389/636 AD→ เก็บข้อมูล Active Directory
❌ เห็นแค่ 22 หรือทุกอย่าง filtered→ ลอง firewall evasion (-f -D RND:10)
ได้ attack surface ชัดเจน → เลือกเส้นทางที่เจอไปทำต่อ
ขั้นตอน/งานเครื่องมือใน Kaliติดตั้งเพิ่ม (ถ้าไม่มี)เครื่องมือออนไลน์
หา host ที่ออนไลน์ในวงnmap -sn--
สแกนพอร์ตเร็วทั้งหมดnmap -p- --min-rate--
สแกนไวขึ้นบน host จำนวนมาก-sudo apt install rustscan masscan-
สแกนลึก + NSE scriptnmap -sCV --script--
ดู CVE จาก version ที่เจอsearchsploit-cve.mitre.org, vulners.com
ส่อง SMB sharesmbclient, enum4linux--
ดูข้อมูล host แบบไม่ต้องสแกนเอง--shodan.io, censys.io
ต่อยอดเจอเว็บffuf, gobuster--
ต่อยอดเจอ AD-bloodhound-python, sharphoundbloodhound-project docs
🚑 ถ้าตันสนิท ลองท่าถัดไป: (1) เห็นแค่ 80/443 ไม่มีอะไรพิเศษ → ไป FFUF Playbook หรือ Directory Enumeration ขุดหา path ที่ซ่อน (2) เจอ Kerberos/LDAP แต่ยังไม่มี credential → ไป BloodHound Playbook เก็บกราฟทั้งโดเมนก่อน (3) พอร์ตทั้งหมด filtered แม้ -Pn → เช็คว่า VPN/scope ถูกต้องหรือมี firewall จริงๆ ที่ต้องหลบ (4) เจอ binary service แปลกๆ → โหลดมาวิเคราะห์ที่ Ghidra Playbook

โน้ตของฉัน

ยังไม่มีโน้ตสำหรับหัวข้อนี้