文章目录

  • 0x01 泪滴攻击原理
  • 0x02 IP协议格式
  • 0x03 分片实验
  • 0x04 泪滴攻击实例
  • 0x05 根据TTL值判断攻击的来源

0x01 泪滴攻击原理

针对IP协议的攻击方法,主要有伪造IP地址发送畸形数据包两种方式。我们在这一章中选择的泪滴攻击就属于发送畸形数据包这种方式,它的设计思路巧妙地利用了IP协议里面的缺陷,因此成为了网络安全里面的一个经典案例。

这种攻击的实现原理是向目标主机发送异常的数据包碎片,使得IP数据包碎片在重组的过程中有重合的部分,从而导致目标系统无法对其进行重组,进一步导致系统崩溃而停止服务的恶性攻击。

考虑到这种攻击是建立在IP协议上,我们先来简单地了解一下IP协议的几个重要内容,包括IP协议数据包的格式、分片方式以及存活时间(TTL) 。

可能受影响的操作系统

  • Windows 3.1
  • Windows 95和NT
  • 2.0.32和2.1.63版本以下的Linux

Windows7和vista的潜在风险

微软的SMB2中发现了一个远程重启漏洞,利用该漏洞的溢出代码已经在互联网上广泛传播,使Windows 7和Windows Vista的用户暴露在泪滴攻击的风险中。

0x02 IP协议格式

wireshark提供的各种数据包样本:https://wiki.wireshark.org/SampleCaptures?action=show&redirect=Sample+Captures

下载泪滴攻击样本 teardrop.cap

IP协议是网络中最繁忙的协议。IP协议是一种best efforts协议,不保证可靠性,数据包可能重复、丢失;无连接协议,同一个连接中的多个报文被独立对待。IP协议主要定义了数据传送的基本单位;执行路由功能;主要规定了主机和路由器应该如何处理数据包;在什么情况下产生错误信息;以及什么情况下应该丢弃数据包。
先介绍现在普遍使用的IPv4,以下是报头格式:

第8和9数据包是一次泪滴攻击的实例,泪滴攻击就是一个数据包分片后,本来应该可以组合到一起,但它组合不到一起去了

先看第8个数据包,是个ip数据包

数据报分析

版本(4bit):指IP协议的版本,4代表IPv4

首部长度(4bit):占4位,可表示的最大数值为15,因为IP首部固定长度为20字节,因此最小数值为5。单位为4字节,所以这里的长度为5*4字节=20字节。

区分服务(8bit):用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。

总长度(16bit):代表IP数据报的总长度,单位是字节,共16位,因此IP数据报最大长度为2^16-1=65535字节

标识(16bit):用于标识IP数据报。由于在不同的网络环境中的MTU不同,IP数据报有时需要分片,为了正确重组IP数据报,故每个数据报有标识字段。同一个标识的分片组装在一起。

标志(3bit):最低一位为MF(more fragment)标识后面是否还有碎片,中一位DF(don’t fragment)表示该数据报是否允许被分片。这里MF为1,后面还有分片

片偏移(13bit):用于标识该碎片在整个数据报中的位置。相对于用户数据字段的起点,该片从何处开始。片偏移以八个字节为偏移单位,除了最后一个数据报片,每个分片的长度为8字节的整数倍。

生存时间(8位):TTL(time to live)单位是路由次数,表示最多经过多少路由。路由器每次转发数据报就把TTL减一,当TTL减为零食,就丢弃这个数据报。

协议(8bit):携带的数据是何种协议,即该数据应该交付至哪层传输层协议,其中6表示TCP,17表示UDP。

首部检验和(16bit):只检验分组的首部,而不检验数据部分。

源IP(32bit)

目的IP(32bit)

我们比较关注的是分片,生存时间,源地址,目的地址

为什么要分片?

红框中的数据,为1时代表不是最后一个分片,为0时代表是最后一个分片,分片的几个数据包标识号是一样的


这个红框表示分片相对于原始位置的偏移,偏移的单位是8字节,也就是说需要乘8才是最终的偏移量

而泪滴攻击把几个分片后数据包偏移量改小一些,这样两个分片的包会有部分重合,当目标设备接收到这样的数据包后,就无法重新组合,这种构造出畸形数据包的方法就叫泪滴攻击,以前的操作系统会死机,现在一般没有什么作用了,现在一般与泛洪攻击结合起来,泪滴攻击针对的是分片

