Nmap Cheatsheet

Mục lục nhanh

1. Cú pháp & Cấu trúc lệnh
2. Target Specification
3. Host Discovery (Ping Scan)
4. Scan Techniques (Loại quét)
5. Port Specification
6. Service & Version Detection
7. OS Detection
8. NSE — Nmap Scripting Engine
9. Timing & Performance
10. Firewall / IDS Evasion
11. Output
12. Troubleshooting & Debugging
13. Ndiff — So sánh kết quả
14. Một số lệnh thực chiến

1. Cú pháp & Cấu trúc lệnh

nmap [Scan Type(s)] [Options] {target specification}

2. Target Specification

Các cách xác định mục tiêu

Cú phápVí dụMô tả
IP đơnnmap 192.168.1.1Scan một địa chỉ IP
Nhiều IPnmap 192.168.1.1 10.0.0.5Scan nhiều IP riêng lẻ
Rangenmap 192.168.1.1-254Scan dải IP từ .1 đến .254
CIDRnmap 192.168.1.0/24Scan cả subnet /24
Hostnamenmap scanme.nmap.orgScan theo domain
Từ filenmap -iL targets.txtĐọc danh sách target từ file
Ngẫu nhiênnmap -iR 100Scan 100 host ngẫu nhiên trên internet
Loại trừ IPnmap 192.168.1.0/24 --exclude 192.168.1.1Bỏ qua IP cụ thể
Loại trừ từ filenmap 192.168.1.0/24 --excludefile skip.txtBỏ qua danh sách trong file
IPv6nmap -6 2607:f0d0:1002:51::4Scan địa chỉ IPv6

3. Host Discovery

Trước khi scan port, Nmap cần biết host nào đang alive. Đây là bước host discovery.

Các phương thức Ping

SwitchVí dụMô tả
-snnmap -sn 192.168.1.0/24Ping scan (chỉ host discovery, không scan port)
-Pnnmap -Pn 192.168.1.1Skip host discovery, cứ scan port dù target không phản hồi ping
-sLnmap -sL 192.168.1.0/24List scan — chỉ liệt kê target, không gửi packet nào
-PSnmap -PS22,80,443 192.168.1.0/24TCP SYN ping tới port chỉ định (mặc định port 80)
-PAnmap -PA22,80 192.168.1.0/24TCP ACK ping
-PUnmap -PU53 192.168.1.0/24UDP ping tới port chỉ định
-PEnmap -PE 192.168.1.0/24ICMP Echo ping
-PPnmap -PP 192.168.1.0/24ICMP Timestamp ping
-PMnmap -PM 192.168.1.0/24ICMP Address Mask ping
-PRnmap -PR 192.168.1.0/24ARP ping (chỉ hoạt động trong LAN, rất nhanh và chính xác)
-PYnmap -PY 192.168.1.0/24SCTP INIT ping
-POnmap -PO 192.168.1.0/24IP Protocol ping
-nnmap -n 192.168.1.1Không thực hiện DNS resolution (nhanh hơn)
-Rnmap -R 192.168.1.1Bắt buộc reverse DNS resolution
--system-dnsnmap --system-dns targetDùng DNS resolver của hệ điều hành thay vì Nmap’s internal
--dns-serversnmap --dns-servers 8.8.8.8 targetChỉ định DNS server cụ thể
--traceroutenmap --traceroute targetTrace route tới host sau khi scan

4. Scan Techniques

Switch -s xác định loại scan — ảnh hưởng trực tiếp đến tính tàng hình, độ chính xác và yêu cầu quyền.

graph TD A[Chọn Scan Type] --> B{Cần root?} B -->|Có| C[SYN -sS / UDP -sU / NULL -sN / FIN -sF / Xmas -sX] B -->|Không| D[TCP Connect -sT] C --> E{Mục tiêu?} E -->|Tàng hình| F[-sS SYN Scan] E -->|Bypass firewall| G[-sN / -sF / -sX] E -->|UDP services| H[-sU UDP Scan]

Bảng tổng hợp Scan Types

