端口扫描——SYN TCP端口是否开始扫描
一、废话
最近开始了安全的学习。对于新知识面,没有头绪的我,直接就是去图书馆借了一本《网络攻击原理与技术》连一峰,王航 编著。这本书虽然是2004年的书。但是,图书馆里面关于安全的书里面。我也只看中了这本。因为,只有这本详细的讲解了技术原理。对于安全的。我一直奉行一条学习原则——原理必须搞懂,搞懂原理,拿出几个特殊的进行实践(写代码)。
二、什么是端口扫描
- 目的:端口扫描是为了,进行网络信息的搜集和判断。(能判断操作系统类型等等)
- 我看来:端口扫描,直接来看,就是能够判断,哪些通信TCP端口处于listen状态、哪些UDP端口是开放的。有些特殊的软件,使用着固定的端口,比如MYSQL的默认端口3306。并用其他方式,探测到软件版本。从而,通过此软件版本的漏洞,发起攻击。端口就成为了入侵的通道。
三、端口扫描的方式
- TCP SYN (SYN也就是TCP连接建立时第一个握手包)
发送SYN,接收端口,如果是listen状态就会返回ACK数据包。 - TCP FIN (FIN是TCP状态位之一,用于关闭连接时发送)
发送FIN,如果端口是开放的,会忽略这个包。否则会回复一个RST包。
但是,某些操作系统在TCP堆栈实现中存在漏洞,不能保证完全准确(来自书本,待考证,毕竟是2004年的,我需要实践验证 - 分片扫描
发送扫描数据包时,人为地将数据包分成许多IP分片,将内容分隔开,敏感内容可以通过某些包过滤程序。
原理:IP头的Identification后面16位usFlagAndOffset用于IP分片发送。
有趣的是,有些程序不能正确的处理IP分片,分片扫描可能会使得目标系统崩溃,(待考证) - TCP reverse ident
使用的是ident协议(RFC1413)通过TCP连接得到进程所有者的用户名,即使这个进程不是连接的发起方。
四、TCP SYN扫描原理
这就是TCP连接的建立过程。可以看出,。我发送SYN包,Identification(seq=x, Identification更形象,因为,这个序列表是IP包的唯一标识,防止数据重复获取),如果,服务器端口开放。则服务器端口,将返回给我一个SYN ACK包,并且ack=x+1。如果接收到这样的数据包,也就是端口处于开放状态。