環境說明
掃描者: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
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三次握手的過程:
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分數據包分析截圖:
從獲取的流量可以很容易看到,這種掃描的的方式是在三次握手的最后一步沒有回復正常的ACK,而是發送了RST
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從而知道被掃描端口是關閉的,數據包如下:
全連接掃描
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掃描。
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依然無法判斷。
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無法進行判斷