SwitchTênMô tả chi tiết
-sSSYN ScanGửi SYN, nhận SYN-ACK (open) hoặc RST (closed). Không hoàn thành 3-way handshake → stealth hơn. Cần root. Default khi có root.
-sTTCP Connect ScanHoàn thành 3-way handshake hoàn chỉnh. Không cần root nhưng dễ bị log hơn. Default khi không có root.
-sUUDP ScanScan UDP port. Chậm và khó (UDP không có handshake). Cần root.
-sNNULL ScanGửi packet không có flag nào. Bypass một số firewall/IDS.
-sFFIN ScanGửi chỉ FIN flag. Bypass firewall không stateful.
-sXXmas ScanBật FIN + PSH + URG flags (gói “sáng như cây Xmas”). Bypass firewall.
-sAACK ScanDùng để map firewall rules và phân biệt filtered vs unfiltered port, không detect open/closed.
-sWWindow ScanGiống ACK nhưng phân tích TCP window size để phát hiện open port trên một số OS.
-sMMaimon ScanFIN + ACK. Một số BSD-based sẽ drop packet nếu port open.
-sIIdle/Zombie ScanScan hoàn toàn ẩn danh qua một host “zombie”. Cực kỳ stealth.
-sOIP Protocol ScanLiệt kê IP protocols mà host hỗ trợ (TCP, UDP, ICMP, IGMP…).
-sRRPC ScanXác định các RPC service và version (deprecated, dùng -sV thay).
--scanflagsCustom TCP ScanTự chỉ định TCP flags: --scanflags URGACKPSHRSTSYNFIN
--send-ethRaw EthernetGửi packet ở Ethernet layer
--send-ipRaw IPGửi packet ở IP layer

Port States — Các trạng thái port

StateÝ nghĩa
openPort đang lắng nghe, có service chạy
closedPort không có service nhưng reachable (RST received)
filteredFirewall block packet, Nmap không xác định được
unfilteredPort reachable nhưng không xác định open/closed (ACK scan)
open|filteredNmap không phân biệt được (thường với UDP/NULL/FIN/Xmas)
closed|filteredKhông xác định closed hay filtered (Idle scan)

5. Port Specification

SwitchVí dụMô tả
-p [port]nmap -p 80 targetScan port cụ thể
-p [range]nmap -p 1-1024 targetScan dải port
-p [list]nmap -p 22,80,443,8080 targetScan list port
-p U:,T:nmap -p U:53,T:80,443 targetMix UDP và TCP port
-p-nmap -p- targetScan toàn bộ 65535 port
-p 0-nmap -p 0- targetBao gồm cả port 0
-Fnmap -F targetFast scan — chỉ scan 100 port phổ biến nhất
--top-portsnmap --top-ports 1000 targetScan top N port phổ biến nhất
-rnmap -r targetScan tuần tự theo thứ tự số (mặc định ngẫu nhiên)
-p [service]nmap -p http,https targetScan theo tên service (tra /etc/services)

6. Service & Version Detection

Nmap không chỉ biết port open — nó còn có thể fingerprint service và phát hiện version cụ thể.

SwitchVí dụMô tả
-sVnmap -sV targetDetect service/version trên open port
-sV --version-intensity [0-9]nmap -sV --version-intensity 5 targetĐộ sâu probe (0=nhẹ, 9=cực sâu). Mặc định 7
-sV --version-lightnmap -sV --version-light targetIntensity 2 — nhanh hơn, ít chính xác hơn
-sV --version-allnmap -sV --version-all targetIntensity 9 — thử mọi probe
--version-tracenmap -sV --version-trace targetDebug chi tiết quá trình version detection
-Anmap -A targetAggressive mode: bật -sV -O -sC --traceroute cùng lúc

7. OS Detection

Nmap dùng TCP/IP stack fingerprinting — phân tích sự khác biệt nhỏ trong cách OS implement TCP/IP để đoán OS.

SwitchVí dụMô tả
-Onmap -O targetEnable OS detection
-O --osscan-guessnmap -O --osscan-guess targetÉp Nmap đoán dù confidence thấp
-O --osscan-limitnmap -O --osscan-limit targetChỉ thử OS detect khi có ít nhất 1 open + 1 closed port
-O --max-os-tries [n]nmap -O --max-os-tries 2 targetGiới hạn số lần thử OS detect
-Anmap -A targetBao gồm OS detection + version + scripts + traceroute

