TCP/UDP 扫描
TCP扫描
最简单的TCP端口扫描技术,通常称为连接扫描,依赖于三路TCP握手机制。
如果TCP三次握手成功,说明端口是打开的。
-w 选项指定以秒为单位的连接超时,并且-z 用于指定零I/O模式
kali@kali:~$ nc -nvv -w 1 -z 10.11.1.220 3388-3390
(UNKNOWN) [10.11.1.220] 3390 (?) : Connection refused
(UNKNOWN) [10.11.1.220] 3389 (?) open
(UNKNOWN) [10.11.1.220] 3388 (?) : Connection refused
sent 0, rcvd 0
UDP扫描
不需要三次握手也可以进行扫描,但是稳定性没有TCP高。
kali@kali:~$ nc -nv -u -z -w 1 10.11.1.115 160-162
(UNKNOWN) [10.11.1.115] 161 (snmp) open
UDP扫描可能会出现问题,原因有几个。
首先,UDP扫描通常不可靠,防火墙和路由器可能会丢弃ICMP数据包。这可能会导致误报和端口显示。 事实上,当它们关闭时,扫描结果会认为是开放的。
第二,许多端口扫描程序不会扫描所有可用端口,通常有一个预先设置的扫描“有趣端口”列表。这意味着打开UDP端口可能会被忽视。使用特定于协议的UDP端口扫描程序可能有助于获得更准确的数据。最后,渗透测试人员经常忘记扫描打开的UDP端口,而不是专注于“更令人兴奋”的TCP端口。
虽然UDP扫描可能不可靠,但存在大量攻击隐藏在开放UDP端口后面的向量。
Nmap
Nmap 我愿称之为诸神之眼,很多信息即使藏在肮脏至极的世界中,也逃不出他的法眼。
衡量我们的流量
iptables
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
默认的Nmap TCP扫描将扫描给定机器上1000个最常用的端口。在我们之前开始盲目运行扫描,让我们检查这种扫描发送的流量。
我们会扫描一台实验室机器,同时使用iptables。
我们将使用几个iptables选项。首先,我们将使用 -I选项在给定的链,在本例中包括输入(入站)和输出(出站)链
然后是规则编号。我们将使用 -s指定源IP地址,使用 -d指定源IP地址目标IP地址,和 -j以接受流量。最后,我们将使用 -Z选项将所有链中的数据包和字节计数器
使用展示
kali@kali:~$ sudo iptables -I INPUT 1 -s 10.11.1.220 -j ACCEPT
kali@kali:~$ sudo iptables -I OUTPUT 1 -d 10.11.1.220 -j ACCEPT
kali@kali:~$ sudo iptables -Z
kali@kali:~$ nmap -p 1-65535 10.11.1.220
Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-04 11:27 EST
Nmap scan report for 10.11.1.220
Host is up (0.00067s latency).
Not shown: 65507 closed ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
1291/tcp filtered seagulllms
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
3389/tcp open ms-wbt-server
5722/tcp open msdfsr
9389/tcp open adws
12777/tcp filtered unknown
46056/tcp filtered unknown
我们用 iptables分析一下我们有多少流量我们需要用来扫描
用参数 -v来输出更加详细的信息 -n规则输出 -L列出所有目前的链
kali@kali:~$ sudo iptables -vn -L
Chain INPUT (policy ACCEPT 1528 packets, 226K bytes)
pkts bytes target prot opt in out source destination
1263 51264 ACCEPT all -- * * 10.11.1.220 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 1323 packets, 191K bytes)
pkts bytes target prot opt in out source destination
1314 78300 ACCEPT all -- * * 0.0.0.0/0 10.11.1.220
我们可以看到 使用 默认的1000个端口TCP扫描 只需要 78kb流量
但是我们 扫描全端口(1-65535) 我们需要 4MB 流量
kali@kali:~$ sudo iptables -vn -L
Chain INPUT (policy ACCEPT 219K packets, 252M bytes)
pkts bytes target prot opt in out source destination
66243 2659K ACCEPT all -- * * 10.11.1.220 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 85792 packets, 11M bytes)
pkts bytes target prot opt in out source destination
66768 4006K ACCEPT all -- * * 0.0.0.0/0 10.11.1.220
大约算了一下 如果需要扫描一个网段(254个主机) 大致需要1000MB的流量
SYN扫描
Nmap首选的扫描技术是SYN或“隐形”扫描
SYN扫描是一种TCP端口扫描方法,包括将SYN数据包发送到各个端口 在目标机器上,而不完成TCP握手。如果TCP端口打开,则应发送SYN-ACK 从目标机器返回,通知我们端口已打开。
kali@kali:~$ sudo nmap -sS 10.11.1.220
Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-04 11:27 EST
Nmap scan report for 10.11.1.220
Host is up (1.3s latency).
Not shown: 980 closed ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
由于三方握手永远不会完成,因此信息不会传递到应用程序层,因此不会出现在任何应用程序日志中。由于发送和接收的数据包更少,SYN扫描也更快、更有效。
TCP扫描
当运行nmap的用户没有原始套接字权限时,nmap将默认使用前面描述的TCP连接扫描技术( 一般SYN扫描需要root权限)
我们会使用 -sT 参数来完成 TCP扫描
kali@kali:~$ nmap -sT 10.11.1.220
Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-04 11:37 EST
Nmap scan report for 10.11.1.220
Host is up (1.3s latency).
Not shown: 980 closed ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
UDP扫描
UDP扫描(-sU)还可以与TCP SYN扫描(-sS)选项结合使用,以构建更全面地了解我们的目标:
## UDP
kali@kali:~$ sudo nmap -sU 10.11.1.115
# UDP && SYN
kali@kali:~$ sudo nmap -sS -sU 10.11.1.115
网络探测技术
为了处理大量的主机,或者为了节省网络流量,我们可以尝试使用网络扫描技术探测目标,我们从大范围扫描开始,并使用针对感兴趣的主机进行更具体的扫描。
kali@kali:~$ nmap -sn 10.11.1.1-254
kali@kali:~$ nmap -v -sn 10.11.1.1-254 -oG ping-sweep.txt # 把输出结果存在 txt文件中
kali@kali:~$ grep Up ping-sweep.txt | cut -d " " -f 2
我们还可以在网络上搜索特定的TCP或UDP端口,探测公共服务和端口,试图定位可能有用的系统,或者存在已知漏洞的系统。这种扫描往往比平扫更准确。
kali@kali:~$ nmap -p 80 10.11.1.1-254 -oG web-sweep.txt
kali@kali:~$ nmap -sT -A --top-ports=20 10.11.1.1-254 -oG top-port-sweep.txt
为了节省时间和网络资源,我们还可以扫描多个IP,搜索常见端口的简短列表。
操作系统指纹
Nmap有一个名为OS指纹的内置功能,可以通过-O选项启用。
kali@kali:~$ sudo nmap -O 10.11.1.220
...
Device type: general purpose
Running: Microsoft Windows 2008|7
OS CPE: cpe:/o:microsoft:windows_server_2008:r2 cpe:/o:microsoft:windows_7
[*] OS details: Microsoft Windows 7 or Windows Server 2008 R2
Network Distance: 1 hop
...
操作系统指纹识别不是100%正确,但是是一个不错的尝试。
Banner抓取,服务枚举
我们还可以通过检查服务横幅(-sV)并针对目标运行各种操作系统和服务枚举脚本(–A),来识别在特定端口上运行的服务
kali@kali:~$ nmap -sV -sT -A 10.11.1.220
Nmap 脚本引擎
我们可以使用Nmap脚本引擎(NSE)启动用户创建的脚本,以便自动化各种扫描任务。
NSE的脚本在 /usr/share/nmap/scripts这个文件夹里
举个例子 我们使用 smb-os-discovery脚本 去连接SMB服务
kali@kali:~$ nmap 10.11.1.220 --script=smb-os-discovery
另一个很有用的 NSE脚本是 dns-zone-transfer
kali@kali:~$ nmap --script=dns-zone-transfer -p 53 ns2.megacorpone.com
Masscan
号称全世界最快的端口扫描器,他能在六分钟左右扫描整一个网络,每秒传输惊人1000万数据包。
# 先安装一下这个工具
sudo apt install masscan
考虑这个演示,用TCP端口80来定位大型内部网络上的所有机器。打开(使用-p80选项)。由于masscan实现了自定义TCP/IP堆栈,因此需要访问原始套接字,因此需要sudo。
要在PWK内部实验室网络的C类子网上尝试masscan,我们可以使用以下方法实例我们将添加一些额外的masscan选项,包括--rate以指定所需的数据包传输速率,-e指定要使用的原始网络接口,以及--ip路由器指定相应网关的IP地址:
kali@kali:~$ sudo masscan -p80 10.11.1.0/24 --rate=1000 -e tap0 --router-ip 10.11.0.1
补充 子网掩码
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)