Nmap常見掃描方式流量分析


環境說明

掃描者:manjaro linux , IP地址:192.168.31.160

被掃描者:centos 7,IP地址:192.168.31.175

分析工具:wireshark

nmap 版本:version 7.80

TCP 知識回顧

這里對TCP的三次握手知識進行簡單的回顧,方便后面理解Nmap的掃描流量

關於TCP協議相關內容看:http://networksorcery.com/enp/default.htm

tcp_header.png

Source Port:源端口

Destination Port:目的端口

Sequence Number:序列號。

Acknowledgment Number:確認號

Control Bits: 包含一下幾種(這幾個字段這里要有印象,后續關於nmap的掃描都和這里會有關系):

字段 含義
URG 緊急指針是否有效。如果設置1,用於通知接收數據方在處理所有數據包之前處理緊急數據包
ACK 確認號是否有效。用於確認主機成功接收數據包。如果Acknowledgment Number包含有效的確認號碼,則設置ACK標志為。例如tcp三次握手的第二步,發送ACK=1和SYN=1 ,就是告知對方它已經收到初始包
PSH 強制將數據壓入緩沖區
RST 連接重置
SYN 表示建立連接
FIN 表示關閉連接

下圖是TCP三次握手的過程:

tcp.png

SYN 掃描

Nmap 的默認掃描方式就是SYN掃描,在192.168.31.160 執行如下命令進行掃描:

➜ sudo nmap -p22 192.168.31.175
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-04 11:45 CST
Nmap scan report for 192.168.31.175
Host is up (0.00044s latency).

PORT   STATE SERVICE
22/tcp open  ssh
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.38 seconds

192.168.31.175 進行tcpdump 命令進行抓包:tcpdump -i any -w syn_scan.pcap, 下面是通過wireshare分數據包分析截圖:

syn.png

從獲取的流量可以很容易看到,這種掃描的的方式是在三次握手的最后一步沒有回復正常的ACK,而是發送了RST

syn_2.png

nmap 利用客戶端回SYN,ACK 的這個數據包其實就已經知道22這個端口是開放的,如果我們掃描一個沒有開放的端口:

➜  sudo nmap -p80 192.168.31.175 
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:08 CST
Nmap scan report for 192.168.31.175
Host is up (0.00034s latency).

PORT   STATE  SERVICE
80/tcp closed http
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds

同樣我們看一下在192.168.31.175 上抓的數據包的情況,被掃描主機直接恢復RST,ACK斷開連接,namp從而知道被掃描端口是關閉的,數據包如下:

syn_rst.png

全連接掃描

nmap也可以進行全連接掃描,也就是完成完整的三次握手,當然這種掃描方式的效率是不如SYN掃描的

nmap -sT -p端口 目標主機

NULL掃描

是將一個沒有設置任何標志位的數據包發送給TCP端口,在正常的通信中至少要設置一個標志位。

根據FRC 793的要求,在端口關閉的情況下,若收到一個沒有設置標志位的數據字段,那么主機應該舍棄這個分段,並發送一個RST數據包,否則不會響應發起掃描的客戶端計算機。

也就是說,如果TCP端口處於關閉則響應一個RST數據包,若處於開放則無相應。但是應該知道理由NULL掃描要求所有的主機都符合RFC 793規定,但是windows系統主機不遵從RFC 793標准,且只要收到沒有設置任何標志位的數據包時,不管端口是處於開放還是關閉都響應一個RST數據包。但是基於Unix(nix,如Linux)遵從RFC 793標准,所以可以用NULL掃描。 經過上面的分析,我們知道NULL可以辨別某台主機運行的操作系統是什么操作系統,是為windows呢?還是unix/linux?

NULL的掃描命令參數:nmap -sN

➜  sudo nmap -sN -p22 192.168.31.175  
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:30 CST
Nmap scan report for 192.168.31.175
Host is up (0.00022s latency).

PORT   STATE         SERVICE
22/tcp open|filtered ssh
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.67 seconds
➜ sudo nmap -sN -p999 192.168.31.175
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:30 CST
Nmap scan report for 192.168.31.175
Host is up (0.00042s latency).

PORT    STATE  SERVICE
999/tcp closed garcon
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds
➜  share scp root@192.168.31.175:/root/null.pcap ./     
root@192.168.31.175's password: 
null.pcap                             100% 5188    10.4MB/s   00:00 

​ 分別掃描了一個開放的端口22 和未開放的端口999,下面的數據包中,可以看到,發送的第一個TCP包中Control Bits的所有Flags都沒有設置,而開發的22端口沒有收到任何回復,而關閉的端口,收到了一個RST數據包,nmap也是通過這種方式來判斷端口是否開放。當然這種判斷對於windows是不准確的了。

​ null的掃描流量特征還是非常明顯的,很容易通過流量分析知道正在被進行null掃描。

null.png

FIN掃描

FIN 原理:

與NULL有點類似,只是FIN為指示TCP會話結束,在FIN掃描中一個設置了FIN位的數據包被發送后,若響應RST數據包,則表示端口關閉,沒有響應則表示開放。此類掃描同樣不能准確判斷windows系統上端口開放情況。

FIN掃描命令參數:nmap -sF

➜ sudo nmap -sF -p22 192.168.31.175       
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:46 CST
Nmap scan report for 192.168.31.175
Host is up (0.00014s latency).

PORT   STATE         SERVICE
22/tcp open|filtered ssh
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.61 seconds
➜ sudo nmap -sF -p999 192.168.31.175
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:46 CST
Nmap scan report for 192.168.31.175
Host is up (0.00028s latency).

PORT    STATE  SERVICE
999/tcp closed garcon
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.36 seconds

對比null掃描,就可以看出來,FIN掃描是發送一個設置FIN的數據包,同樣的如果是linux系統,收到這個如果沒有收到RST則認為端口是開放的,收到RST則表示端口沒有開發,windows依然無法判斷。

FIN.png

XMAS-TREE掃描

掃描原理:

XMAS掃描原理和NULL掃描的類似,將TCP數據包中的URG、PSH、FIN標志位置1后發送給目標主機。在目標端口開放的情況下,目標主機將不返回任何信息

和NULL掃描正好相反,XMAS掃描會把所有的標志為都設置

XMAS-TREE掃描命令參數:nmap -sX

➜ sudo nmap -sX -p22 192.168.31.175
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:53 CST
Nmap scan report for 192.168.31.175
Host is up (0.00028s latency).

PORT   STATE         SERVICE
22/tcp open|filtered ssh
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.55 seconds
➜ sudo nmap -sX -p999 192.168.31.175
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:54 CST
Nmap scan report for 192.168.31.175
Host is up (0.00021s latency).

PORT    STATE  SERVICE
999/tcp closed garcon
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds

還是掃描開放的22端口和未開放的999端口,可以看到Xmas掃描會發送一個FIN,PSH,URG被設置的數據包,同樣如果是linux系統可以根據是否收到RST包進行判斷端口是否開放,windows無法進行判斷

xmas.png

延伸閱讀


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM