第三章 网络安全扫描编程
第四节 高级TCP扫描技术
3.4.1 SYN扫描
TCP SYN扫描是一个半开放扫描形式,它利用了TCP 三次握手中的一个步骤,也就是传送SYN标志这个步骤,其他的后续步骤没有发生。而SYN标志在TCP协议中表示发起一个新的连接,但如果只是发送了一个SYN标志,后续的三次握手过程没有,那么目标主机会怎么响应呢?
图3-13 TCP连接扫描
不同的端口状态会返回不同的响应数据包,如果是开放的端口,那么会返回一个含有SYN+ACK标志的TCP报文,如果端口是关闭的,那么会反馈一个含有RST标志的报文。
TCP SYN扫描就是利用这个机理来实现端口扫描,其扫描过程如图3-14所示。
图3-14 TCP SYN扫描过程
主机A扫描主机B,构造一个带有ACK标志的TCP数据包发送给主机B的一个端口,如果对方返回一个带有SYN和ACK的TCP数据包,那么就表示端口是开放的,如果返回一个带有RST的TCP数据包,那么就表示端口关闭。
3.4.2 ACK扫描
TCP ACK扫描是利用标志位ACK,而ACK标志在TCP协议中表示确认序号有效,它表示确认一个正常的TCP连接。但是在TCP ACK扫描中没有进行正常的TCP连接过程,实际上是没有真正的TCP连接。那么当发送一个带有ACK标志的TCP报文到目标主机的端口时,目标主机会怎样反应呢?
使用TCP ACK扫描不能够确定端口的关闭或者开放,因为当发送给对方一个含有ACK表示的TCP报文的时候,都返回含有RST标志的报文,无论端口是开放或者关闭。所以,不能使用TCP ACK扫描来确定端口是否开放或者关闭。但是可以利用它来扫描防火墙的配置,用它来发现防火墙规则,确定它们是有状态的还是无状态的,哪些端口是被过滤的。
3.4.3 FIN扫描
TCP FIN扫描使用的是FIN标志,如果发送一个FIN标志的TCP报文到一个关闭的端口,那么应该返回一个RST报文,如果发送到一个开放的端口,那么应该没有任何反应。如果收到ICMP端口不可达错误数据包,则不能确认是否开放或者关闭,把它称为状态未知端口。