信息收集--IP扫描 (下篇)

       这些内容都是个人从网络和书籍中学习整合而来,参杂了一些个人理解在里面,可看作是个人学习笔记,适合对网络安全感兴趣,想对原理概念能系统了解到人,属基础内容。对其中的不足或错误之处还望告知交流heyihome.blog.51cto.com

 

       2、端口扫描原理

       端口扫描原理是通过TCP/UDP协议来连接到对端端口,从而发现识别端口开放程度。扫描原理上通常有以下几种方式。

       正常扫描方式

       1TCP连接扫描:也称全连接扫描,原理为通过tcp协议的三次握手来同对端建立连接,如连接建立成功则说明端口是开放的。优点是可靠,缺点是由于建立了连接容易被对端记录。过程如下

                 --------SYN ----------> 

                 <------SYN/ACK----- 

                 -------ACK ----------> 

       扫描命令: nmap –sT <ip>

 

       2TCP SYN扫描:也称半连接扫描,原理是在发送SYN后如果端口开放,对端返回synack后发送RST来打断连接。如端口关闭,对端将返回RST,就能知道端口为关闭了。优点为比较隐秘,缺点为打开的半连接过多,容易被判断为syn flood而报警。

过程如下

                 --------SYN ----------> 

                 <------SYN/ACK----- 

                 -------RST -----------> 

       扫描命令: nmap –sS <IP>

 

       隐秘扫描:通常SYN这类请求容易被防火墙IDS等察觉,但通过在TCP数据包中设一些不常用的协议标志或其他特征来进行扫描,好处是不容易被记录发现,缺点是依赖主机对协议实现情况,端口发现不一定可靠。(通常unix系统实现的较好,而windows系统并不遵守,所以不适用windows系统)

       (1)TCP FIN扫描:这类一般只对unix类系统有效,通过像对端端口发送fin请求,如对端端口关闭将返回一个RST

       扫描命令: nmap –sF <ip>

 

       (2)TCP圣诞xmas树扫描:发送FINURGPUSH数据包,如对端口关闭,目标系统返回RST数据包

       扫描命令: nmap –sX <ip>

 

       (3)TCP NULL扫描:这类扫描时不设置任何TCP标记,端口关闭的话返回RST数据包

       扫描命令: nmap –sN <IP>

 

       (4)TCP ACK扫描:通过设置ACK后对返回的RST头信息进行分析来获取数据。适用BSD系统

       扫描命令: nmap –sA <IP>

 

       (5)TCP WINDOW扫描:通过返回不同的tcp window来判断端口开放程度。只适用AIXBSD系统

       扫描命令: nmap –sW <IP>

 

       (6)TCP RPC扫描:用途发现UNIX上的RPC端口和识别关联应用程序和版本,只适用UNIX系统。扫描时向端口发送sunrpc null命令来判断是否为rpc端口,通常还能获得一些软件和版本信息。

       扫描命令: nmap –sR <IP>

 

       (7)UDP扫描:向端口发送UDP数据包,如返回ICMP port unreachable消息,说明端口关闭,如无信息返回说明端口开放。需要注意到是unix类系统中通常对icmp不可达信息做了限制,例如linux系统4秒内只允许80条,solaris每秒2条,扫描效率会很低,但windows未做限制,所以可以对windows系统快速扫描。

       扫描命令: nmap –sU <ip>

 

需要特别注意到一点,IP协议的某实现缺陷会导致所有被扫描端口返回RST数据包,即便是开放的。因此扫描结果不一定与实际情况一致,但通常连接扫描和SYN扫描适用性较好。

 

       欺骗扫描:利用第三方存在漏洞的服务器作为跳板扫描,好处是如这个系统是被防火墙信任,能获取到更多的信息。

       1FTP 跳板扫描:有些FTP服务器在PORT命令处理时存在漏洞,利用此漏洞来进行扫描。但这个基本只存在早期系统,现在应该很少能遇到了。

       扫描命令: nmap –b username:password@server:port

 

       2IP ID头扫描:这类扫描需要利用到僵尸主机,优点很隐蔽。

扫描命令: Nmap 选项 –sI <zombie host[:probe port]>

扫描过程:

1、  ***者持续向僵尸主机发送探测包

2、  ***者同时像目标主机发送SYN,源地址伪造成僵尸主机,如端口开放目标主机向僵尸主机发送SYN/ACK会影响到僵尸主机的ID字段

3、  通过僵尸主机返回数据包的ID字段分析来猜测目标主机端口是否开放。

 

 

 

三、其他扫描工具

       hping2 :允许设定tcp/udpraw ip数据包里的某特定选项,从而使得hping2可以穿透一些网络访问控制设备。例如 hping ip –s –p 80 –f 为分片扫描。-cN 可以发送N个数据包后结束扫描,使得hping2方便的在脚本中使用。

 

       icmpenum :特点类似superscan,除可发出正常echo数据包外还可以发送其他类型icmp数据包。还可以用-s命令来伪造一个虚假源地址,-p 使用被动方式监听从目标网络返回的响应。

 

       icmpquery :可以查询对端主机时间和子网掩码。例如:icmpquery –t ip 为查询时间,icmpquery –m ip 为查询子网掩码。

 

       loki2 :严格来说并非icmp扫描工具,而是可以将恶意数据打包到icmp echo中。

 

四、防范方法

       1、使用idsfw等来监视ping扫描活动。

 

       2、在边界网络对icmp数据包进行过滤,只允许特定icmp数据包访问特定服务器。通常来说需要用到icmp一般是内网管理用,那么就应该在边界过滤掉外部网络的icmp访问。或在不影响应用的情况下完全禁止icmp

 

五、参考文档

http://wenku.baidu.com/view/28714cfff705cc17552709a5.html 可参考文库这篇nmap详解,里面对各种类型扫描有比较详细说明。

 

                                                                             By Jason h3

                                                                             Mail:jasonh3@126.com

                                                                             Ver:1.1

                                                                             2011-2-9