内网渗透之中间人欺骗攻击-ARP攻击

news2024/9/21 23:42:14

ARP攻击

ARP协议简介

ARP全称为Address Resolution Protocol,即地址解析协议,它是一个根据IP地址获取物理地址的TCP/IP协议,主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址,收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

ARP协议数据包格式

ARP额数据报文可以分为两种类型,分别为请求报文和响应报文,两种报文的格式统一为下图所示:
在这里插入图片描述
具体各字段解释如下:

硬件类型:大小2字节,表示ARP报文在哪种类型的网络上传输,值为1时表示为以太网地址。
上层协议类型:大小2字节,表示硬件地址要映射的协议地址类型,映射IP地址时的值为0x0800。
MAC地址长度:大小1字节,标识MAC地址长度,以字节为单位,此处为6。
IP协议地址长度:大小1字节,标识IP地址长度,以字节为单位,此处为4。
操作类型:大小2字节,指定本次ARP报文类型。1表示ARP请求报文,2表示ARP应答报文。
源MAC地址:大小6字节,表示发送设备的硬件地址。
源IP地址:大小4字节,表示发送方设备的IP地址。
目的MAC地址:大小6字节,表示接收方设备的硬件地址,在ARP请求时由于不知道接收端MAC地址,理论上该字段应该为广播地址,全为F,但是实际抓包查看发现该字段值全为0,即00-00-00-00-00-00,表示任意地址
目的IP地址:大小4字节,表示接收方的IP地址。

通过wireshark抓取ARP数据如下:
在这里插入图片描述
从上述数据中不难看到实际的ARP数据包不仅仅是简单直接的ARP格式数据,还包含了以太网帧头,这是因为ARP报文不是直接在网络层上发送的,它还是需要向下传输到数据链路层,所以当ARP报文传输到数据链路层之后,需要再次进行封装。以太网为例,ARP报文传输会封装以太网的帧头之后进行传送,数据格式解析如下:
在这里插入图片描述
以太网帧头字段说明:

目的MAC地址:6字节,如果是ARP请求帧,因为它是一个广播帧,所以要填上广播MAC地址(FF-FF-FF-FF-FF-FF),其目标主机是网络上的所有主机。
源MAC地址:6字节,这是发送ARP帧的节点MAC地址。
帧类型:2字节,这里用来标识帧封装的上层协议,因为本帧的数据部分是ARP报文,所以直接用ARP的协议号0x0806表示就可以了。

ARP协议工作流程

模拟环境
主机A :
    IP地址:192.168.220.78
    MAC地址: AA-BB-CC-DD-EE-FF
主机B
	IP地址:192.168.220.79
	MAC地址:BB-AA-CC-DD-EE-FF
  1. A主机从当前路由表中获取目标主机B的IP地址,随后主机A在自己本地的ARP缓存表中查看主机B的IP地址所匹配的MAC地址
  2. A主机在当前缓存表中未找到目标主机B的MAC地址,接下来通过局域网广播的方式发送ARP请求,请求的数据格式按照上文提到过的ARP数据格式进行传输(简单理解内容就是:我是A,我的IP地址是192.168.220.78,我的MAC地址是AA-BB-CC-DD-EE-FF,咱们这里边IP地址是192.168.220.79的人的MAC地址是多少啊)
  3. 局域网内的所有PC都会收到这个ARP请求数据,同时检查是否与自己的IP地址 匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求
  4. 主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
  5. 主机B将包含其MAC地址的ARP回复消息直接发送回主机A
  6. 当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。

需要注意:

  • ARP报文不能不能穿越路由器,不能转发到其他广播域
  • 缓存是有生存期的,生存期结束后,将再次重复上面的过程

关于ARP老化过程

  1. 老化时间内:当一个缓存条目在老化时间内没有被使用(即没有通过该条目发生过通信),它就会被视为过时并从ARP表中删除。
  2. 更新重置:在老化时间内有新的数据包需要通过此ARP条目转发,该条目的老化周期将被重置,即其老化计时器会被重新开始计算。
  3. ARP探测报文:当达到老化时间后,系统会发送一定次数的ARP探测报文,以确认该条目是否仍然有效,若探测失败,则删除该缓存条目。

ARP欺骗