8. NSE — Nmap Scripting Engine

NSE (Nmap Scripting Engine) là một trong những tính năng mạnh nhất của Nmap. Scripts được viết bằng Lua và nằm tại /usr/share/nmap/scripts/.

graph LR NSE[NSE Engine] --> A[auth] NSE --> B[brute] NSE --> C[discovery] NSE --> D[exploit] NSE --> E[vuln] NSE --> F[safe] NSE --> G[intrusive] NSE --> H[malware] NSE --> I[default] NSE --> J[dos] NSE --> K[fuzzer] NSE --> L[external] NSE --> M[version]

Script Categories

CategoryMô tả
authXác thực: bypass auth, detect null session, v.v.
bruteBrute force credentials (SSH, FTP, HTTP, SMB…)
defaultScripts an toàn, chạy với -sC. Thường dùng nhất
discoveryThu thập thông tin: DNS, SNMP, SMB share, v.v.
dosKiểm tra denial-of-service (cẩn thận!)
exploitKhai thác lỗ hổng
externalGọi third-party service bên ngoài (Shodan, Whois…)
fuzzerFuzz input để tìm crash/bug
intrusiveCó thể gây ảnh hưởng đến target (crash, log, v.v.)
malwareDetect malware/backdoor trên target
safeScripts an toàn, không gây tác hại
versionHỗ trợ phát hiện version service
vulnKiểm tra các lỗ hổng đã biết (CVE)

Cú pháp chạy Scripts

SwitchVí dụMô tả
-sCnmap -sC targetChạy tất cả script thuộc category default
--script defaultnmap --script default targetTương đương -sC
--script [name]nmap --script banner targetChạy script cụ thể
--script [wildcard]nmap --script "http-*" targetChạy tất cả script match pattern
--script [cat]nmap --script vuln targetChạy toàn bộ category
--script [cat1,cat2]nmap --script "default,safe" targetNhiều category
--script "not [cat]"nmap --script "not intrusive" targetLoại trừ category
--script-argsnmap --script snmp-sysdescr --script-args snmpcommunity=public targetTruyền argument cho script
--script-tracenmap --script banner --script-trace targetDebug script execution
--script-updatedbnmap --script-updatedbCập nhật database scripts

Useful NSE Script Examples

# Phát hiện XSS
nmap -p80 --script http-unsafe-output-escaping scanme.nmap.org

# Phát hiện SQL Injection
nmap -p80 --script http-sql-injection scanme.nmap.org

# Sinh sitemap của web server
nmap -Pn --script http-sitemap-generator scanme.nmap.org

# Scan web server ngẫu nhiên nhanh
nmap -n -Pn -p 80 --open -sV --script banner,http-title -iR 1000

# Detect WAF
nmap -p80,443 --script http-waf-detect target

# Directory brute force
nmap -p80 --script http-enum target
# Enum SMB shares
nmap -p445 --script smb-enum-shares target

# Enum SMB users
nmap -p445 --script smb-enum-users target

# Kiểm tra EternalBlue (MS17-010)
nmap -p445 --script smb-vuln-ms17-010 target

# Tất cả SMB script an toàn
nmap -p445 --script "smb-enum*,smb-ls,smb-os-discovery,smb-vuln*" target

# OS discovery qua SMB
nmap -p445 --script smb-os-discovery target
# Brute force subdomain
nmap --script dns-brute domain.com

# Zone transfer
nmap --script dns-zone-transfer --script-args dns-zone-transfer.domain=target.com -p53 ns.target.com
# SNMP info
nmap -sU -p161 --script snmp-info target
nmap -sU -p161 --script snmp-sysdescr --script-args snmpcommunity=public target

# SSH auth methods
nmap -p22 --script ssh-auth-methods target

# Brute force FTP
nmap -p21 --script ftp-brute target

# Anonymous FTP
nmap -p21 --script ftp-anon target
# Quét toàn bộ vuln scripts
nmap --script vuln target

# Heartbleed
nmap -p443 --script ssl-heartbleed target

# ShellShock
nmap -p80 --script http-shellshock target

# Slowloris DoS check
nmap -p80 --script http-slowloris-check target

