(一)TCP协议数据格式
(1)两个序号
序号 | 作用 | 长度 | 说明 |
seq | 标记 | 4字节 | sequence 标识发送端到目的端字节流的数据 字节流中的每个字节都按顺序编号 (判断是否重复接收,或报文乱序重组) |
ack | 确认 | 4字节 | 期待对方下个报文第一个数据字节序号 当ACK标志位=1时有效;ack=seq+1 |
(2)六个标志位
ID | 标志位 | 英文 | 说明 |
1 | URG | urgent | 紧急处理位(高优先级,较少用) (我有紧急数据,请放到最前面,优先速传!) |
2 | ACK [ˈæk] | acknowledgement | 确认序号有效(通行证有效,允许通行) ACK=1有效,0无效 |
3 | PSH | push | 接收方应尽快向应用层交付(及时响应),不必等待缓存区填满(别在缓冲区排队,快点走) |
4 | RST | reset | 重置连接(错误连接&非法数据包) (连接有误,请重连) |
5 | SYN [sɪn] | synchronous | 建立连接,同步序号 (长江,我是黄河,收到请回答) 连接请求报文:SYN=1,ACK=0 同意连接响应报文:SYN=1,ACK=1 |
6 | FIN [fɪn] | finish | 释放连接,发送结束 (发射成功,同志们辛苦了) |
(二)TCP三次握手
(三)端口概念
端口由TCP/IP协议定义,是一个16位地址,对应0-65535范围数字。
TCP连接端socket=IP+port用来定位某主机中的进程。
端口与进程是一一对应。如果某进程正在等待连接(监听),就会出现与它相对应的端口。
分类:
(1)0~1023:系统端口(公认端口),只有系统特许的进程才能使用。
(2)1024~65535:用户端口,用于分配给请求通信的进程。
(四)端口复用
(1)定义:指多个套接字绑定到同一个端口
(2)举例:FTP服务器中,使用21端口同时进行木马通信和FTP服务,从而隐藏木马端口并避免被防火墙阻拦
(五)端口扫描方法
原理:入侵者通过扫描端口,就能判断出目标计算机有哪些通信进程正在等待连接。
ID | 技术方法 | 说明 | 端口开放 | 端口关闭 |
1 | 完全连接扫描 | 利用TCP/IP协议的三次握手连接机制建立一次完整的连接 (会在被扫描机器留下日志) | 建立成功 | 建立失败 |
2 | 半连接扫描 | 只完成TCP/IP协议的前两次握手,不建立一次完整的连接 (不会留下日志) | 返回ACK+SYN | 返回RST信息 |
3 | SYN扫描 | 向目标主机发送连接请求,返回响应后,立即切断连接过程 (不会留下日志) 需要root权限,海量发送=dos攻击(利用TCP协议缺陷,消耗系统资源:服务器重发至超时占用未连接队列) | 返回ACK信息 | 返回RST信息 |
4 | ID头信息扫描(僵尸扫描) | 需要1台第三方机器(dumb主机:网络通信量少)配合扫描。 ①由源主机A向dumb主机B(网络通信量少,一般是windows主机)发出连续PING数据包,查看主机B返回的顺序数据包的ID头信息(ID头值自增,说明是windows)。 ②由源主机A假冒主机B的地址向目的主机C任意端口(1-65535)发送SYN数据包。 ③主机C向主机B返回数据包有两种结果:SYN|ACK表示端口处于监听状态,RST|ACK表示非监听状态。 | 数据包B→A ID头的值>1 | 数据包B→A ID头的值递增1 非常规律 |
5 | 隐蔽扫描 | 能够成功地绕过IDS、防火墙和监视系统等安全机制,取得目标主机端口信息 (%5c暴库:\的16进制) | ||
6 | SYN|ACK扫描 | 向目标主机发送SYN|ACK数据包,而不是先发送SYN数据包 | 无信息返回 | 返回RST信息 |
7 | FIN扫描 | 向目标主机发送FIN数据包 | 无信息返回 | 返回RST信息 |
8 | NULL扫描 | 将源主机发送数据包中的ACK、FIN、RST、SYN、URG、PSH等标志位全部置空 | 无信息返回 | 返回RST信息 |
9 | XMAS扫描 | 原理和NULL扫描相同,将发送数据包中的ACK、FIN、RST、SYN、URG、PSH等头标志位全部置为1(根据RFC793文档,关闭端口的目标系统应返回RST) | 无信息返回 | 返回RST信息 |
10 | ACK扫描 | 向目标主机发送FIN数据包,查看返回包TTL值和WIN值 | 返回包TTL值<64(路由器消耗) 返回包WIN值>0 | 返回包TTL值>64 (怕你收不到) 返回包WIN值=0 |
(六)ID头信息扫描
(1)原理:扫描者通过僵尸主机回复的ID号来判断目标主机是否存活
(2)目的:利用僵尸主机作为跳板来扫描目标主机,目标主机的日志文件中记录的就是僵尸主机IP地址,能更好隐藏自己
(3)僵尸主机要求:长期闲置且联网,ID值自增
(4)过程
- 扫描主机向Zombie发送SYN/ACK包,Zombie(此时产生IPID为x)向扫描主机返回RST,主机得到Zombie的IPID
- 扫描主机伪造Zombie的IP(x),向目标主机发送SYN包。目标端口开放,会向Zombie返回SYN/ACK包; Zombie发送RST询问,IPID=x+1;端口并未开放,目标主机向Zombie发送RST包,IPID=x不变
- 扫描主机向Zombie发送SYN/ACK包, Zombie回复RST包,Zombie的IPID=x+2