前言
nmap是業(yè)內(nèi)非常知名的網(wǎng)絡(luò)掃描工具,和netcat齊名為網(wǎng)絡(luò)瑞士軍刀,想必大部分人都看過或者聽說過《黑客帝國》,里面的有幾個場景使用的是nmap,不妨引用一張電影劇照:

女主通過nmap掃描開放端口,并通過弱口令拿到主機權(quán)限,這不能說明nmap多么強大,因為nmap強大之處不僅僅是掃描端口,只能說明密碼復(fù)雜度多么重要!nmap常用于漏洞掃描、端口掃描、網(wǎng)絡(luò)發(fā)現(xiàn)等。篇幅有限,本文將從以下五大部分介紹nmap常用用法:
主機發(fā)現(xiàn)網(wǎng)絡(luò)探測指紋識別與探測防火墻/IDS逃逸信息收集暴力窮舉
過程中會盡量抓包還原真實場景,用的極少的參數(shù)將盡可能忽略不講,亦可稱之為雞肋,相信熟悉常用參數(shù)和用法后,其他鮮為人知的參數(shù)到真正需要用到的場景下再翻看man文檔也不遲。
一、主機發(fā)現(xiàn)
涉及到的參數(shù)列表,有些參數(shù)不常用,需要時可對照參考:
選項
含義
-sP
Ping掃描
-P0
無Ping掃描
-PS
TCP SYN Ping掃描
-PU
udp Ping掃描
-PE;-PP;-PM
ICMP Ping Types掃描
-PR
ARP Ping掃描
-n
禁止DNS反向解析
-R
反向解析域名
–system-dns
使用系統(tǒng)域名解析器
-sL
列表掃描
-6
掃描IPv6地址
–traceroute
路由跟蹤
-PY
SCTP INIT Ping掃描
-PA
TCP ACK Ping掃描
最簡單的掃描,什么參數(shù)都不加,默認發(fā)SYN探測:
代碼語言:txt復(fù)制
$ nmap 192.168.1.1Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-25 14:29 CSTNmap scan report for openwrt.linux-code.com (192.168.1.1)Host is up (0.00026s latency).Not shown: 989 closed portsPORT STATE SERVICE21/tcp open ftp22/tcp open ssh53/tcp open domain80/tcp open http81/tcp open hosts2-ns139/tcp open netbios-ssn443/tcp open https444/tcp open snpp445/tcp open microsoft-ds1234/tcp open hotline5000/tcp open upnpMAC Address: 00:0C:29:BE:5A:26 (VMware)Nmap done: 1 IP address (1 host up) scanned in 39.51 seconds$
可以看到列出了192.168.1.1這個IP的開放端口和對應(yīng)服務(wù)信息
常用指令:
代碼語言:txt復(fù)制
nmap -sP -n 192.168.1.0/24 #列出當前網(wǎng)段下所有存活主機,發(fā)送ICMP探測,-n 禁止DNS反向解析,節(jié)省掃描時間nmap -PS -n 172.16.0.0/16 #列出當前網(wǎng)段下所有存活主機,發(fā)送SYN Ping探測nmap -PR -n 192.168.1.1 #使用ARP Ping掃描nmap --system-dns 119.29.29.29 blog.linux-code.com #指定DNS地址,將域名解析成IP后再進行端口探測,不常用nmap --traceroute -v blog.linux-code.com #路由跟蹤,會列出每一跳的端口開放情況,不常用
反向DNS解析:
代碼語言:txt復(fù)制
$ nmap -R -sL 192.168.1.0/24 |& grep '(' Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-25 14:33 CSTNmap scan report for openwrt.linux-code.com (192.168.1.1)Nmap scan report for esxi.linux-code.com (192.168.1.10)Nmap scan report for qqdb.linux-code.com (192.168.1.84)Nmap scan report for pan.linux-code.com (192.168.1.95)Nmap scan report for nas.linux-code.com (192.168.1.128)Nmap scan report for node1 (192.168.1.197)Nmap done: 256 IP addresses (0 hosts up) scanned in 0.10 seconds$
二、網(wǎng)絡(luò)探測,細致化掃描
包含的參數(shù)如下:
選項
含義
-T
時序選項,范圍T0-T5
-p|-F
常用掃描方式
-sS
TCP SYN半開掃描
-sT
TCP連接掃描
-sU
UDP掃描
-sN;-sF;-sX
隱蔽掃描
-sA
TCP ACK掃描
-sW
TCP窗口掃描
-sM
TCP Maimon掃描
–scanflags
自定義TCP掃描
-sI(大寫字母i)
空閑掃描
-sO
IP協(xié)議掃描
-b
FTP Bounce掃描
常用命令:
1.按時序掃描(-T0~-T5)代碼語言:txt復(fù)制
$ nmap -T4 192.168.1.1
-T為時序掃描,分為-T0~-T5六個等級,數(shù)字越大速度越快越不精準,慢掃描多用于IDS逃逸,常用-T4;配合-F使用可提高掃描速度及效果,-F會盡量少的掃描端口,不會把默認端口全掃一遍
2.指定端口或端口范圍:(-p)代碼語言:txt復(fù)制
$ nmap -p 80 blog.linux-code.com #只掃描80端口$ nmap -p 80,443 -n 192.168.1.1 #80,443,-n不做DNS反解$ nmap -p 445-1023 192.168.1.1 #445-1023$ nmap -p 80,443,445-1000 -n 192.168.1.1 #字面意思
如果既想掃TCP又想掃UDP,可以在端口前加”T:”或”U:”,代表TCP和UDP,必須指定-sU(UDP掃描類型)且需要指定一個TCP掃描類型(如-sS、-sF、-sT等)
代碼語言:txt復(fù)制
$ nmap -sU -p U:53,T:80,22 -sT -n 192.168.1.1Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-25 14:37 CSTNmap scan report for 192.168.1.1Host is up (0.00037s latency).PORT STATE SERVICE22/tcp open ssh80/tcp open http53/udp open|filtered domainMAC Address: 00:0C:29:BE:5A:26 (VMware)Nmap done: 1 IP address (1 host up) scanned in 0.53 seconds$
3.nmap的6種端口狀態(tài)Open開放狀態(tài)Closed關(guān)閉狀態(tài);當然不一定是真的關(guān)閉,不排除對方系統(tǒng)做了一定的安全防護從而忽略nmap的探測報文Filtered被過濾;對方主機可能存在防火墻設(shè)備將nmap包阻隔,也可能是網(wǎng)絡(luò)擁塞造成的,如遇到此狀態(tài)建議在不同時間段再次掃描Unfiltered未被過濾;證明端口可以訪問,但無法判斷是Open還是Closed,當使用ACK掃描才會呈現(xiàn)該狀態(tài),這時建議換一種掃描方式Open|Filtered不確定態(tài);可能受到專業(yè)設(shè)備的阻擋,nmap發(fā)出去的報文沒有得到響應(yīng),可更換掃描方式再次嘗試Closed|Filtered不確定是關(guān)閉還是被過濾,只出現(xiàn)在IPID Idle掃描中,不常用4.SYN半開掃描(-sS)
此選項常用,不會和對方主機進行三次握手,只發(fā)送SYN報文,之后斷開連接,很難被防火墻或管理員檢測到;結(jié)合前面所述,如果端口處于不確定態(tài),可使用該選項進行掃描。
代碼語言:txt復(fù)制
$ nmap -sS -p 22,80 -n 192.168.1.1Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-25 14:39 CSTNmap scan report for 192.168.1.1Host is up (0.00030s latency).PORT STATE SERVICE22/tcp open ssh80/tcp open httpMAC Address: 00:0C:29:BE:5A:26 (VMware)Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds$

