网络协议与攻击模拟_04ICMP协议与ICMP重定向

ICMP协议是网络层协议, 利用ICMP协议可以实现网络中监听服务和拒绝服务,如 ICMP重定向的攻击。

一、ICMP基本概念

1、ICMP协议

ICMP是Internet控制报文协议,用于在IP主机、路由器之间传递控制消息,控制消息指网络通不通、主机是否可达,路由是否可用等等。

  • 案例
    • 环境:GNS3 路由器 交换机 电脑
    • slots设置:交换机要选择NM-6ESW,主机和路由器选NM-1FE-TX
PC#show int f0/0
FastEthernet0/0 is up, line protocol is up
  Hardware is AmdFE, address is cc02.1b08.0000 (bia cc02.1b08.0000)
  Internet address is 192.168.1.1/24

#可知PC的MAC地址为cc02.1b08.0000


R3#show int f0/0
FastEthernet0/0 is up, line protocol is up
  Hardware is AmdFE, address is cc03.187c.0000 (bia cc03.187c.0000)
#可知路由器R3的MAC地址为cc03.187c.0000
  • ping一下网关

  • 抓包看到数据有请求有响应

根据抓到得报文可以看出:ICMP报文是有请求有响应的,如果说出现请求超时这种情况,很有可能是数据包可以到达目的地,但是回不来,或者说 根本不能到达目的地,所以请求超时会有多种情况。如果是路由器回复目标主机不可达造成的结果就是路由器没有帮你转发数据。

  • ICMP报文前面是网络层协议,有IPV4报文,接着才是ICMP协议 。

2、ICMP封装结构 

ICMP是主机和路由器之间传递控制报文消息的,ICMP属于网络层协议,是封装在传输层和控制层之间的。

3、ICMP报文结构

  • type类型
  • code 代码
  • Checksum校验和
  • Identifier(BE)和dentifier(LE)是报文的标志符
  • Sequence Number(BE)和Sequence Number(LE)是报文的序列号
  • Data:ICMP的数据

4、ICMP的Type&Code

ICMP报文主要就是看它的类型(type)和代码(code)

  • (8 0) ICMP请求
    ICMP报文type类型都为8,code字段为0,注不正常的请求下面有No response seen字段。
  • (0 0) 回显应答(表示比较正常的应答)
  • (11 0) 超时(传输期间生存时间为0)
  •  (3 1) 不正常应答(目标不可达主机不可达)
  • (3 3) 目标不可达(端口不可达)
  • (3 2) 目标不可达(协议不可达)
  • 类型5 表示重定向
  • (5 0)网络重定向
  • (5 1)主机重定向
  • 类型13 14 时间戳请求 时间戳应答
  • 总计类型是有0到18,这里有个特殊点,就是类型0之后没有类型1 类型2 ,类型0过后是类型3 类型4 类型5 ,也没有类型6 类型7,接着是类型8 类型9……一直到类型18。

注:ICMP报文不同的类型下面可能有不同的代码,可能要去了解下常见的ICMP类型有哪些,某一类型下面有哪些代码。如当你去访问一个不存在或者目标不可达或者说没有响应的目的的时候,数据到达网关后,路由器发现目标无法到达或者回不来的时候,会给主机发送ICMP响应,即ICMP控制报文,根据UCMP控制报文的Type和code可以分析出主机访问目标到底是什么情况。

二、ICMP重定向

1、什么是ICMP重定向

重定向是ICMP控制报文中的一种,在某一种特定的情况下,当路由器检测到一台机器使用的是非优化路由的时候,这个时候路由器回会主机发送ICMP重定向报文,使得它走优化路由。.

2、ICMP重定向举例

(1)引入ICMP重定向

