端口扫描原理和划分

十类主流TCP扫描

端口扫描技术分类:

这里都不考虑防火墙的情况。

1. 完全连接扫描
完全连接,利用TCP/IP协议的三次握手连接机制,使源主机和目的主机的某个端口建立一次完整的连接,如果建立成功,则表明该端口开放。否则表明该端口关闭。

2. 半连接扫描
半连接扫描是指在源主机和目标主机的三次握手连接过程中,只完成前两次握手,不建立异常完整的连接。

3. SYN扫描
首先向目标主机发送连接请求,当目标主机返回响应后,立即切断连接过程,并查看响应情况。

如果目标主机返回ACK信息,表示目标主机的该端口开发。如果目标主机返回RESET信息,表示该端口没有开放。

4. ID头信息扫描
首先知道一个概念,dumb主机:不太活跃的主机,类似于这个服务器上没有什么服务,被别人空置的主机。

首先由源主机A向dumb主机B发出连续的ping包,并查看数据包的ID头信息。每个顺序数据包的ID头会增加1。然后由源主机A假冒主机B的地址向目标的主机C的任意端口(1-65535)发送SYN数据包,这时,主机C向主机B发送的数据包有两种可能结果:

SYN | ACK表示改端口处于监听状态;

RST | ACK表示改端口处于非监听状态;

由后续ping包的响应信息的ID头信息可以看出,如果主机C的某个端口是开放的,则主机B返回A的数据包中,ID头的值不是递增1。如果主机C的端口是非开放的,则主机B返回A的数据包中,ID头的值递增1,非常规律。

5. 隐蔽扫描
隐蔽扫描是指能够成功的绕过IDS(intrusion detection system入侵检测系统)、防火墙和监视系统等安全机制,取得目标主机端口信息的一种扫描方式。

6. SYN | ACK扫描
由源主机向目标主机的某个端口直接发送SYN | ACK数据包,而不是先发SYN数据包。由于这种方式不发送SYN数据包,目标主机会认证这是一次错误的连接,从而会报错。

如果目标主机的该端口没有开放,则会发送RST信息。如果目标主机的该端口处于开放状态(listening),则不会返回任何信息,而是直接将这个数据包抛弃。

7. FIN扫描
源主机A向目标主机B发送FIN数据包,然后查看反馈信息,如果端口返回RESET(RST)信息,则说明该端口关闭。如果端口没有返回然后信息,则说明该端口开放。

8. ACK扫描
由主机A向目标主机B发送FIN数据包,查看反馈数据包的TTL值和WIN值。开放端口所返回的数据包的TTL值小于64,关闭端口的返回值大于64。开放端口的返回值大于64.开放端口返回的WIN值大于0,关闭端口的返回值一般等于0。

9. NULL扫描
将源主机发送的数据包中的ACK、FIN、RST、SYN、URG、PSH等标志位全部置空。如果目标主机没有返回任何信息,则表明该端口是开放的。如果返回RST信息,则表明该端口是关闭的。

10. XMAS扫描
XMAS扫描的原理和NULL相同,只是将要发送的数据包中的ACK、FIN、RST、SYN、URG、PSH等标志位全部设置为1。如果目标主机没有返回任何信息,则表明该端口是开放的,如果返回RST信息,则表明该端口关闭。
 

1.开放扫描

其中***代表性的就是TCP连接扫描,需要扫描方通过三次握手过程与目标主机建立完整的TCP连接,可靠性高,但是在扫描的过程中会产生大量审计数据。这种扫描在有些场合是非常有用的,它可以作为正常扫描行为,直接由网络管理员使用。

2.半开放扫描

开放扫描时需要TCP进行一个正常的连接,而半开放扫描不需要正常的连接,只是一个部分行为。扫描的时候只是利用TCP正常连接的某一个部分来完成操作。常见的半开放扫描方法有TCP SYN扫描、TCP ACK扫描等。

3.隐秘扫描

在半开放扫描中还包括了TCP连接的某一部分行为,但是在隐秘扫描中,根本不包括任何TCP三次握手协议的任何部分。其隐蔽性好,但这种扫描使用的数据包在通过网络时容易被丢弃从而产生错误的探测信息,效果不是很好。这种扫描方法有TCP FIN扫描、TCP XMAS扫描、NULL扫描和UDP扫描等。

秘密扫描

秘密扫描是一种不被审计工具所检测的扫描技术。

它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己。