0x03 分片实验

使用ping命令发送一个长度为4200的icmp数据包

然后使用wireshark抓包,可以看到ICMP数据报的数据部分长度为4200

我们来分析分析ip协议是如何分片的,我们知道标识相同的ip分片属于一个数据包,那么将ip数据包的标识符作为过滤器使用就能找到所有ip数据包

现在全部筛选出来了

现在看看第一个数据报,起始位置0+长度1480

标准以太网帧长度下限为:64 字节
    以太网规定,以太网帧数据域部分最小为46字节,也就是以太网帧最小是6+6+2+46+4=64。除去4个字节的FCS,因此,抓包时就是60字节。当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面填充以满足数据帧长不小于64字节。由于填充数据是由MAC子层负责,也就是设备驱动程序。

标准以太网帧长度上限为:1518 字节,以太网中帧的大小通常是1514
    据RFC894的说明,以太网封装IP数据包的最大长度是1500字节,也就是说以太网最大帧长应该是以太网首部加上1500,再加上7字节的前导同步码和1字节的帧开始定界符,具体就是:7字节前导同步吗+1字节帧开始定界符+6字节的目的MAC+6字节的源MAC+2字节的帧类型+1500+4字节的FCS。
    最大帧应该是1526字节,但是实际上我们抓包得到的最大帧是1514字节,为什么不是1526字节呢?原因是当数据帧到达网卡时,在物理层上网卡要先去掉前导同步码和帧开始定界符,然后对帧进行CRC检验,如果帧校验和错,就丢弃此帧。如果校验和正确,就判断帧的目的硬件地址是否符合自己的接收条件(目的地址是自己的物理硬件地址、广播地址、可接收的多播硬件地址等),如果符合,就将帧交“设备驱动程序”做进一步处理。这时我们的抓包软件才能抓到数据,因此,抓包软件抓到的是去掉前导同步码、帧开始分界符、FCS之外的数据,其最大值是6+6+2+1500=1514。

关于长度部分可以参考以太网数据帧(802.3)最大与最小长度

再来看看第二个数据包,起始位置1480+长度1480

第三个数据包,起始位置2940+长度1240,最后一个数据包,全部合起来等于4200


所以我们的ICMP数据包在网络层被分为了三部分:1480+1480+1240=4200

0x04 泪滴攻击实例

将第二个数据包的偏移量1480改小一点,让第二个数据包和第一个数据包数据有重合部分,这样两个分片的包会有部分重合,当目标设备接收到这样的数据包后,就无法重新组合,这种构造出畸形数据包的方法就叫泪滴攻击,以前的操作系统会死机,现在一般没有什么作用了。同理将第三个偏移量改小也可以。


再来看看wireshark官方提供的数据包,第八个数据包的数据长度为36
但是第九个数据包的偏移量却不是36,而是24,这样两个ip数据包就无法正常组装。

0x05 根据TTL值判断攻击的来源

不同的操作系统的默认TTL值是不同的,所以我们可以通过TTL值来判断主机的操作系统,但是当用户修改了TTL值的时候,就会误导我们的判断,所以这种判断方式也不一定准确。下面是默认操作系统的TTL

攻击者的包表面上看来自世界各地,但他的TTL值暴露了所在地,如果是外网过来的一定会变小,但发现所有数据包的TTL值都为64,可以判断攻击者为内网用户。

