0x01 端口扫描介绍
端口扫描是指人为发送一组端口扫描消息,视图以此了解某台计算机的弱点,并了解其提供的计算机网络服务类型。
端口最常用也是最强大的工具是nmap,在nmap的端口扫描方式中,所有的扫描方式都是以-s[x]
的形式,若是ACK扫描则是-sA
,若是UDP扫描则是-sU
。
0x02 端口状态
nmap提供了6个端口状态,帮助我们了解目标。
open
此端口对外为开放状态
closed
此端口关闭,但是有可能是管理员的欺骗手段导致,或是防火墙所致
filtered
次扫描被过滤,不过出现这种现象并不代表一定是被某些专业的设备过滤了,也许是因为网络阻塞造成的,建议遇到这种情况分不同的时间段再次进行扫描
unfiltered
未被过滤状态意味着端口可以访问,但是nmap并不能判断目标端口处于开放状态还是关闭状态,这里需要重申的是目标端口是否可以访问与是否开放并无太大联系。需要注意的是,当我们使用ACK扫描时才会呈现出这种状态,这时我们可以换一种方式去进行扫描,以便进一步确认。
open|filtered
开放还是过滤的,如果nmap发出的探测报文并没有得到目标端口的响应,可能是收到了某些专业设备的阻挡,此时可以换一种方式进一步确认。
closed|filtered
该状态用于nmap不能确定端口是关闭的还是被过滤的。值得注意的是,它只可能出现在IPID Idle扫描中。
0x03 时序选项
在nmap中,可以使用-T(0-5)
启用时序选项。
-T0(偏执的) 非常慢的扫描,用于IDS逃避
-T1(鬼祟的) 缓慢的扫描,用于IDS逃避
-T2(文雅的) 减低速度以减低对宽带的消耗,此选项一般不常用
-T3(普通的) 默认,根据目标的反应自动调整时间
-T4(野蛮的) 快速扫描,常用扫描方式,需要在很好的网络环境下进行扫描,请求可能会淹没目标
-T5(疯狂的) 极速扫描,这种扫描方式以牺牲准确度来提升扫描速度
0x04 常用扫描方式
-p选项
指定一个端口,可以唯一指定一个,也可以指定一个范围
如果既想扫描TCP、又想扫描UDP,可以在端口前面加上T:
选项和U:
,分别代表TCP协议或UDP协议。注意必须指定-sU
以及一个TCP扫描类型(如-sS、-SF、-sT
)。如果没有给定协议限定符,端口号会被加到所有协议列表。
-F选项
快速扫描默认的有限的端口,在nmap中的nmap-services
包含了默认扫描的端口,也可以使用--daradir
选项指定自己的nmap-services
文件。
-r选项
使用该选项不会对端口进行随机顺序扫描,默认情况下,nmap是随机扫描端口的。
–port-ratio选项
使用该选项会扫描指定一定概率以上的端口。
0x05 TCP SYN扫描
nmap -sS [ip地址]
SYN的扫描方式相对来说是比较隐蔽的扫描方式,很难被防火墙或是管理员发现,因为它并不会进行TCP的链接,SYN扫描可以明确区分出端口的开放状态,这是一种高效且非常有用的扫描方式。
namp发送一个SYN请求,如果收到RST:目标主机端口关闭;收到SYN/ACK:目标主机端口开放
0x06 TCP链接扫描
nmap -sT [ip地址]
当SYN扫描可用时,它通常是更好的选择。
namp发送一个SYN请求,如果收到RST:目标主机端口关闭;收到SYN/ACK:目标主机端口开放
0x07 UDP扫描
nmap -sU -p [端口] [ip地址]
UDP扫描发送空的UDP扫描到目标端口,这里需要注意的是,UDP头是没有任何数据的,这就使nmap可以轻松识别目标端口的开放状态,如果返回ICMP端口不可达错误就认为该端口是关闭的;未收到回应就说明是被过滤的;被响应了则说明是开放状态。
0x08 隐蔽扫描
隐蔽扫描有三个选项:
- -sN Null扫描 如果目标端口是关闭的,会响应一个RST数据包;如果端口是开放的,则不会响应任何消息
- -sF FIN扫描 如果收到目标响应的RST数据包,说明端口是开放的;没有收到RST数据包则说明端口是关闭的
- -sX 如果目标端口开放则会响应一个RST标志包
这些扫描方式会躲过一些无状态防火墙的过滤,这比SYN扫描、UDP扫描会有更好的效果,更加隐蔽。
0x09 TCP ACK扫描
nmap -sA [ip地址]
TCP ACK扫描有一个致命的缺点,它不能确定端口是开放的还是被过滤的。当扫描未被过滤的系统时,开放的和关闭的都会返回RST报文。但是可以利用它来扫描防火墙的配置,用它来发现防火墙规则,确定它们是有状态的还是无状态的,哪些端口是被过滤的。
0x0A TCP窗口扫描
nmap -sW [ip地址]
有时开放端口用正数表示窗口大小,关闭窗口的大小为0,所以,当收到RST包时,根据窗口的值时正数还是0来判断端口是开放的还是关闭的。
0x0B 自定义TCP扫描
namp -sT --scanflags [标志位(多个标志位之间不用分隔符隔开)]
如:namp -sT --scanflags SYNURG [ip地址]
若不指定基本类型,则默认为SYN扫描
oxoC 空闲扫描
空闲扫描允许进行端口完全欺骗。利用僵尸主机进行伪装。
namp -sI [僵尸主机]:[端口] [目标主机ip]