9. Timing & Performance

Timing Templates

Nmap có 6 template tốc độ từ T0 (cực chậm) đến T5 (cực nhanh). Lựa chọn phụ thuộc vào network stabilityIDS evasion yêu cầu.

TemplateTênMô tảUse case
-T0ParanoidMỗi probe cách nhau 5 phútIDS evasion tuyệt đối, cực chậm
-T1SneakyMỗi probe cách nhau 15 giâyStealth scan, tránh IDS
-T2PoliteChậm, dùng ít bandwidthKhông muốn ảnh hưởng đến mạng
-T3NormalDefault khi không chỉ địnhCân bằng tốc độ/stealth
-T4AggressiveGiả sử mạng nhanh, đáng tinPentest nội bộ, CTF
-T5InsaneNhanh nhất, có thể bỏ sótLab / mạng cực nhanh
nmap -T4 192.168.1.0/24    # Recommended cho pentest nội bộ
nmap -T1 target            # Stealth scan chậm

Timing & Performance Switches Chi Tiết

SwitchVí dụMô tả
--min-rate--min-rate 100Tối thiểu N packet/giây
--max-rate--max-rate 1000Tối đa N packet/giây
--min-parallelism--min-parallelism 10Tối thiểu N probe song song
--max-parallelism--max-parallelism 1Tối đa N probe song song
--min-hostgroup--min-hostgroup 50Tối thiểu N host scan song song
--max-hostgroup--max-hostgroup 1024Tối đa N host trong group
--min-rtt-timeout--min-rtt-timeout 100msRTT timeout tối thiểu
--max-rtt-timeout--max-rtt-timeout 5sRTT timeout tối đa
--initial-rtt-timeout--initial-rtt-timeout 500msRTT timeout khởi đầu
--max-retries--max-retries 3Số lần retry tối đa
--host-timeout--host-timeout 30mTừ bỏ host sau bao lâu
--scan-delay--scan-delay 1sDelay tối thiểu giữa các probe
--max-scan-delay--max-scan-delay 5sDelay tối đa giữa các probe
--defeat-rst-ratelimit--defeat-rst-ratelimitBypass giới hạn tốc độ RST
--ttl--ttl 64Đặt TTL cho packet gửi đi

10. Firewall / IDS Evasion & Spoofing

Kỹ thuật evasion

SwitchVí dụMô tả
-fnmap -f targetFragment packets — chia nhỏ IP packet thành các fragment 8 byte. Bypass packet filter cũ
-f -fnmap -ff targetFragment 2 lần (16 byte mỗi fragment)
--mtunmap --mtu 24 targetTự set MTU (phải là bội số của 8)
-Dnmap -D RND:10 targetDecoy scan — gửi từ nhiều IP giả ngẫu nhiên để làm khó trace
-Dnmap -D 10.0.0.1,10.0.0.2,ME targetDecoy cụ thể, ME là IP thật xen giữa
-sInmap -sI zombie_ip targetIdle/Zombie Scan — scan ẩn danh hoàn toàn qua host zombie
-Snmap -S fake_ip targetSpoof source IP (cần -e-Pn)
-g / --source-portnmap -g 53 targetGiả mạo source port (ví dụ 53 để giả DNS traffic)
--proxiesnmap --proxies http://proxy:8080 targetRelay qua HTTP/SOCKS4 proxy
--data-lengthnmap --data-length 200 targetThêm random data vào packet để bypass fingerprinting
--randomize-hostsnmap --randomize-hosts target_rangeNgẫu nhiên hóa thứ tự scan target
--spoof-macnmap --spoof-mac 0 targetSpoof MAC address ngẫu nhiên
--spoof-macnmap --spoof-mac Dell targetSpoof MAC theo vendor
--spoof-macnmap --spoof-mac AA:BB:CC:DD:EE:FF targetSpoof MAC cụ thể
--badsumnmap --badsum targetGửi packet với checksum sai — test firewall/IDS phản ứng thế nào

Lệnh IDS Evasion tổng hợp

# Kết hợp nhiều kỹ thuật
sudo nmap -f -T0 -n -Pn \
  --data-length 200 \
  --spoof-mac 0 \
  -D RND:5,ME \
  -g 53 \
  --source-port 53 \
  192.168.1.1

