端口扫描技术
1. tcp connect 扫描
发起nmap扫描
nmap -sT -P0 xxx.xxx.xxx.xxx
开放端口示例
python print_pcap.py --pcapfile=da
ta/tcpconnect.pcap --assetip=xxx.xxx.xxx.xxx --assetport=80
[TCP] [1500226472.88 2017-07-16 17:34:32] 10.0.0.7:50335(98:01:a7:9e:dd:c1) ----->xxx.xxx.xxx.xxx:80(e0:46:9a:62:69:7c) SEQ=3955688181 ACK=0 FLAGS=['SYN'] WIN=65535 DATA= ttl=255 DATA_BINARY= LEN=0
[TCP] [1500226473.16 2017-07-16 17:34:33] xxx.xxx.xxx.xxx:80(e0:46:9a:62:69:7c) ----->10.0.0.7:50335(98:01:a7:9e:dd:c1) SEQ=2321344633 ACK=3955688182 FLAGS=['ACK', 'SYN'] WIN=14480 DATA= ttl=49 DATA_BINARY= LEN=0
[TCP] [1500226473.16 2017-07-16 17:34:33] 10.0.0.7:50335(98:01:a7:9e:dd:c1) ----->xxx.xxx.xxx.xxx:80(e0:46:9a:62:69:7c) SEQ=3955688182 ACK=2321344634 FLAGS=['ACK'] WIN=4120 DATA= ttl=255 DATA_BINARY= LEN=0
[TCP] [1500226473.16 2017-07-16 17:34:33] 10.0.0.7:50335(98:01:a7:9e:dd:c1) ----->xxx.xxx.xxx.xxx:80(e0:46:9a:62:69:7c) SEQ=3955688182 ACK=2321344634 FLAGS=['ACK', 'RST'] WIN=4120 DATA= ttl=255 DATA_BINARY= LEN=0
关闭端口示例
python print_pcap.py --pcapfile=da
ta/pcap_private/portscan/tcpconnect.pcap --assetip=xxx.xxx.xxx.xxx --assetport=21
[TCP] [1500226472.89 2017-07-16 17:34:32] 10.0.0.7:50342(98:01:a7:9e:dd:c1) ----->xxx.xxx.xxx.xxx:21(e0:46:9a:62:69:7c) SEQ=1007191068 ACK=0 FLAGS=['SYN'] WIN=65535 DATA= ttl=255 DATA_BINARY= LEN=0
[TCP] [1500226473.17 2017-07-16 17:34:33] xxx.xxx.xxx.xxx:21(e0:46:9a:62:69:7c) ----->10.0.0.7:50342(98:01:a7:9e:dd:c1) SEQ=0 ACK=1007191069 FLAGS=['ACK', 'RST'] WIN=0 DATA= ttl=49 DATA_BINARY= LEN=0
原理:tcp connect扫描通过完成tcp三次握手来判断端口是否开放。若端口开放,服务端响应客户端ack+syn包;若端口关闭,服务端响应客户端ack+rst
2.tcp syn扫描
发起nmap扫描
sudo nmap -sS -P0 xxx.xxx.xxx.xxx
python print_pcap.py --pcapfile=da
ta/pcap_private/portscan/tcpsyn.pcap --assetip=xxx.xxx.xxx.xxx --assetport=80
[TCP] [1500227733.66 2017-07-16 17:55:33] 10.0.0.7:56684(98:01:a7:9e:dd:c1) ----->xxx.xxx.xxx.xxx:80(e0:46:9a:62:69:7c) SEQ=2674946894 ACK=0 FLAGS=['SYN'] WIN=1024 DATA= ttl=52 DATA_BINARY= LEN=0
[TCP] [1500227733.95 2017-07-16 17:55:33] xxx.xxx.xxx.xxx:80(e0:46:9a:62:69:7c) ----->10.0.0.7:56684(98:01:a7:9e:dd:c1) SEQ=355536423 ACK=2674946895 FLAGS=['ACK', 'SYN'] WIN=14600 DATA= ttl=49 DATA_BINARY= LEN=0
[TCP] [1500227733.95 2017-07-16 17:55:33] 10.0.0.7:56684(98:01:a7:9e:dd:c1) ----->xxx.xxx.xxx.xxx:80(e0:46:9a:62:69:7c) SEQ=2674946895 ACK=0 FLAGS=['RST'] WIN=0 DATA= ttl=64 DATA_BINARY= LEN=0
关闭端口示例
python print_pcap.py --pcapfile=da
ta/pcap_private/portscan/tcpsyn.pcap --assetip=xxx.xxx.xxx.xxx --assetport=21
[TCP] [1500227732.97 2017-07-16 17:55:32] 10.0.0.7:56684(98:01:a7:9e:dd:c1) ----->xxx.xxx.xxx.xxx:21(e0:46:9a:62:69:7c) SEQ=2674946894 ACK=0 FLAGS=['SYN'] WIN=1024 DATA= ttl=48 DATA_BINARY= LEN=0
[TCP] [1500227733.64 2017-07-16 17:55:33] xxx.xxx.xxx.xxx:21(e0:46:9a:62:69:7c) ----->10.0.0.7:56684(98:01:a7:9e:dd:c1) SEQ=0 ACK=2674946895 FLAGS=['ACK', 'RST'] WIN=0 DATA= ttl=49 DATA_BINARY= LEN=0
tcp syn扫描可以伪造扫描发起者的源ip与源端口,例如伪造扫描发起者的源ip为1.2.3.4,源端口为80
sudo nmap --source-port 80 -D 1.2.3.4 -sS -P0 xxx.xxx.xxx.xxx
3.tcp udp扫描
sudo nmap -sU -P0 209.141.37.81
开放端口示例
python print_pcap.py --pcapfile=data/pcap_private/portscan/udp.pcap --assetport=500
[UDP] [1500285744.54 2017-07-17 10:02:24] 172.18.24.97:63816(98:01:a7:9e:dd:c1) ----->xxx.xxx.xxx.xxx:500(58:f3:9c:51:83:c7) ttl=53 DATA_BINARY=00 11 22 33 44 55 66 77 00 00 00 00 00 00 00 00 01 10 02 00 00 00 00 00 00 00 00 c0 00 00 00 a4 00 00 00 01 00 00 00 01 00 00 00 98 01 01 00 04 03 00 00 24 01 01 00 00 80 01 00 05 80 02 00 02 80 03 00 01 80 04 00 02 80 0b 00 01 00 0c 00 04 00 00 00 01 03 00 00 24 02 01 00 00 80 01 00 05 80 02 00 01 80 03 00 01 80 04 00 02 80 0b 00 01 00 0c 00 04 00 00 00 01 03 00 00 24 03 01 00 00 80 01 00 01 80 02 00 02 80 03 00 01 80 04 00 02 80 0b 00 01 00 0c 00 04 00 00 00 01 00 00 00 24 04 01 00 00 80 01 00 01 80 02 00 01 80 03 00 01 80 04 00 02 80 0b 00 01 00 0c 00 04 00 00 00 01 LEN=192
[UDP] [1500285744.7 2017-07-17 10:02:24] xxx.xxx.xxx.xxx:500(58:f3:9c:51:83:c7) ----->172.18.24.97:63816(98:01:a7:9e:dd:c1) ttl=43 DATA_BINARY=00 11 22 33 44 55 66 77 71 db bb 63 e8 d1 a9 86 01 10 02 00 00 00 00 00 00 00 00 70 0d 00 00 34 00 00 00 01 00 00 00 01 00 00 00 28 01 01 00 01 00 00 00 20 01 01 00 00 80 01 00 05 80 02 00 02 80 04 00 02 80 03 00 01 80 0b 00 01 80 0c 00 01 0d 00 00 0c 09 00 26 89 df d6 b7 12 00 00 00 14 af ca d7 13 68 a1 f1 c9 6b 86 96 fc 77 57 01 00 LEN=112
关闭端口示例
python print_pcap.py --pcapfile=data/pcap_private/portscan/udp.pcap --assetport=53
[UDP] [1500286158.82 2017-07-17 10:09:18] 172.18.24.97:63816(98:01:a7:9e:dd:c1) ----->xxx.xxx.xxx.xxx:53(58:f3:9c:51:83:c7) ttl=49 DATA_BINARY=00 00 10 00 00 00 00 00 00 00 00 00 LEN=12
nmap在进行udp扫描的时候会从nmap-probes中读取udp payload数据包,可以看到与上面标红的 DATA_BINARY相同