ARP欺骗属于中间人攻击(MITM)的一种类型,ARP协议是建立在网络中各个主机互相信任的基础上的,虽然可以促进网络更加高效的运行,但其本身存在缺陷。

  1. ARP地址转换表是动态更新的,同时前文也提到更新是存在周期的,在进行动态更新的时候,只保存最近使用的地址对应的映射关系
  2. ARP请求时通过光波形式发送的,但同时网络中的主机可以自主的发送ARP应答消息,并且其它主机在接收到应答报文的时候不会对报文的真实性加以检测,解析之后就会将新的记录更新到ARP缓存表中

基于以上两点,攻击者在控制内网机器之后,主动发送ARP应答报文,从而实现篡改ARP缓存表的目的。一方面:攻击者使用ARP欺骗可以中断目标计算机与网关之间的通信;另一方面,攻击者使用ARP欺骗技术可以实现对目标计算机的所有网络请求重定向,即将目标主机的所有数据重定向到攻击者控制的机器,攻击者通过对数据的转发实现“中间人”的角色,从而实现监听目标对又不影响目标正常的网络请求的目的。

ARP攻击的流程

大致上ARP欺骗的攻击流程可以分为以下几个步骤:

  1. 对目标主机进行ARP欺骗,声称自己是网关。
  2. 转发目标的NAT数据到网关,维持目标的外出数据。
  3. 对网关进行ARP欺骗,声称自己是目标主机。
  4. 转发网关的NAT数据到目标主机,维持目标的接收数据。
  5. 监听劫持或者修改目标的进入和外出数据,从而实现攻击。

当然这其中还分为单向欺骗和双向欺骗,达到的功能也分为断网攻击和正常的中间人攻击(即重定向)。
下面分别进行阐述:
断网攻击,顾名思义,通过ARP欺骗实现目标计算机无法连接网络的目的。示例如下:

主机A  
		IP地址:192.168.220.13
		MAC地址:AA-BB-CC-DD
网关
		IP地址:192.168.220.14
		MAC地址:CC-DD-EE-FF
主机C(攻击者)
		IP地址:192.168.220.15
		MAC地址:EE-FF-GG-HH

正常情况下:
主机A连接网络时需要想网关发送数据,发送数据的时候从路由表中获取网关的IP地址,之后通过ARP请求获得网关的MAC地址,之后进行正常的网络数据传送。
攻击流程:

  1. 主机A发情网络请求访问(这里包含获取网关IP地址,以及发送ARP请求数据包,以获取网关的MAC地址)
  2. 网关在收到A主机发送的请求数据时候,返回自己的MAC地址到主机A(即解析主机A发送的ARP请求,发现ARP请求中的目的IP和自己的IP地址一样,然后返回自己的MAC地址:CC-DD-EE-FF)
  3. 主机C主动发起应答请求,告诉主机A,我就是网关,我的MAC地址是EE-FF-GG-HH,而且是多次大量的ARP响应数据
  4. 主机C发送的响应数据将网关发送的正确响应数据"淹没"之后,主机A在更新ARP缓存表的时候就会把错误的记录(即主机C的MAC地址)更新的缓存表中
  5. 缓存表更新之后,主机A发送的网络请求被重定向到主句B,如果主机B没有开启数据转发的话,就是先了对主机A的断网攻击。

流程图如下:
在这里插入图片描述
在这里插入图片描述
以上过程是断网攻击的主要过程,实现断网攻击之后,目标主机无法正常上网(因为这个时候主机A的所有网络请求都会发送到主机C),这会引起被攻击者的警觉,因此为了实现对目标的攻击与监控,需要在主机C上对主机A的访问数据进行转发。接下来通过一个小实验完成这两种攻击的演示。

ARP攻击演示

目标主机A :
		IP地址:192.168.52.132
		MAC地址:00-0C-29-33-F2-F9
网关:
		IP地址:192.168.52.2
		MAC地址:00-50-56-fe-62-e1
攻击机:
		IP地址:192.168.52.128
		MAC地址:00:0c:29:4c:ba:f5

主机A网络信息以及当前ARP缓存表数据
ARP缓存信息
在这里插入图片描述
网络信息:
在这里插入图片描述
攻击机网络信息
在这里插入图片描述
使用攻击机对主机A进行ARP攻击,借助arpspoof工具实现:

arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host
-i 指定使用的接口。
-c 指定当还原arp配置时t使用的MAC地址,默认为使用原来的MAC。(即当停止arpspoof命令后,默认取消毒化)
-t 指定要毒化的主机,如果不指定的话默认为局域网下所有主机。
-r 双向毒化(host和target),从而双向扑捉数据。(仅当同时指定 -t的时候才有效)
host 为你想要伪装成的主机,通常是本地网关。所有从target到host的数据包都被重定向到本机。

执行命令:arpspoof -i eth0 -t 192.168.52.132 192.168.52.2

在这里插入图片描述
此时查看主机A的ARP缓存表信息如下:在这里插入图片描述
确认主机A的网络访问情况:无法正常访问网络
在攻击机上开启数据转发:

echo 1 > /proc/sys/net/ipv4/ip_forward

在这里插入图片描述
此时查看主机A的网络访问情况:可以正常访问网络
在这里插入图片描述
还有其它的方法实现数据转发

修改/etc/sysctl.conf文件,使得net.ipv4.ip_forward = 1;等于0为不转发。然后更新:
sysctl -p

ARP欺骗获取用户访问图片信息

通过工具driftnet实现
执行命令:

driftnet -i eth0    指定网卡

执行之后在主机A上尝试访问网络:
在这里插入图片描述
攻击机截取图片情况:
在这里插入图片描述
发现个问题:没有办法截取https网站的图片,还不知道是操作有问题,有待查证

总结

以上关于ARP欺骗的内容总结到此
在验证和学习过程中,参考了一些网上现有资料,由于关于ARP欺骗也已经是成熟的攻击方式了,所以这里就不列出具体的参考链接了
如果有误,还请不吝指正

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

proteus仿真学习(1)

一,创建工程 一般选择默认模式,不配置pcb文件 可以选用芯片型号也可以不选 不选则从零开始布局,没有初始最小系统。选用则有初始最小系统以及基础的main函数 本次学习使用从零开始,不配置固件 二,上手软件 1.在元件…

滑动窗口算法专题(1)

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: 优选算法专题 目录 滑动窗口算法的简介 209. 长度最小的子数组 3.无重复字符的最长子串 1004. 最大连续1的个数III 1658. 将减到0的最小…

Docker基本使用(持续更新中)

docker介绍 docker是一个开源的应用容器引擎,常见的容器引擎例如:docker、podman、containerd等,但是docker应用还是相对比较多。 1 常用命令 1.1保存镜像到本地 命令如下: docker save -o nginx.tar nginx:latest 举例 结果&#xff1a…

C++/Qt 集成 AutoHotkey

C/Qt 集成 AutoHotkey 前言AutoHotkey 介绍 方案一:子进程启动编写AutoHotkey脚本准备 AutoHotkey 运行环境编写 C/Qt 代码 方案二:显式动态链接方案探索编译动态链接库集成到C工程关于AutoHotkeyDll.dll中的函数原型 总结 前言 上一篇介绍了AutoHotkey…

求1000以内所有恰好能分解成10组两个素数之和

要求 根据哥德巴赫猜想,任意一个大偶数都可以分解为两个素数之和。但许多偶数分解为两个素数之和并不是唯一的。 请编写函数fun,其功能是:求1000(不包括1000)以内的所有恰好能分解成10组两个素数之和(5109和1095被认为是同一组)的偶并依次存入数组a中并…

SQL_yog安装和使用演示--mysql三层结构

目录 1.什么是SQL_yog 2.下载安装 3.页面介绍 3.1链接主机 3.2创建数据库 3.3建表操作 3.4向表里面填内容 3.5使用指令查看效果 4.连接mysql的指令 4.1前提条件 4.2链接指令 ​编辑 4.3创建时的说明 4.4查看是不是连接成功 5.mysql的三层结构 1.什么是SQL_yog 我…

有什么兼容macOS 15 Sequoia系统的加密软件?

前言:近日,苹果更新了 macOS 15 Sequoia正式版,已经有用户在电脑上安装使用了。在这个信息化时代,系统一直在更新,运用一些工具时需要考虑兼容性。 刚有个客户来问迅软:你们迅软DSE客户端支持新发布的macO…

python函数三:拆包和交换变量值、引用、匿名函数

文章目录 1. 拆包和交换变量值1.1 拆包1.2 交换变量值 2. 引用2.1 了解引用2.1 把引用当作参数传递 3. 匿名函数3.1 lambda语法3.2 lambda的应用3.3 使用使用函数形式来求解某天是该年的第几天? 1. 拆包和交换变量值 1.1 拆包 拆包:把组合形成的元组形…

