Nmap Playbook
Nmap (Network Mapper) คือเครื่องมือสแกนเครือข่ายมาตรฐานที่ใช้ค้นหา host ที่ออนไลน์ พอร์ตที่เปิด บริการ+เวอร์ชันที่รัน และเดา OS เป็นจุดเริ่มต้นเกือบทุกครั้งของ pentest/HTB/OSCP เพราะผลของ Nmap กำหนดทิศทางการโจมตีทั้งหมดต่อจากนั้น บทนี้ไล่ตั้งแต่หลักการส่ง packet, กลยุทธ์ 2-ชั้น (fast → deep), NSE, ไปจนถึงการหลบ firewall/IDS
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 ต่อ |
| closed | host ตอบ RST — ไม่มีบริการที่พอร์ตนั้น | host ออนไลน์แต่พอร์ตปิด |
| filtered | ไม่มี response / ICMP unreachable | มี firewall คั่น — ลอง evasion |
| open|filtered | แยกไม่ออก (พบบ่อยใน UDP) | ต้อง probe เพิ่มด้วย -sV / NSE |
ports=$(nmap -p- --min-rate=1000 -T4 $IP | grep '^[0-9]' | cut -d/ -f1 | paste -sd,) && nmap -sCV -p$ports $IP -oA deep2. ชนิดการสแกน (เลือกให้ถูกงาน)
| ธง | ชนิด | ต้อง root? | ใช้เมื่อ |
|---|---|---|---|
| -sS | SYN / half-open | ใช่ | ค่าเริ่มต้นเมื่อมีสิทธิ์ root — เร็ว เงียบ |
| -sT | TCP connect (full handshake) | ไม่ | ไม่มี root หรือสแกนผ่าน proxychains |
| -sU | UDP | ใช่ | หา DNS/SNMP/TFTP/NTP (53,161,69,123) |
| -sn | ping sweep (ไม่สแกนพอร์ต) | ไม่ | map host ที่ออนไลน์ทั้ง subnet |
| -sA | ACK scan | ใช่ | แยกว่า firewall เป็น stateful หรือไม่ |
| -Pn | ข้าม host discovery | ไม่ | host บล็อก ping แต่เรารู้ว่ามันมีชีวิต |
# หา 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-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/
# -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 SMB | smb-enum-shares, smb-os-discovery, smb-vuln-* | enum share, EternalBlue |
| 80/443 HTTP | http-enum, http-title, http-headers, http-methods | → directory enumeration |
| 21 FTP | ftp-anon, ftp-syst | ลอง anonymous login |
| 88/389 Kerberos/LDAP | krb5-enum-users, ldap-search | → Active Directory (BloodHound) |
| 161 SNMP | snmp-info, snmp-brute | snmpwalk community string |
| 25 SMTP | smtp-enum-users, smtp-commands | user enumeration (VRFY) |
# 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.54. Timing, ประสิทธิภาพ & Firewall/IDS evasion
| ธง | ผล |
|---|---|
| -T0..-T5 | template ความเร็ว (0 ช้า/ลอบ, 5 เร็ว/ดัง) — จริงมักใช้ -T4 |
| --min-rate 1000 | บังคับส่งอย่างน้อย 1000 packet/วิ (เร่ง -p-) |
| --max-retries 1 | ลดการส่งซ้ำ — เร็วขึ้นบนเครือข่ายเสถียร |
| -f / --mtu | แตก packet เป็นชิ้นเล็ก หลบ IDS แบบเก่า |
| -D RND:10 | decoy — ปลอม source เพิ่ม 10 ตัวปนของจริง |
| --source-port 53 | ปลอม source port เป็น 53 (บาง firewall ยอมให้ DNS ผ่าน) |
| -sS -Pn -n | ลด noise: half-open, ข้าม ping, ไม่ resolve DNS |
# 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-sCV: rustscan -a 10.10.10.5 -- -sCV5. เจอเป้าหมายใหม่ — ไล่ตามนี้
ตัวอย่าง CTF: หลายโจทย์ซ่อน service สำคัญไว้พอร์ตแปลก (เช่น 31337, 8888) ถ้าไม่ทำ -p- จะพลาดและตันตั้งแต่ต้น — เจอ box ที่ -sCV ปกติเห็นแค่ 22/80 แต่ -p- เผยพอร์ต 50000 ที่รัน service ช่องโหว่อยู่
6. Output, ข้อผิดพลาดที่พบบ่อย & Cheatsheet
| ธง output | ไฟล์ | ใช้ทำอะไร |
|---|---|---|
| -oN | .nmap | อ่านคนปกติ |
| -oG | .gnmap | grep ง่าย (แยกพอร์ต/host) |
| -oX | .xml | import เข้า Metasploit / แปลงเป็น HTML |
| -oA | ทั้ง 3 แบบ | ใช้เสมอ — ครบในคำสั่งเดียว |
- ข้ามขั้น -p- → พลาดพอร์ตสูงๆ ที่ซ่อน service สำคัญ (ผิดพลาดอันดับ 1)
- ลืม sudo กับ -sS/-sU/-O → Nmap เงียบๆ fallback ไป -sT ที่ช้าและดังกว่า
- ตั้ง -T5 บนเครือข่ายจริง → packet หล่น ผลคลาดเคลื่อน (พอร์ตเปิดโชว์เป็น filtered)
- ไม่บันทึกผล (-oA) → ต้องสแกนซ้ำเสียเวลา และไม่มีหลักฐานทำ report
- เชื่อผลชั้นเดียว → เห็น filtered แล้วยอมแพ้ ทั้งที่ควรลอง -Pn / evasion
# 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🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ
สมมติเพิ่งเจอ IP เป้าหมายในโจทย์ (เช่น HTB/THM) มีแค่ Kali เปล่าๆ ยังไม่รู้ว่าเครื่องนี้เปิดอะไรไว้บ้าง ทำตามนี้ทีละขั้นจนได้ attack surface ที่ชัดเจน
- 1เช็คว่ามี nmap ไหม: พิมพ์ `which nmap` — ปกติ Kali มีติดมาให้แล้ว ถ้าไม่มีให้ `sudo apt update && sudo apt install nmap -y`
- 2ยิง ping ดูก่อนว่าเครื่องมีชีวิตไหม: `ping -c 2
` — ถ้าไม่ตอบก็ยังสแกนต่อได้ (บาง box บล็อก ICMP) - 3สแกนพอร์ตทั้งหมดแบบเร็ว (ชั้น 1): `nmap -p- --min-rate=1000 -T4
-oA fast` แล้วรอ — ผลที่ควรเห็นคือ list พอร์ต state open - 4ถ้าไม่เห็นพอร์ตเปิดเลย ให้เติม -Pn บังคับสแกนโดยไม่พึ่ง ping: `nmap -Pn -p- --min-rate=1000 -T4
` - 5หยิบเลขพอร์ตที่ขึ้น open มาทำชั้น 2 (deep): `nmap -sCV -p22,80,445
-oA deep` (ใส่เลขพอร์ตจริงที่เจอ) - 6อ่านผลชั้น 2 — ดูช่อง VERSION ของแต่ละบรรทัด นี่คือสิ่งที่บอกว่าต้องทำอะไรต่อ
- 7เจอ 80/443 → เปิดเบราว์เซอร์ดูหน้าเว็บก่อน แล้วไปทำ Directory Enumeration / FFUF Playbook ต่อ
- 8เจอ 445 → ลอง `smbclient -L //
/ -N` และ `enum4linux -a ` ดู share ที่เปิด - 9เจอ 88/389/636 → นี่คือ Active Directory ไปที่ BloodHound Playbook เพื่อเก็บข้อมูลกราฟทั้งโดเมน
- 10บันทึกผลไว้เสมอด้วย -oA กันต้องสแกนซ้ำ แล้วเลือกเส้นทางที่เจอไปทำต่อ
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| หา host ที่ออนไลน์ในวง | nmap -sn | - | - |
| สแกนพอร์ตเร็วทั้งหมด | nmap -p- --min-rate | - | - |
| สแกนไวขึ้นบน host จำนวนมาก | - | sudo apt install rustscan masscan | - |
| สแกนลึก + NSE script | nmap -sCV --script | - | - |
| ดู CVE จาก version ที่เจอ | searchsploit | - | cve.mitre.org, vulners.com |
| ส่อง SMB share | smbclient, enum4linux | - | - |
| ดูข้อมูล host แบบไม่ต้องสแกนเอง | - | - | shodan.io, censys.io |
| ต่อยอดเจอเว็บ | ffuf, gobuster | - | - |
| ต่อยอดเจอ AD | - | bloodhound-python, sharphound | bloodhound-project docs |
หัวข้อที่เชื่อมโยง
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้