【wireshark实验】以泪滴攻击学习ip数据报相关推荐

  1. 深入学习IP数据报发送过程

    IP协议的功能 回顾一下前面的文章所提及的知识点,总结一下IP协议的功能,得到以下结论: 编址(目标端的IP地址),数据传输的过程当中就必须表明要发送目标端的IP地址 寻址和路由(根据对方的IP地址, ...

  2. 计算机网络实验IP数据报分片,实验报告三IP数据分片.doc

    实验报告三IP数据分片 计算机网络实验报告 实验名称:IP数据分片 组号:一组 角色号:B 姓 名: 班 级: 学 号: 日 期:2014.4.21 一,实验目的 学习IP数据报分片原理 二,实验步骤 ...

  3. 计算机网络实验ip数据报转发,计算机网络实验报告三网际协议IP.doc

    计算机网络实验报告三网际协议IP 计算机网络实验报告 实验题目:网际协议IP学号:201200301106日期:2014/11/20班级:2012级软工3班姓名: 李凯峰实验目的: 1.掌握IP数据报 ...

  4. Wireshark数据包分析——Teardrop泪滴攻击

    本文仅做数据包学习使用! 一.泪滴攻击原理 Teardrop攻击是一种拒绝服务攻击,是一种针对IP协议的攻击方法,顾名思义,Teardrop攻击是一种令人落泪的攻击手段,可见其破坏威力很强大.它利用发 ...

  5. IP协议安全:泪滴攻击与碎片攻击

    一.IP协议介绍 IP协议是网络中最繁忙的协议.IP协议是一种best efforts协议,不保证可靠性,数据包可能重复.丢失:无连接协议,同一个连接中的多个报文被独立对待.IP协议主要定义了数据传送 ...

  6. 《计算机网络—自顶向下方法》 第四章Wireshark实验:IP

    实验描述: 在本实验中,我们将研究 IP 协议,重点关注 IP 数据报(IP datagram).我们将通过分析在执行 traceroute 程序发送和接收的一系列 IP 数据报的过程来完成这个实验( ...

  7. Wireshark分析IP数据报

    Wireshark分析IP数据报 1. IP数据报格式 总概 2. IP数据报首部的固定部分各字段 版本[4位]:IPv4或IPv6 首部长度[4位]:单位是32bit(4字节),比如:首部最小长度为 ...

  8. 漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

    漏洞挖掘前言 题目 Lab 侧信道攻击 + TCP/IP实验 Pre 1.用IE访问某些网站的时候,输入javascript:alert(document.cookie)会有什么反应,解释原因. 2. ...

  9. 王道考研学习笔记IP数据报格式IP数据报分片(超详细)

    一.回顾TCP/IP协议栈 二.IP数据报格式 记忆方法: TCP是面向连接的服务,面向连接就非常6.而UDP是不面向连接的,数据就非常容易被"遗弃"(17).因为如果不建立连接, ...

最新文章

  1. Matlab与线性代数 -- 矩阵的重组5
  2. 如何使用OpenCppCoverage检查单元测试的行覆盖率
  3. java语言基础特性
  4. python挖长尾词 源码,如何用代码挖局长尾关键词
  5. 开箱即用——用这个模板快速统筹企业车辆安排
  6. Java黑皮书课后题第6章:**6.28(梅森素数)如果一个素数可以写成2^p-1的形式,其中p是某个正整数,那么这个素数就称作梅森素数。编写程序,找出p≤31的所有梅森素数,然后显示如下结果
  7. SAP ABAP Workflow 显示问题
  8. rocksdb原理_教你玩转MyRocks/RocksDB—STATISTICS与后台线程篇
  9. opencv 读取CV_16U图像 c++
  10. Nginx使用HTTPS建立与上游服务器的网络通信
  11. 11.2.0.2的SPM的一个bug
  12. 我们来判断一个php函数是否被定义
  13. UItextView使用详解
  14. 使用zTree和json构建简单树节点
  15. 测试鼠标宏软件,KINBAS VP900鼠标宏设置软件
  16. 原码一位乘法c语言程序,原码一位乘法与补码一位乘法
  17. 阿里巴巴如何面试?网友分享出你不知道的真实面试流程(转发给有需要的人)
  18. matlab数学建模-非线性规划(无约束规划、有约束规划)
  19. ζ(2)的夹逼代数证明
  20. 《使用Java实现一元二次方程求根计算器》改进版

热门文章

  1. 鸿蒙系统手机小组件,全球第三大手机系统「鸿蒙」上线,这19款能抢先用…
  2. 北京科技大学计算机博士好考吗,考博过来人经验分享整理
  3. 南京工业大学计算机考研资料汇总
  4. 啥都不会 搬运别人的东西发一下 数据结构与程序设计——C++语言描述<翻译:笑死的猪头>
  5. pg修改表的owner
  6. 密码电文翻译,输入一行电文,已按下面规律译成密码: A->Z a->z
  7. 在线音视频流测试地址记录
  8. “人工智能影响世界”
  9. 【Linux】autofs自动挂载
  10. 程序员开始吃青春饭了?35岁面试直接被送走,不惜降薪跳槽?