Linux基础---13三剑客及正则表达式

一.划水阶段 首先我们先来一个三剑客与正则表达式混合使用的简单示例,大致了解是个啥玩意儿。下面我来演示一下如何查询登录失败的ip地址及次数。 1.首先,进入到 /var/log目录下 cd /var/log效果如下 2.最后,输入如下指令即可查看&#xf…

【读书笔记-《网络是怎样连接的》- 0】全书整体结构

网络是计算机相关课程中的重要部分,更是当今的学习生活中所不可或缺的。虽然相关的经典书籍很多,但是大多数属于深入某一部分的专著,比如TCP/IP协议。像我这样对于网络一知半解的同学来说,更需要一种覆盖网络全貌,每一…

《线性代数》笔记

文章目录 1 行列式1.1 克拉默法则1.2 基本性质1.3 余子式 M i j M_{ij} Mij​1.4 代数余子式 A i j ( − 1 ) i j ⋅ M i j A_{ij} (-1)^{ij} \cdot M_{ij} Aij​(−1)ij⋅Mij​1.5 具体型行列式计算(化为基本型)1.5.1 主对角线行列式:主…

Python学习——【4.2】数据容器:tuple元组

文章目录 【4.2】数据容器:tuple元组一、元组的定义格式二、元组的特点三、元组的操作(一)常见操作(二)循环遍历 【4.2】数据容器:tuple元组 一、元组的定义格式 为什么需要元组 列表是可以修改的。如果想…

seL4 Untyped(二)

链接: Untyped Untyped 这篇主要是针对seL4物理内存管理的介绍。 物理内存 在seL4系统中,除了内核占用的一小部分静态内存之外,其他的所有的物理内存都是用户一级管理的。seL4在启动时创建的对象能力,以及seL4管理的其余物理资源&#xf…

初始网络编程(下)

所属专栏:Java学习 1. TCP 的简单示例 同时,由于 TCP 是面向字节流的传输,所以说传输的基本单位是字节,接受发送都是使用的字节流 方法签名 方法说明 Socket accept() 开始监听指定端口(创建时绑定的端口&…

十七、RC振荡电路

振荡电路 1、振荡电路的组成、作用、起振的相位条件以及振荡电路起振和平衡幅度条件, 2、RC电路阻抗与频率、相位与频率的关系曲线; 3、RC振荡电路的相位条件分析和振荡频率

信息安全数学基础(15)欧拉定理

前言 欧拉定理是数论中的一个重要定理,它建立了模运算下指数与模的互质关系。这个定理在密码学、信息安全等领域有着广泛的应用,特别是在公钥密码体制(如RSA加密算法)中。 一、表述 设 n 是一个正整数,a 是一个与 n 互…

Tomcat服务器—Windows下载配置详细教程

一、关于 1.1 简介 Tomcat是一个开源的Java Servlet容器和Web服务器,由Apache软件基金会维护。它实现了Java Servlet和JavaServer Pages (JSP) 规范,用于运行Java Web应用程序。Tomcat支持多种Java EE功能,并提供了高效的性能和可扩展性&am…

Spring扩展点系列-MergedBeanDefinitionPostProcessor

文章目录 简介源码分析示例示例一:Spring中Autowire注解的依赖注入 简介 spring容器中Bean的生命周期内所有可扩展的点的调用顺序 扩展接口 实现接口ApplicationContextlnitializer initialize AbstractApplicationContext refreshe BeanDefinitionRegistryPos…

记录一个英语听力网站的开发

背景 在当前全球经济衰退的背景下,国内IT相关工作的竞争日益激烈。为了获得更多的职业机会,学习英语或许能为程序员打开一扇新的窗户。尤其是在国际化背景的远程工作中,英语协作沟通是必不可少的。 尽管我们大多数人从小到大都在学习英语&a…

使用Renesas R7FA8D1BH (Cortex®-M85)和微信小程序App数据传输

目录 概述 1 系统架构 1.1 系统结构 1.2 系统硬件框架结构 1.3 蓝牙模块介绍 2 微信小程序实现 2.1 UI介绍 2.2 代码实现 3 上位机功能实现 3.1 通信协议 3.2 系统测试 4 下位机功能实现 4.1 功能介绍 4.2 代码实现 4.3 源代码文件 5 测试 5.1 编译和下载代码…