11. Output

Các định dạng output

SwitchVí dụMô tả
-oNnmap -oN scan.txt targetNormal output — readable cho người đọc
-oXnmap -oX scan.xml targetXML output — dùng với tools khác (Metasploit, custom parser)
-oGnmap -oG scan.gnmap targetGrepable output — dễ xử lý với grep, awk, cut
-oAnmap -oA scan_result targetAll formats — tạo cả 3 file cùng lúc (.nmap, .xml, .gnmap)
-oSnmap -oS l33t.txt target“Script kiddie” output — encode kỳ quặc (ít dùng)
-oG -nmap -oG - targetGrepable output ra stdout thay vì file
--append-outputnmap -oN file.txt --append-output targetAppend vào file thay vì ghi đè
--stats-everynmap --stats-every 10s targetIn statistics mỗi N giây

Verbosity & Debug

SwitchVí dụMô tả
-vnmap -v targetVerbose — thông tin thêm khi scan
-vvnmap -vv targetRất verbose
-dnmap -d targetDebug level 1
-d9nmap -d9 targetDebug level tối đa (rất nhiều output)
--reasonnmap --reason targetGiải thích lý do port ở trạng thái đó
--opennmap --open targetChỉ hiển thị open port (bỏ filtered/closed)
--packet-tracenmap --packet-trace targetHiện toàn bộ packet gửi/nhận

Xử lý output thực chiến

# Tìm web server đang chạy trong subnet
nmap -p80 -sV -oG - --open 192.168.1.0/24 | grep open

# Lấy danh sách IP alive
nmap -sn 192.168.1.0/24 -oG - | grep "Status: Up" | cut -d" " -f2

# Đếm port xuất hiện nhiều nhất
grep " open " scan.nmap | awk '{print $1}' | sort | uniq -c | sort -rn

# Convert XML sang HTML
xsltproc nmap.xml -o nmap.html

# Import vào Metasploit
msf> db_import scan.xml

12. Troubleshooting & Debugging

SwitchVí dụMô tả
-hnmap -hHelp nhanh
-Vnmap -VHiển thị version của Nmap
--iflistnmap --iflistLiệt kê network interfaces và routes
-enmap -e eth0 targetChỉ định interface cụ thể
--reasonnmap --reason targetLý do port state (reset, syn-ack, …)
--opennmap --open targetChỉ show open/open|filtered port
--packet-tracenmap --packet-trace -T4 targetTrace từng packet gửi/nhận
-dnmap -d targetDebug output

13. Ndiff — So sánh kết quả scan

ndiff là tool đi kèm Nmap để so sánh hai file kết quả scan XML, rất hữu ích khi theo dõi thay đổi mạng theo thời gian.

# So sánh hai file XML
ndiff scan1.xml scan2.xml

# Verbose mode (hiện chi tiết hơn)
ndiff -v scan1.xml scan2.xml

# Output dạng XML
ndiff --xml scan1.xml scan2.xml

14. Lệnh thực chiến theo tình huống

# 1. Host discovery — ai đang sống trong mạng
nmap -sn 192.168.1.0/24

# 2. Scan nhanh top 100 port trên subnet
nmap -F 192.168.1.0/24

# 3. Scan chi tiết với version detection
nmap -sS -sV -O -T4 192.168.1.0/24

# 4. Scan toàn diện với default scripts
nmap -A -T4 target
# Scan web và detect tech stack
nmap -p80,443,8080,8443 -sV --script "http-*" target

# Enum web directories
nmap -p80 --script http-enum target

# Phát hiện WAF
nmap -p80,443 --script http-waf-detect target

# Detect XSS, SQLi
nmap -p80 --script http-sql-injection,http-unsafe-output-escaping target

# Grab HTTP headers
nmap -p80 --script http-headers target
# Aggressive scan toàn subnet
sudo nmap -A -T4 192.168.1.0/24 -oA full_scan

# Chỉ scan port phổ biến, nhanh
nmap --top-ports 100 192.168.1.0/24 -oG quick.gnmap

