链层具有最大传输单元MTU这个特性,它了数据帧的最大长度,不同的网络类型都有一个上限值。以太网的MTU是1500,你可以用netstat-i命令查看这个值。如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU。我们假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。如果数据部分大于1472字节,就会出现分片现象。 ping 192.168.0.1IP首部有两个字节表示整个IP数据包的长度,所以IP数据包最长只能为0xFFFF,就是65535字节。如果有意发送总长度超过65535的IP碎片,一些老的系统内核在处理的时候就会出现问题,导致崩溃或者服务。另外,如果分片之间偏移量经过精心构造,一些系统就无法处理,导机。所以说,漏洞的起因是出在重组算法上。下面我们逐个分析一些著名的碎片程序,来了解如何人为制造IP碎片来系统。 协议的一种碎片。者发送一个长度超过65535的EchoRequest数据包,目标主机在重组分片的时候会造成事先分配的65535字节缓冲区溢出,系统通常会崩溃或挂起。ping不就是发送ICMPEchoRequest数据包的吗?让我们尝试一下吧!不管IP和ICMP首部长度了,数据长度反正是多多益善,就65535吧,发送一个包: 65507是它计算好的:65535-20-8=65507。Win2K下的ping更抠门,数据只允许65500大小。所以你必须找另外的程序来发包,但是目前新版本的操作系统已经搞定这个缺陷了,所以你还是继续往下阅读本文吧。 |
不良信息举报Q:2000617|Archiver|ROS软路由论坛 ROSABC.com 网络方案网络工程交流
GMT+8, 2025-11-10 10:16 , Processed in 0.029855 second(s), 15 queries .
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.