每次發(fā)完SYN后,不接受第二次握手直接RST掉對端主機的SYN包,因為從對方發(fā)送第二次握手包時nmap就已經(jīng)能判斷端口是否有開放。
5.TCP連接掃描(-sT)
顧名思義,建立在三次握手的基礎(chǔ)上;當SYN半開掃描不能用的時候才考慮用它,同時也是端口掃描中最基礎(chǔ)、最穩(wěn)定的掃描方式。
代碼語言:txt復(fù)制
$ nmap -sT -p 22,80 -n 192.168.1.1 Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-25 14:43 CSTNmap scan report for 192.168.1.1Host is up (0.00028s latency).PORT STATE SERVICE22/tcp open ssh80/tcp open httpMAC Address: 00:0C:29:BE:5A:26 (VMware)Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds$

完成建聯(lián)后緊接著斷開連接。
6.UDP掃描(-sU)
使用UDP報文探測,掃描速度較慢,通過ICMP不可達判斷端口開放情況;以下通過-p指定端口大大縮短掃描耗時:
代碼語言:txt復(fù)制
$ nmap -sU -p 53,80 -n 192.168.1.1 Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-25 14:45 CSTNmap scan report for 192.168.1.1Host is up (0.00028s latency).PORT STATE SERVICE53/udp open|filtered domain80/udp closed httpMAC Address: 00:0C:29:BE:5A:26 (VMware)Nmap done: 1 IP address (1 host up) scanned in 1.52 secondss$

7.隱蔽掃描(-sN;-sF;-sX)
-sN為NULL掃描,通過發(fā)送非常規(guī)TCP通信數(shù)據(jù)對計算機進行探測,若目標主機相應(yīng)端口是關(guān)閉的,會響應(yīng)一個RST數(shù)據(jù)表,若端口開放則不會響應(yīng)任何信息。
代碼語言:txt復(fù)制
$ nmap -sN -p 22,80 -n 192.168.1.1 Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-25 14:49 CSTNmap scan report for 192.168.1.1Host is up (0.00026s latency).PORT STATE SERVICE22/tcp open|filtered ssh80/tcp open|filtered httpMAC Address: 00:0C:29:BE:5A:26 (VMware)Nmap done: 1 IP address (1 host up) scanned in 1.52 seconds$

-sF為FIN掃描,不需要完成TCP握手,只向目標端口發(fā)送一個FIN包,如果收到目標響應(yīng)的RST包,則說明端口開放,否則視為關(guān)閉或者被攔截的(不確定態(tài)),因為目標主機對于此類無意義請求可以選擇RST也可以選擇不響應(yīng)。
代碼語言:txt復(fù)制
$ nmap -sF -p 22,80 -n 192.168.1.1 Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-25 14:52 CSTNmap scan report for 192.168.1.1Host is up (0.00024s latency).PORT STATE SERVICE22/tcp open|filtered ssh80/tcp open|filtered httpMAC Address: 00:0C:29:BE:5A:26 (VMware)Nmap done: 1 IP address (1 host up) scanned in 1.59 seconds$

-sX為Xmas掃描,數(shù)據(jù)包的FIN、PSH和URG標志位置打開,即標志為1,如果目標主機端口開放則會響應(yīng)一個RST包,否則判斷位不確定態(tài)。
代碼語言:txt復(fù)制
$ nmap -sX -p 22,80 -n 192.168.1.1Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-25 14:57 CSTNmap scan report for 192.168.1.1Host is up (0.00030s latency).PORT STATE SERVICE22/tcp open|filtered ssh80/tcp open|filtered httpMAC Address: 00:0C:29:BE:5A:26 (VMware)Nmap done: 1 IP address (1 host up) scanned in 1.54 seconds$
