介紹nmap常見的參數及意義
1 -A :選項用於使用進攻性方式掃描 2 -T4: 指定掃描過程使用的時序,總有6個級別(0-5),級別越高,掃描速度越快,但也容易被防火牆或IDS檢測並屏蔽掉,在網絡通訊狀況較好的情況下推薦使用T4 3 -oX test.xml: 將掃描結果生成 test.xml 文件 4 -oG test.txt: 將掃描結果生成 test.txt 文件 5 -sn : 只進行主機發現,不進行端口掃描 6 -O : 指定Nmap進行系統版本掃描 7 -sV: 指定讓Nmap進行服務版本掃描 8 -p <port ranges>: 掃描指定的端口 9 -sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式來對目標主機進行掃描 10 -sU: 指定使用UDP掃描方式確定目標主機的UDP端口狀況 11 -script <script name> : 指定掃描腳本 12 -Pn : 不進行ping掃描 13 -sP : 用ping掃描判斷主機是否存活,只有主機存活,nmap才會繼續掃描,一般最好不加,因為有的主機會禁止ping 14 -PI : 設置這個選項,讓nmap使用真正的ping(ICMP echo請求)來掃描目標主機是否正在運行。 15 -iL 1.txt : 批量掃描1.txt中的目標地址 16 17 -sL: List Scan 列表掃描,僅將指定的目標的IP列舉出來,不進行主機發現 18 -sY/sZ: 使用SCTP INIT/COOKIE-ECHO來掃描SCTP協議端口的開放的情況 19 -sO: 使用IP protocol 掃描確定目標機支持的協議類型 20 -PO : 使用IP協議包探測對方主機是否開啟 21 -PE/PP/PM : 使用ICMP echo、 ICMP timestamp、ICMP netmask 請求包發現主機 22 -PS/PA/PU/PY : 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式進行發現 23 24 -sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密掃描方式來協助探測對方的TCP端口狀態 25 -e eth0:指定使用eth0網卡進行探測 26 -f : --mtu <val>: 指定使用分片、指定數據包的 MTU. 27 -b <FTP relay host>: 使用FTP bounce scan掃描方式 28 -g: 指定發送的端口號 29 -r: 不進行端口隨機打亂的操作(如無該參數,nmap會將要掃描的端口以隨機順序方式掃描,以讓nmap的掃描不易被對方防火牆檢測到) 30 -v 表示顯示冗余信息,在掃描過程中顯示掃描的細節,從而讓用戶了解當前的掃描狀態 31 -n : 表示不進行DNS解析; 32 -D <decoy1,decoy2[,ME],...>: 用一組 IP 地址掩蓋真實地址,其中 ME 填入自己的 IP 地址 33 -R :表示總是進行DNS解析。 34 -F : 快速模式,僅掃描TOP 100的端口 35 -S <IP_Address>: 偽裝成其他 IP 地址 36 --ttl <val>: 設置 time-to-live 時間 37 --badsum: 使用錯誤的 checksum 來發送數據包(正常情況下,該類數據包被拋棄,如果收到回復,說明回復來自防火牆或 IDS/IPS) 38 --dns-servers : 指定DNS服務器 39 --system-dns : 指定使用系統的DNS服務器 40 --traceroute : 追蹤每個路由節點 41 --scanflags <flags>: 定制TCP包的flags 42 --top-ports <number> :掃描開放概率最高的number個端口 43 --port-ratio <ratio>: 掃描指定頻率以上的端口。與上述--top-ports類似,這里以概率作為參數 44 --version-trace: 顯示出詳細的版本偵測過程信息 45 --osscan-limit: 限制Nmap只對確定的主機的進行OS探測(至少需確知該主機分別有一個open和closed的端口) 46 --osscan-guess: 大膽猜測對方的主機的系統類型。由此准確性會下降不少,但會盡可能多為用戶提供潛在的操作系統 47 --data-length <num>: 填充隨機數據讓數據包長度達到 Num 48 --ip-options <options>: 使用指定的 IP 選項來發送數據包 49 --spoof-mac <mac address/prefix/vendor name> : 偽裝 MAC 地址 50 --version-intensity <level>: 指定版本偵測強度(0-9),默認為7。數值越高,探測出的服務越准確,但是運行時間會比較長。 51 --version-light: 指定使用輕量偵測方式 (intensity 2) 52 --version-all: 嘗試使用所有的probes進行偵測 (intensity 9)
一、檢測主機是否在線
nmap支持多種主機探測方式,常見參數如下
1 -sn: Ping Scan 只進行主機發現,不進行端口掃描。 2 -PE/PP/PM: 使用ICMP echo、 ICMP timestamp、ICMP netmask 請求包發現主機。 3 -PS/PA/PU/PY[portlist]: 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式進行發現。 4 5 -sL: List Scan 列表掃描,僅將指定的目標的IP列舉出來,不進行主機發現。 6 -Pn: 將所有指定的主機視作開啟的,跳過主機發現的過程。 7 -PO[protocollist]: 使用IP協議包探測對方主機是否開啟。 8 -n/-R: -n表示不進行DNS解析;-R表示總是進行DNS解析。 9 --dns-servers <serv1[,serv2],...>: 指定DNS服務器。 10 --system-dns: 指定使用系統的DNS服務器
探測公網ip時可以使用nmap -sn命令,例如nmap -sn ip
nmap會發送四種不同類型的數據包來探測目標主機是否存活。只要收到其中的一個包的回復,就證明主機存活
1 ICMP echo request 2 a TCP SYN packet to port 443(https) 3 a TCP ACK packet to port 80(http) 4 an ICMP timestamp request
對於上面的不同類型數據包來說
-PE的ICMP Echo掃描簡單來說是通過向目標發送ICMP Echo數據包來探測主機是否存活,
但由於許多主機的防火牆會禁止這些報文,所以僅僅是ICMP掃描時不夠的。
命令:nmap -PE ip
-PP的ICMP time stamp時間戳掃描在大多數防火牆配置不當是可能會得到回復,可以以此來判斷目標主機是否存活,
除此之外,該命令還會探測 其他開放的端口及服務
命令:nmap -PP ip
-PM 的ICMP address maskPing地址掩碼掃描會試圖備用選的ICMP等級Ping指定的主機,有不錯的穿透防火牆效果
命令:nmap -PM ip
以上是對於探測公網的ip,當探測內網ip時
使用nmap -sn 內網ip 這個命令會發送arp請求包探測目標ip是否在線,如果有arp回復包,則說明在線。此命令可以探測目標主機是否在線,
如果在線,還可以得到其MAC地址。但是不會探測其開放的端口號
使用 -PE/PP/PM 內網ip 探測主機的開啟情況,使用的是arp請求報文,如果有arp回復,說明主機在線。
探測網段主機的在線情況,使用的是nmap -sn 網段/子網掩碼
例如 nmap -sn 192.168.16.128/24 或 nmap -sn 192.168.16.100-200
探測192.168.16.128/24這個網段內主機的在線情況,返回主機的ip地址和MAC地址
二、端口掃描及其原理
nmap通過探測將端口划分為6個狀態:
open:端口是開放的。
closed:端口是關閉的。
filtered:端口被防火牆IDS/IPS屏蔽,無法確定其狀態。
unfiltered:端口沒有被屏蔽,但是否開放需要進一步確定。
open|filtered:端口是開放的或被屏蔽。
closed|filtered :端口是關閉的或被屏蔽
TCP SYN 掃描(-sS)
這是默認的掃描方式,通常被稱作半開放掃描,該方式通過發送SYN到目標端口,如果收到SYN/ACK回復,就可以判斷端口是開放的,如果收到RST包,說明
該端口是關閉的。如果沒有收到回復,就可以判斷該端口被屏蔽了,該方式不建立完整的TCP連接,相對比較隱蔽,而且效率高,時用范圍廣
TCP connent 掃描(-sT)
TCP connect方式使用系統網絡API connect向目標主機的端口發起連接,如果無法連接,說明該端口關閉。該方式掃描速度比較慢,而且由於建立完整的TCP連接會在目標主機上留下記錄信息,不夠隱蔽。所以,TCP connect是TCP SYN無法使用才考慮使用的方式
TCP ACK 掃描(-sA)
向目標主機的端口發送ACK包,如果收到RST包,說明端口沒有被防火牆屏蔽,該方式只能用於確定防火牆是否屏蔽某個端口嗎,可以輔助TCP SYN的方式來判斷目標主機防火牆的狀況
TCP FIN/Xmas/NULL 掃描(-sN/sF/sX)
這三種掃描方式被稱為秘密掃描,因為相對比較隱蔽。FIN掃描向目標主機的端口發送的TCP FIN 包或Xmas tree包或NULL包,如果收到對方的RST回復包,那么說明該端口是關閉的;沒有收到RST包說明該端口可能是開放的或者被屏蔽了。其中Xmas tree包是指flags中FIN URG PUSH被置為1的TCP包;NULL包是指所有的flags都為0的TCP包。
UDP掃描(-sU)
UDP掃描用於判斷UDP端口的情況,向目標主機的UDP端口發送探測包,如果收到回復ICMP port unreachable就說明該端口是關閉的;如果沒有收到回復,那說明該UDP端口可能是開放的或者屏蔽的。因此,通過反向排除法的方式來判斷哪些UDP端口是可能處於開放狀態的
三、端口掃描用法
1 -sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式來對目標主機進行掃描。 2 3 -sU: 指定使用UDP掃描方式確定目標主機的UDP端口狀況。 4 5 -sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密掃描方式來協助探測對方的TCP端口狀態。 6 7 --scanflags <flags>: 定制TCP包的flags。 8 9 -sI <zombiehost[:probeport]>: 指定使用idle scan方式來掃描目標主機(前提需要找到合適的zombie host) 10 11 -sY/sZ: 使用SCTP INIT/COOKIE-ECHO來掃描SCTP協議端口的開放的情況。 12 13 -sO: 使用IP protocol 掃描確定目標機支持的協議類型。 14 15 -b <FTP relay host>: 使用FTP bounce scan掃描方式
簡單掃描(nmap ip)
nmap ip 這個命令會按照nmap-Service文件中指定的端口掃描嗎,然后列出目標主機開放的端口號,以及端口號上運行的服務。在一次簡單的掃描中,nmap會默認以TCP-SYN掃描目標主機開放的端口號,以及端口是否開放,若開放,則列出對應的服務
全面掃描(nmap -A ip)
這個命令不僅列出目標主機開放的端口號,對應的服務,還較為詳細的列出了服務的版本,其支持的命令,到達目標主機的每一跳路由等信息。在進行完全掃描時,掃描機與目標主機之間存在大量的數據流量交互,掃描時長隨之增加。完全掃描不僅僅是TCP協議上的通信交互,還有例如ICMP、HTTP、NBSS、TDS、POP等等協議的交互,這些協議的交互是因為在完全掃描開始時首先對目標主機的開放端口進行了確認,之后再根據不同對應的不同服務進行服務版本信息探測、賬戶信息等信息的探測!
nmap -T4 -A -V ip
-A選項用於使用攻擊性方式掃描
-T4指定掃描過程使用的時序,總共有6個級別(0-5)級別越高掃描速度越快,但是也容易被防火牆檢測並屏蔽掉,在網絡情況較好的是可以使用T4
-v 表示顯示冗余信息,在掃描的過程中顯示掃描的細節
探測指定端口的開放狀態
默認情況下,nmap對端口的掃描方式是從小到大進行的,或者參照nmap-services中文列出的端口進行掃描。-p選項可以指定一個端口號或者一個端口范圍。若想掃描TCP端又想掃描UDP端口,需要在前面加上T:或者U:來分別代表TCP和UDP協議。注意,既要掃描TCP又掃描UDP,則需要指定-sU及至少一個TCP掃描類型
(-sS半連接掃描),-sT(全連接掃描)
namp -p 80-445 ip 掃描主機的80-445端口的開放情況
若既想以半連接的TCP SYN方式掃描主機的80端口,又以UDP方式掃描主機的445端口
nmap -sS -sU -p T:80,U:445 ip
探測N個最有可能開放的端口
nmap -sS -sU --top-port 100 ip 表示以TCP和UDP分別掃描最有可能開放的100個端口(TCP和UDP分別100個端口)
四、版本偵測
nmap提供的版本偵測具有如下的優點
1、高速。並行地進行套接字操作,實現一組高效的探測匹配定義語法。
2、盡可能地確定應用名字與版本名字。
3、支持TCP/UDP協議,支持文本格式與二進制格式。
4、支持多種平台服務的偵測,包括Linux/Windows/Mac OS/FreeBSD等系統。
5、如果檢測到SSL,會調用openSSL繼續偵測運行在SSL上的具體協議(如HTTPS/POP3S/IMAPS)。
6、如果檢測到SunRPC服務,那么會調用brute-force RPC grinder進一步確定RPC程序編號、名字、版本號。
7、支持完整的IPv6功能,包括TCP/UDP,基於TCP的SSL。
8、通用平台枚舉功能(CPE)
廣泛的應用程序數據庫(nmap-services-probes)。目前Nmap可以識別幾千種服務的簽名,包含了180多種不同的協議。
版本偵測用法
比如目標主機把SSH的22號端口改成了2222端口,那么如果使用普通掃描只會發現2222端口是開啟的,並不能知道2222號端口上運行的程序,通過加參數 -sV 進行版本掃描,可以探測到目標主機上2222端口運行的是SSH服務
命令:nmap -sV ip
五、OS偵測
具體實現方法
1、Nmap內部包含了2600多已知系統的指紋特征(在文件nmap-os-db文件中)。將此指紋數據庫作為進行指紋對比的樣本庫。
2、分別挑選一個open和closed的端口,向其發送經過精心設計的TCP/UDP/ICMP數據包,根據返回的數據包生成一份系統指紋。
3、將探測生成的指紋與nmap-os-db中指紋進行對比,查找匹配的系統。如果無法匹配,以概率形式列舉出可能的系統。
OS偵測用法
nmap -O ip
六、nmap高級用法
防火牆與IDS規避為用於繞開防火牆與IDS的檢測與屏蔽,以便能夠更加詳細地發現目標主機的狀況。nmap提供了多種規避技巧通常可以從兩個方面考慮規避方式:數據包的變換(Packet Change)和時序變換(Timing Change)
分片
將可疑的探測包進行分片處理(例如將TCP包拆分成多個IP包發送過去),某些簡單的防火牆為了加快處理速度可能不會進行重組檢查,以此避開其檢查
ip誘騙(IP decoys)
在進行掃描時,將真實IP地址在和其他主機的IP地址混合使用(其他主機需要在線,否則目標主機將回復大量數據包到不存在的數主機,從而實質構成了DOS攻擊),以此讓目標主機的防火牆或IDS追蹤大量的不同IP地址的數據包,降低其追查到自身的概率。但是,某些高級的IDS系統通過統計分析仍然可以追蹤出掃描者真實的IP地址
IP 偽裝
IP偽裝就是將自己發送的數據包中的IP地址偽裝成其他主機的地址,從而目標機認為是其他主機與之通信。需要注意的是,如果希望接收到目標主機的回復包,那么偽裝的IP需要位於統一局域網內。另外,如果既希望隱蔽自己的IP地址,又希望收到目標主機的回復包,那么可以嘗試使用idle scan 或匿名代理等網絡技術
指定端口
某些目標主機只允許來自特定端口的數據包通過防火牆。例如,FTP服務器的配置為允許源端口為21號的TCP包通過防火牆與FTP服務器通信,但是源端口為其他的數據包被屏蔽。所以,在此類情況下,可以指定數據包的源端口
掃描延遲
某些防火牆針對發送過於頻繁的數據包會進行嚴格的偵查,而且某些系統限制錯誤報文產生的頻率。所以,我們可以降低發包的頻率和發包延時以此降低目標主機的審查強度
其他技術
nmap還提供其他多種規避技巧,比如指定使用某個網絡接口來發送數據包、指定發送包的最小長度、指定發包的MTU、指定TTL、指定偽裝的MAC地址,使用錯誤檢查。
1 -f; --mtu <val>: 指定使用分片、指定數據包的 MTU. 2 -D <decoy1,decoy2[,ME],...>: 用一組 IP 地址掩蓋真實地址,其中 ME 填入自己的 IP 地址。 3 -S <IP_Address>: 偽裝成其他 IP 地址 4 -e <iface>: 使用特定的網絡接口 5 -g/--source-port <portnum>: 使用指定源端口 6 --data-length <num>: 填充隨機數據讓數據包長度達到 Num。 7 --ip-options <options>: 使用指定的 IP 選項來發送數據包。 8 --ttl <val>: 設置 time-to-live 時間。 9 --spoof-mac <mac address/prefix/vendor name>: 偽裝 MAC 地址 10 --badsum: 使用錯誤的 checksum 來發送數據包(正常情況下,該類數據包被拋棄,如果收到回復, 11 說明回復來自防火牆或IDS/IPS
實例
nmap -F -Pn -D 10.96.10.100,10.96.10.110,ME -e eth0 -g 5555 202.207.236.3
-F參數表示快速掃描100個端口,-Pn不進行ping掃描,-D表示使用ip誘騙方式掩飾真實ip,使用的是10.96.10.100和10.96.10.110,ME表示自己真實的ip,這里是10.96.10.234,-e 參數指定eth0網卡發送數據包,-g參數指定發送的端口號
參照原文:https://blog.csdn.net/qq_36119192/article/details/82079150