秘密扫描能躲避IDS、防火墙、包过滤器和日志审计,从而获取目标端口的开放或关闭的信息。由于没有包含TCP 3次握手协议的任何部分,所以无法被记录下来,比半连接扫描更为隐蔽。

但是这种扫描的缺点是扫描结果的不可靠性会增加,而且扫描主机也需要自己构造IP包。现有的秘密扫描有TCP FIN扫描、TCP ACK扫描、NULL扫描、XMAS扫描和SYN/ACK扫描等。 

1、Connect()扫描

     此扫描试图与每一个TCP端口进行“三次握手”通信。如果能够成功建立接连,则证明端口开发,否则为关闭。准确度很高,但是最容易被防火墙和IDS检测到,并且在目标主机的日志中会记录大量的连接请求以及错误信息。

TCP connect端口扫描服务端与客户端建立连接成功(目标端口开放)的过程: 

① Client端发送SYN;

② Server端返回SYN/ACK,表明端口开放;

③ Client端返回ACK,表明连接已建立;

④ Client端主动断开连接。

建立连接成功(目标端口开放)如图所示

wKioL1YafjLiQpBuAACLZ02QoEo291.jpg

TCP connect端口扫描服务端与客户端未建立连接成功(目标端口关闭)过程: 

① Client端发送SYN;

② Server端返回RST/ACK,表明端口未开放。

未建立连接成功(目标端口关闭)

优点:实现简单对操作者的权限没有严格要求(有些类型的端口扫描需要操作者具有root权限),系统中的任何用户都有权力使用这个调用,而且如果想要得到从目标端口返回banners信息,也只能采用这一方法。

另一优点是扫描速度快。如果对每个目标端口以线性的方式,使用单独的connect()调用,可以通过同时打开多个套接字,从而加速扫描。

缺点:是会在目标主机的日志记录中留下痕迹,易被发现,并且数据包会被过滤掉。目标主机的logs文件会显示一连串的连接和连接出错的服务信息,并且能很快地使它关闭。

2、SYN扫描

      扫描器向目标主机的一个端口发送请求连接的SYN包,扫描器在收到SYN/ACK后,不是发送的ACK应答而是发送RST包请求断开连接。这样,三次握手就没有完成,无法建立正常的TCP连接,因此,这次扫描就不会被记录到系统日志中。这种扫描技术一般不会在目标主机上留下扫描痕迹。但是,这种扫描需要有root权限。

wKioL1Yaf4SgDTt5AADqFyymSAQ708.jpg

端口开放:1、Client发送SYN  2、Server端发送SYN/ACK 3、Client发送RST断开(只需要前两步就可以判断端口开放)

端口关闭:1、Client发送SYN  2、Server端回复RST(表示端口关闭)

优点:SYN扫描要比TCP Connect()扫描隐蔽一些,SYN仅仅需要发送初始的SYN数据包给目标主机,如果端口开放,则相应SYN-ACK数据包;如果关闭,则响应RST数据包;

3、NULL扫描

反向扫描----原理是将一个没有设置任何标志位的数据包发送给TCP端口,在正常的通信中至少要设置一个标志位,根据FRC 793的要求,在端口关闭的情况下,若收到一个没有设置标志位的数据字段,那么主机应该舍弃这个分段,并发送一个RST数据包,否则不会响应发起扫描的客户端计算机。也就是说,如果TCP端口处于关闭则响应一个RST数据包,若处于开放则无相应。但是应该知道理由NULL扫描要求所有的主机都符合RFC 793规定,但是windows系统主机不遵从RFC 793标准,且只要收到没有设置任何标志位的数据包时,不管端口是处于开放还是关闭都响应一个RST数据包。但是基于Unix(*nix,如Linux)遵从RFC 793标准,所以可以用NULL扫描。   经过上面的分析,我们知道NULL可以辨别某台主机运行的操作系统是什么操作系统,是为windows呢?还是Unix?

想Xmas一样,NULL扫描也是通过发送非常规的TCP数据包对目标计算机进行探测。在很多情况下,NULL扫描使用没有任何标记的数据包。

目标系统的开放端口不会回应响应信息给Nmap,而关闭端口则会发回一个RST数据包。

Xmas和null扫描的主要优点之一就是某些情况它们会绕过简单的过滤器和访问控制列表。

端口开放:Client发送Null,server没有响应

wKioL1YagD-AySBFAABXdAxBluw349.jpg

端口关闭:1、Client发送NUll   2、Server回复RST

wKiom1YagFKD8FrKAABupgikcaI930.jpg