# Traceroute kết hợp
nmap --traceroute -sn 192.168.1.0/24
# Chậm, phân mảnh packet, decoy
sudo nmap -sS -T1 -f -D RND:5 --data-length 100 target

# Xmas/NULL/FIN để bypass stateless firewall
sudo nmap -sX target
sudo nmap -sN target
sudo nmap -sF target

# Source port giả là DNS (53)
sudo nmap -g 53 -sS target

# Qua proxy
nmap --proxies socks4://proxy_ip:1080 target
TARGET=10.10.10.1

# Bước 1: Quick port discovery
sudo nmap -sS -T4 --min-rate 5000 -p- $TARGET -oN ports.txt

# Bước 2: Extract open ports
PORTS=$(grep "open" ports.txt | cut -d'/' -f1 | tr '\n' ',' | sed 's/,$//')

# Bước 3: Deep scan các port open
sudo nmap -sC -sV -p$PORTS $TARGET -oA detail_scan

# Bước 4: Vuln scan
sudo nmap --script vuln -p$PORTS $TARGET -oN vuln_scan.txt
# Phát hiện Samba/SMB
nmap -p445 --script smb-os-discovery,smb-enum-shares target

# Phát hiện MS17-010 (EternalBlue)
nmap -p445 --script smb-vuln-ms17-010 target

# SSH brute (cẩn thận với rate limit)
nmap -p22 --script ssh-brute --script-args userdb=users.txt,passdb=pass.txt target

# SNMP community string
nmap -sU -p161 --script snmp-brute target

Tổng hợp Quick Reference

TARGET SPECIFICATION
  nmap 192.168.1.1            Single IP
  nmap 192.168.1.1-254        Range
  nmap 192.168.1.0/24         CIDR
  nmap -iL list.txt           From file
  nmap -iR 100                Random 100 hosts
  nmap --exclude IP           Exclude IP
  nmap -6 IPv6                IPv6

HOST DISCOVERY
  -sn        Ping scan only (no port scan)
  -Pn        Skip ping (assume host up)
  -PS 80,443 TCP SYN ping
  -PA 80     TCP ACK ping
  -PE        ICMP Echo ping
  -PP        ICMP Timestamp ping
  -PR        ARP ping (LAN only)
  -n         No DNS resolution
  -R         Force DNS resolution

SCAN TYPES
  -sS    SYN (stealth, default+root)
  -sT    TCP Connect (no root)
  -sU    UDP scan
  -sN    NULL scan
  -sF    FIN scan
  -sX    Xmas scan
  -sA    ACK scan (firewall mapping)
  -sI    Idle/Zombie scan
  -sO    IP protocol scan
  --scanflags SYNFIN  Custom flags

PORT SPECIFICATION
  -p 80          Single port
  -p 80,443      Multiple ports
  -p 1-1024      Range
  -p-            All 65535 ports
  -p U:53,T:80   TCP+UDP
  -F             Top 100
  --top-ports N  Top N ports

SERVICE/VERSION DETECTION
  -sV                  Version detection
  -sV --version-all    Max intensity
  -A                   Aggressive (OS+Ver+Scripts+Trace)

OS DETECTION
  -O                OS detection
  -O --osscan-guess Guess aggressively

NSE SCRIPTS
  -sC                 Default scripts
  --script [name]     Specific script
  --script "http-*"   Wildcard
  --script vuln       Category
  --script-updatedb   Update DB

TIMING
  -T0  Paranoid    -T3  Normal
  -T1  Sneaky      -T4  Aggressive
  -T2  Polite      -T5  Insane
  --min-rate N     Min packets/sec
  --max-rate N     Max packets/sec

EVASION
  -f              Fragment packets
  --mtu 24        Custom MTU
  -D RND:5        Decoy scan
  -g 53           Spoof source port
  -S fake_ip      Spoof source IP
  --spoof-mac 0   Random MAC
  --data-length N Add random data

OUTPUT
  -oN file.txt    Normal
  -oX file.xml    XML
  -oG file.gnmap  Grepable
  -oA basename    All three formats
  -v / -vv        Verbose
  --reason        Show port state reason
  --open          Only open ports

MISC
  -V              Nmap version
  -h              Help
  --iflist        List interfaces
  -e eth0         Use specific interface