网络中有三台主机{主机A(192.168.1.10)主机B (192.168.2.1)主机C(192.168.3.1}

一台交换机和两台路由器,主机A通过交换机连接到路由器R1和R2,主机A的网关是R1,

主机B接R2,主机C接R1。网络拓扑如下:

现主机A(1.10)要访问主机B(3.1),因为主机A的网关是(1.254),初始R1没有配置到R2的路由,所以主机A是无法到达主机B的。

此时如果在R1路由器添加到R2的静态路由,主机A访问主机B的数据流向如下:

主机A->R1->R2->主机B

这样走的话就比较复杂了,因为从网络拓扑来看,主机A如果能够走R2到主机B的话显然是最优路线,那么就要引入了ICMP重定向l了。

(2)ICMP重定向

此时我们可以在R2路由器R1上直接设置主机重定向,让主机A访问主机B的时候直接走路由器R2.

即在此情况下,当路由器R1检测到主机A使用的是非优化的路由,路由器R1就会想主机A发送ICMP重定向报文,使主机A的路由改变。

此时,如果有黑客直接给逐句A发送ICMP重定向,将主机A的路由改变了,可能在成逐句A无法进行网络通信,或直接将主机A的网关改成自己来达成截取流量的目的,这就是ICMP重定向攻击。

3、ICMP重定向原理性实验

实验环境:GNS3(两台路由器、一台交换机、一台主机)2.1和3.1的网络通过路由器的loopback虚拟接口来实现

(1)网络搭建与配置

PC(config)#no ip routing
PC(config)#int f0/0
PC(config-if)#ip add 192.168.1.10 255.255.255.0
PC(config-if)#no shut
PC(config-if)#exit
PC(config)#ip default-gateway 192.168.1.254
PC(config)#



R1#
R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#int f0/0
R1(config-if)#ip add 192.168.1.254 255.255.255.0
R1(config-if)#no shut
R1(config-if)#exit
R1(config)#int loopback 0
R1(config-if)#ip
*Mar  1 00:13:05.739: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up
R1(config-if)#ip add 192.168.2.1 255.255.255.0
R1(config-if)#


R2#conf
Configuring from terminal, memory, or network [terminal]?
Enter configuration commands, one per line.  End with CNTL/Z.
R2(config)#int f0/0
R2(config-if)#ip add 192.168.1.253 255.255.255.0
R2(config-if)#no shut
R2(config-if)#no shut
*Mar  1 00:09:59.695: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
*Mar  1 00:10:00.695: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
R2(config-if)#exit
R2(config)#int loopback 0
*Mar  1 00:10:18.415: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up
R2(config-if)#ip add 192.168.3.1 255.255.255.0

(2)主机Aping测试

R1、R2以及192.168.2.1都可以ping通,但是192.168.3.1无法ping通(没有路由)

(3)配置路由

直接在R1路由器配置一条路由,使得数据通过R1转发到192.168.3.0

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#ip route 192.168.3.0 255.255.255.0 192.168.1.253
R1(config)#

(4)抓包分析

开启三条链路的抓包,然后主机ping192.168.3.1抓取数据进行分析。

  • 主机A->交换机数据流量

第一条报文是no response,没有响应也就是cmd上面显示请求超时的那条报文。

我们来看下ICMP报文的type和code字段,type类型为5,code为0表示对网络进行重定向

下一条报文就请求到了

  • 交换机->R1数据流量

左边链路是

1.10请求3.1

1.10收到路由器的重定向,

1.10去请求1.253的MAC地址

接下来后续的包就直接交给了1.253

主机A访问3.1的时候网关直接发送ICMP重定向报文给主机A,

由于主机A的网关R1发现自己路由表中有直接到达192.1683.1的路由

所以看到下一跳地址直接向R2发送了ARP请求,请求R2的MAC地址,R2发送ARP应答将自己的MAC地址响应给R1.

  • 右边链路的抓包情况

右边这条链路很清楚,它就没有重定向的过程。直接是1.10请求3.1,3.1响应1.10

(4)总结

整个过程:

192.168.1.10请求192.168.3.1

192.168.1.10收到网关的ICMP重定向报文

网关请求R2(192.168.1.253)的MAC地址

接下来后续的包就直接交给了R1(192.168.1..253)

在GNS3中,重定向的路由直接改了PC网关;

4、ICMP重定向攻击

(1)环境

  • kali虚拟机(netwox工具、ettercap工具)

(2)工具

  • netwox

  • ettercap 

 如果遇到直接点击ettercap图标无法启动,尝试终端输入ettercap -G运行

(3)ettercap 攻击模拟

  • 选择网卡

  • 扫描

  • 查看扫描到的IP-MAC列表 

  • windows虚拟机作为被攻击目标 

  • kali作为攻击机

  •  在扫描列表中找到被攻击主机,右击选中,然后Add to Target1

在列表中任选一个Add to Target2

  • 点击右上角小地球标识,ICMP redirect

  •  重定向到哪里去,这里输入的是一个虚假的MAC地址

  • windows上面抓包

  • 正常还是可以访问网络的

  •  这里抓到了ICMP报文

正常实施ICMP重定向攻击的话,Windows这台主机是不能通信的,实验结果的话在虚拟机里面很难实现。 

(4)netwox攻击模拟

web.ecs.syr.edu/~wedu/Teaching/cis758/netw522/netwox-doc_html/tools/index.html

  • 用法
    • 参数:-d 指定网卡  -f  过滤器   -g  新的网关  -s   欺骗IP  -c  ICMP代码    -i   源IP地址
    • 使用示例:netwox的86模块 -g 指定新的网关

  • 指定新网关并实施攻击

  • netwox是直接对网络中的所有主机进行了重定向

  •  ping下百度可以ping通,还是可以正常访问到网络的。

  • 查找ping百度的报文进行分析

  •  kali向Windows10发送了重定向报文,将它的网关改成了192.168.183.134

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/318960.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 二维平面Delaunay三角网建立

目录 一、算法概念二、代码实现三、结果示例根据二维平面内的离散点建立平面三角网。 一、算法概念 三角剖分与Delaunay剖分定义:如何把一个散点集剖分成不均匀的三角形网格,即在给定的平面点集上,生成三角形集合的过程。考虑平面点集P={p1,p2,p3,…,pn},我们希望得到三…

CMake+QT+大漠插件的桌面应用开发

文章目录 CMakeQT大漠插件的桌面应用开发说明环境项目结构配置编译环境代码 CMakeQT大漠插件的桌面应用开发 说明 在CMake大漠插件的应用开发——处理dm.dll,免注册调用大漠插件中已经说明了如何免注册调用大漠插件,以及做了几个简单的功能调用&#x…

金南瓜SECS/GEM发送event、VID

金南瓜SECS/GEM发送事件(CEID)很简单,只需一步就完成。 最重要是简单易懂,任何人一看就上手。无需懂得内部逻辑,以及一大堆的导入问题。 代码如下 C#的代码: // 扫码成功 private void buttonReadBarco…

【教学类-43-20】20240113 数独(二)4宫格、9宫格 无空行A4模板

作品展示: 4宫格 9宫格 题目连在一起 背景需求: 制作十宫格数独模板,为了凑满20行,删除了每个数独题之间的行列分割线 【教学类-43-18】A4最终版 20240111 数独11.0 十宫格X*YZ套(n10),套用没有分割行列的A4横版模板…

浅谈对Maven的理解

一、什么是Maven Maven——是Java社区事实标准的项目管理工具,能帮你从琐碎的手工劳动中解脱出来,帮你规范整个组织的构建系统。不仅如此,它还有依赖管理、自动生成项目站点等特性,已经有无数的开源项目使用它来构建项目并促进团队…

将 OpenCV Java 与 Eclipse 结合使用

配置 Eclipse 首先,从下载页面获取 OpenCV 的新版本,并将其解压缩到一个简单的位置,例如 .我使用的是 2.4.6 版,但其他版本的步骤或多或少相同。C:\OpenCV-2.4.6\ 现在,我们将 OpenCV 定义为 Eclipse 中的用户库&…

【数据结构与算法】之数组系列-20240114

这里写目录标题 一、414. 第三大的数二、448. 找到所有数组中消失的数字三、561. 数组拆分四、594. 最长和谐子序列 一、414. 第三大的数 简单 给你一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。 示例 1: 输入&…

个人网站制作 Part 1 创建网站 | Web开发项目

文章目录 👩‍💻 基础Web开发练手项目系列:个人网站制作🚀 项目概述🔧 开发工具和环境配置🛠 项目实现步骤步骤 1: 创建HTML文件步骤 2: 添加CSS样式步骤 3: 链接CSS文件步骤 4: 添加JavaScript交互 &#…

【教学类-43-19】20240113 数独(一) 3-5-6-7-8-10宫格 无空行A4模板

作品展示: 3宫格 5宫格 6宫格 7宫格 8宫格 10宫格,题目连在一起 背景需求: 制作十宫格数独模板,为了凑满20行,删除了每个数独题之间的行列分割线 【教学类-43-18】A4最终版 20240111 数独11.0 十宫格X*YZ套(n10)&am…

【WPF.NET开发】流文档

本文内容 什么是流文档?流文档类型创建流内容与流相关的类内容架构自定义文本 流文档旨在优化查看和可读性。 流文档根据运行时变量(例如,窗口大小、设备分辨率和可选的用户首选项)来动态调整和重新排列内容,而不是设…

综合评价 | 基于EW、EW-BP、EW-ELM的地区发展水平综合评价(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于EW、EW-BP、EW-ELM的地区发展水平综合评价(Matlab) 程序设计 完整程序和数据获取方式:私信博主回复基于EW、EW-BP、EW-ELM的地区发展水平综合评价(Matl…

YOLOV8代码本地编译

下载pycharm 在 Linux 操作系统中安装 Pycharm 社区版_linux中安装pycharm社区版-CSDN博客 Pycharm中配置 Conda 虚拟环境 百度安全验证https://baijiahao.baidu.com/s?id1771914506705481878&wfrspider&forpc 源码编译 果您对参与开发感兴趣或希望尝试最新源代码…

昇腾910b部署Chatglm3-6b进行流式输出【pytorch框架】NPU推理

文章目录 准备阶段避坑阶段添加代码结果展示 准备阶段 配套软件包Ascend-cann-toolkit和Ascend-cann-nnae适配昇腾的Pytorch适配昇腾的Torchvision Adapter下载ChatGLM3代码下载chatglm3-6b模型,或在modelscope里下载 避坑阶段 每个人的服务器都不一样&#xff0…

《向量数据库指南》让「引用」为 RAG 机器人回答增加可信度

在之前的文章中,我们已经介绍了如何用 Milvus 向量数据库以及 LlamaIndex 搭建基础的聊天机器人《Chat Towards Data Science |如何用个人数据知识库构建 RAG 聊天机器人?》《书接上回,如何用 LlamaIndex 搭建聊天机器人&#xff…

双指针算法: 有效三角形的个数

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 前言 声明…

【AI】人工智能和水下机器视觉

目录 一、初识水下机器视觉 ——不同点 ——难点 二、AI如何助力水下机器视觉 三、应用场景 四、关键技术 水下机器视觉,非常复杂,今天来简单讨论一下。因为目标识别更难。 水下机器视觉是机器视觉技术在水下环境中的应用,它与普通机器…

读元宇宙改变一切笔记07_硬件与互操作性(上)

1. 元宇宙的头号入口 1.1. 元宇宙最令人兴奋的地方在于,我们可以借此开发用来访问、渲染和操纵它的新设备 1.1.1. App Newton于1993年发布,是世界上第一款掌上电脑 1.2. 功能超强大又轻巧的AR和沉浸式VR头显 1.2.1.…

[小程序]定位功能实现

第一步:首先要认识三个小程序的 api wx.chooseLocation 和 wx.getLocation 和 wx.openLocation (1).wx.chooseLocation 用于在小程序中选择地理位置。当用户点击选择位置按钮时,小程序会调起地图选择界面,用户可以在地图上选择一个位置,并可以…

黑马程序员 Docker笔记

本篇学习笔记文档对应B站视频: 同学们,在前两天我们学习了Linux操作系统的常见命令以及如何在Linux上部署一个单体项目。大家想一想自己最大的感受是什么? 我相信,除了个别天赋异禀的同学以外,大多数同学都会有相同的…

vue文件在<template>中使用多个<el-main>报错(已解决)

目录 1.原理 2. 根据你的需求,自定义每个 组件的内容。你可以在 标签内部插入文本、其他组件、样式等。 3. 根据需要添加样式或其他属性到每个 组件。你可以使用 class、style 或其他属性来自定义每个组件的外观和行为。 4.一个可以运行的总代码如下 5.我的一…