前言
网络扫描简单来讲就是发现并收集网络上活跃主机相关信息的过程,比如:操作系统类型、开启的端口号、服务和运行的应用。
1)网络协议基本原理
本节内容主要针对网络协议小白,请大神略过。
目前基本上所有的教材针对网络协议的介绍,都是使用ISO的OSI(Open Systems Interconnection)七层模型,如下图所示:
但是在实际的开发工作中,开发人员大多数使用的都是TCP的五层模型,OSI七层模型与TCP五层模型的对应关系如下图所示:
在实际的网络扫描过程中,协议类型和端口基本上是扫描工具必备的参数,网络协议模型中各层的协议类型如下图所示:
2)网络扫描技术
1.主机发现
网络扫描的第一步就是确定网络中活跃主机的数量及其相应的IP,这样就进一步精确的确定了对象。主机发现的方法主要有:
* ICMP ECHO Request 通过Ping命令发送ICMP类型为8的包,如果主机是活跃的,会回复一个ICMP类型为0的包。
* ICMP Timestamp 通过Ping命令发送ICMP类型为13的包,如果主机是活跃的,会回复一个ICMP类型为14的包。
*ICMP Address Mask Request 通过Ping命令发送ICMP类型为17的包,如果主机是活跃的,会回复一个ICMP类型为18的包。
*TCP Ping 通过Ping命令发送TCP SYN或TCP ACK的包,如果主机是活跃的,会对请求包进行回复,具体回复的内容取决于包的类型、主机的操作系统、防火墙策略等。
* UDP Ping 通过Ping命令向主机的UDP端口发送UDP包,如果主机是活跃的,但UDP端口是关闭的,会回复一个ICMP Port Unreachable包。由于UDP的无连接特性,如果主机不回复任何内容,主机和UDP端口也有可能是活跃的。
2.端口和服务扫描
网路扫描的第二步就是对活跃的主机,进行端口和服务扫描。端口和服务的活跃就意味着漏洞存在的可能性。端口和服务扫描的方法主要有:
* Connect scan 通过正常的TCP连接和主机建立连接,如果主机的TCP端口是活跃的而且没有被防护墙过滤,会回复一个SYN/ACK包,否则回复一个RST/ACK包。这种扫描方法由于是建立正常的连接,所以很容易被发现或记录。
* Half-open scan 故名思议,当主机回复第一个SYN/ACK包的时候,扫描器就认为端口是活跃的,所以就用一个RST包来结束此次连接,并不完成完整的三次握手。
*Stealth scan 通过发送报头带有各种标志的包,比如,SYN/ACK、FIN、ACK、NULL等,同时结合其他的规避技术来进行扫描。
3.操作系统发现
操作系统发现,也叫指纹识别,通过指纹来判断主机运行的系统类型。所谓的指纹,就是被扫描主机回复的一些特征信息,比如,TCP/IP栈、TCP窗口大小、TCP初始序列号等。指纹识别可以通过被动的方式,也可以通过主动的方式。
3)网络扫描工具
目前网络扫描工具种类比较多,商业和开源的都有,本节着重介绍几款比较流行的工具:
* Nmap 一款开源、跨平台的网络扫描工具,拥有丰富的第三方插件。
* Superscan 一款免费、适用于Windows平台的网络扫描工具。
* YAPS 全称是Yet Another Port Scanner,一款免费、适用于Windows平台的网络扫描工具。
*Angry IP Scanner 一款免费、跨平台的网络扫描工具。
*NEWT 一款同时具有商业和免费版本、适用于Windows平台的网络扫描工具。