说明:Null扫描和前面的TCP Connect()和SYN的判断条件正好相反。在前两种扫描中,有响应数据包的表示端口开放,但在NUll扫描中,收到响应数据包表示端口关闭。反向扫描比前两种隐蔽性高些,但精确度也相对低一些。

用途:判断是否为Windows系统还是*nix

4、FIN扫描

       与NULL有点类似,只是FIN为指示TCP会话结束,在FIN扫描中一个设置了FIN位的数据包被发送后,若响应RST数据包,则表示端口关闭,没有响应则表示开放。此类扫描同样不能准确判断windows系统上端口开发情况。

端口开放:发送FIN,没有响应

端口关闭:1、发送FIN  2、回复RST

5、ACK扫描

     扫描主机向目标主机发送ACK数据包。根据返回的RST数据包有两种方法可以得到端口的信息。方法一是: 若返回的RST数据包的TTL值小于或等于64,则端口开放,反之端口关闭,如图所示。

wKiom1YagOfDxXw6AACYMZPg7mU305.jpg

6、Xmas-Tree扫描

通过发送带有下列标志位的tcp数据包

                                URG:指示数据时紧急数据,应立即处理。

                                PSH:强制将数据压入缓冲区。

                                 FIN:在结束TCP会话时使用。

正常情况下,三个标志位不能被同时设置,但在此种扫描中可以用来判断哪些端口关闭还是开放,与上面的反向扫描情况相同,依然不能判断windows平台上的端口。

计算机内,RFC是指一个文档,它要么是一个注释文档,要么是关于现有某项技术或标准的技术规格。

RFC为我们提供了大量的特定系统内部运作的细节。Xmas扫描是将数据包中的FIN,PSH,URG标记为on,通过发送这种非常规的数据包来判断目标系统中端口的当前状态。

Xmas扫描和NULL扫利用在RFC中描述的系统潜在漏洞或弱点进行攻击。

Xmas扫描和NULL扫描针对的是LINUX和UNIX系统,而不是Windows系统。

端口开放:发送URG/PSH/FIN,  没有响应

wKioL1YagVrwZsxLAACFZyBO3R4643.jpg

端口关闭:1、发送URG/PSH/FIN,没有响应   2、响应RST

wKiom1YagY6hpyBnAACpi5EAXcs283.jpg

XMAS扫描原理和NULL扫描的类似,将TCP数据包中的ACK、FIN、RST、SYN、URG、PSH标志位置1后发送给目标主机。在目标端口开放的情况下,目标主机将不返回任何信息

7、Dump扫描

       也被称为Idle扫描或反向扫描,在扫描主机时应用了第三方僵尸计算机扫描。由僵尸主机向目标主机发送SYN包。目标主机端口开发时回应SYN|ACK,关闭时返回RST,僵尸主机对SYN|ACK回应RST,对RST不做回应。从僵尸主机上进行扫描时,进行的是一个从本地计算机到僵尸主机的、连续的ping操作。查看僵尸主机返回的Echo响应的ID字段,能确定目标主机上哪些端口是开放的还是关闭的。

原理:
僵尸扫描基于TCP三次握手,扫描者不与僵尸主机发生任何关系(别想歪)
因为在信息收集阶段我们能避免与目标主机发生直接交互就尽量,万一在目标主机或者服务器上留下痕迹,对于专业的黑客身份的暴露就是致命伤。
我们想要获取目标主机信息,不与目标联系怎样才能得到呢? 当然是通过第三方来间接获取。也就是通过肉鸡,代理,跳板渗透目标。
过程如下:
1. 扫描者给僵尸机发送一个SYN/ACK
2. 僵尸机返回一个RST包,并且给出ipid号 设为X
3. 过一段时间,再重复这个过程 僵尸机返回RST包
ipid号变为:X+1
此过程是发现僵尸主机(空闲,呆呆的,不会主动和别的机器通信)
4. 扫描 者伪造僵尸机的IP地址给目标机发一个TCP的SYN包
5. 目标机返回一个SYN/ACK包给僵尸机
6. 僵尸机(“我没和你通信啊,疑问??”)
回复一个RST包给目标机,同时ipid+1
7. 然后扫描者给僵尸机发一个SYN/ACK,
僵尸机返回RST,ipid +2 (相比僵尸机没和目标机通信之前)
最终返回的IPID:
+2 说明 目标机端口开放;
+1 说明目标机器主机活着,端口关闭或者目标主机关闭。
总结: 通过这种间接方式,扫描者不必与目标机器交互,就可以发现它的端口开放情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值