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

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.78MAC地址: AA-BB-CC-DD-EE-FF
主机BIP地址:192.168.220.79MAC地址: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.13MAC地址:AA-BB-CC-DD
网关IP地址:192.168.220.14MAC地址:CC-DD-EE-FF
主机C(攻击者)IP地址:192.168.220.15MAC地址: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.132MAC地址:00-0C-29-33-F2-F9
网关:IP地址:192.168.52.2MAC地址:00-50-56-fe-62-e1
攻击机:IP地址:192.168.52.128MAC地址: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.rhkb.cn/news/428960.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态线程池(五)

动态线程池 Filter过滤器 AlarmBaseFilter NoticeBaseFilter NotifyRedisTateLimiterFilter RedisRateLimiter redis限流器 NotifierHandler DtpNotifier动态线程池通知者 Notifier通知者 关于发送Email消息的额外说明

【Java集合】深入了解ArrayList实现原理

概述 1.数据存储是基于动态数组实现的,默认初始容量为10。 2.添加数据时,首先需要检查元素个数是否超过数组容量,如果超过了则需要对数组进行扩容(1.5倍);插入数据时,需要将从插入点 k 开始到数…

4.接口测试基础(Jmter工具/场景二:一个项目由多个人负责接口测试,我只负责其中三个模块,协同)

一、场景二:一个项目由多个人负责接口测试,我只负责其中三个模块,协同 1.什么是测试片段? 1)就相当于只是项目的一部分用例,不能单独运行,必须要和控制器(include,模块)一…

河鱼浏览器——您的电商多店管理专家,轻松应对拼多多20+店铺登录挑战

在电商领域驰骋,每一个店铺都是您商业版图的一部分,但同时管理多个拼多多店铺,尤其是超过20个,是否让您感到力不从心?河鱼浏览器,专为电商精英打造的高效管理工具,为您化解这一难题。 **多开无…

JVM 一个对象是否已经死亡?

目录 前言 引用计数法 可达性分析法 引用 finalize() 方法区回收 前言 虚拟机中垃圾回收器是掌握对象生死的判官, 只要是垃圾回收器认为需要被回收的, 那么这个对象基本可以宣告"死亡". 但是也不是所有的对象, 都需要被回收, 因此, 我们在学习垃圾回收的时候…

Qt开发技巧(四)“tr“使用,时间类使用,Qt容器取值,类对象的删除,QPainter画家类,QString的转换,用好 QVariant类型

继续讲一些Qt技巧操作 1.非必要不用"tr" 如果程序运行场景确定是某一固定语言,就不需要用tr,"tr"之主要针对多语种翻译的,因为tr的本意是包含英文,然后翻译到其他语言比如中文,不要滥用tr,如果没有…

万字长文——ConvNeXt(2022CVPR),卷积网络的顶峰之作,在Transformer盛行的当下,卷积网络还能再战!

ConvNext:A ConvNet for the 2020s ConvNext:2020 年代的卷积神经网络 论文地址: https://arxiv.org/pdf/2201.03545 自从Transformer成功应用在视觉领域并且取得显著成绩后,很多人开始抛弃卷积网络架构,转而使用Transformer。然而有的大佬不认为卷积过时了,于是有了这篇…

OpenGL渲染管线(Rendering Pipeline)介绍

渲染管线 计算机图形学中,计算机图形管线(渲染管线 或简称 图形管线、流水线)是一个概念模型,它描述了t图像系统将 3D场景渲染到2D屏幕所需执行的一系列步骤。渲染管线大的可以分为三个阶段。 (一)应用阶段…

Web接入Sonic平台之安装

问题及解决方案 1.安装python的airtest-bdd依赖时报错,显示无法编译psutil note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for psutil Failed to build psutil ERROR: ERROR: Failed to b…

Android SystemUI组件(07)锁屏KeyguardViewMediator分析

该系列文章总纲链接:专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明: 说明:本章节持续迭代之前章节的思维导图,主要关注左侧上方锁屏分析部分即可。 为了更好理解本文的内容,优先说明下SystemUI中与Ke…

[已更新前两问代码+全部建模]2024华为杯C题详细思路代码文章建模分享研究生数学建模竞赛数学建模研赛

截止9.21 12点 已更新问题一二的代码和全部内容的建模 下面我们会先进行代码讲解,之后给出全部内容的建模公式 ## https://docs.qq.com/doc/DVWhyZ1NFY01XcmNw基于磁通密度数据的特征提取与分类分析。 问题一代码详解 1. 导入必要的库 import pandas as pd import numpy as…

Elastic 的 OpenTelemetry PHP 发行版简介

作者:Pawel Filipczak 宣布 OpenTelemetry PHP 的 Elastic 发行版的第一个 alpha 版本。在本篇博文中了解使用 OpenTelemetry 来检测 PHP 应用程序是多么简单。 我们很高兴推出 OpenTelemetry PHP 的 Elastic Distribution 的第一个 alpha 版本。在这篇文章中&…

十九、石英晶体振荡电路

石英晶体振荡电路 1、石英晶体的特点、等效电路、特性曲线; 2、石英晶体振动器的特点, 3、石英晶体振动器的振荡频率

【爱给网-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

滑动窗口算法专题(1)

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

Java调用数据库 笔记06 (修改篇)

1.创建Java的普通class类 2.加载驱动 Class.forName("com.mysql.jdbc.Driver"); 3.驱动管理类调用方法进行连接,得到连接对象 DriverManager.getConnection(url, user, password); 其中设置参数: static final String url "jdbc:my…

python中ocr图片文字识别样例(二)

一、说明 本次解决图片相关出现中文乱码问题,属于上篇文章的优化,前提条件依赖上篇文章的包,当然ocr的具体应用场景很多,根据自身需求进行调整 二、具体实现 2.1 代码实现: # -*- coding: utf-8 -*- import easyoc…

电气设备施工现场风险状态判断ai模型训练数据集

电气设备施工现场风险状态判断ai模型训练数据集 id:18 电气设备施工现场工人人工智能学习数据和工作环境安全数据,建立系统化管理体系,改变全球EHS范式,预防工业事故。数据集记录了387709例子电力设施建设以及施工现场相关的灾害安全环境数据…

电力行业螺钉螺帽螺丝缺失检测数据集 voc yol

电力行业螺钉螺帽螺丝缺失检测数据集 数据集描述 该数据集旨在用于电力行业中的螺钉、螺帽、螺丝等紧固件的缺失检测任务。数据集包含了大量的图像及其对应的标注信息,可用于训练计算机视觉模型,以识别和定位电力设施中的螺钉、螺帽、螺丝等部件是否存在…

【零成本】七日杀 服务器搭建 异地联机 无需公网IP、服务器

主要内容 什么是七日杀 搭建前需要准备什么 详细步骤 1.Steam中下载七日杀服务器工具 2.修改七日杀服务配置文件 3.启动七日杀服务器应用 4.运行 MoleSDN 进行异地联机 5.小伙伴打开游戏加入 鼠鼠的服务器 什么是七日杀 《七日杀》是一款沙盒生存恐怖游戏,…