(SEED-Lab) ARP Cache Poisoning Attack Lab

欢迎大家访问我的GitHub博客

https://lunan0320.cn


文章目录

  • (SEED-Lab) ARP Cache Poisoning Attack Lab
  • 一、实验目标
  • 二、实验原理
  • 三、实验过程
  • 3.1 Task 1: ARP Cache Poisoning
  • 3.1.1 Task1A(using ARP request)
  • 3.1.2 Task 1B (using ARP reply)
  • 3.1.3 Task 1C (using ARP gratuitous message)
  • 3.2 Task 2: MITM Attack on Telnet using ARP Cache Poisoning
  • 3.2.1 Step1
  • 3.2.2 Step2
  • 3.2.3 Step3
  • 3.2.4 Step 4
  • 3.3 Task 3: MITM Attack on Netcat using ARP Cache Poisoning
  • 四、参考文献


一、实验目标

掌握ARP协议
利用ARP缓存污染攻击
应用中间人攻击
编写嗅探程序

二、实验原理

ARP是用于主机去根据目标IP寻找MAC地址的方法,ARP常见的利用攻击的方法有缓存污染攻击和中间人攻击。
缓存污染攻击中,可以接收伪造的IP对应的MAC地址,从而将自己的ARP Cache污染成了错误的映射关系,继而在后续的数据包的转发中将数据包发送到错误的主机。
中间人攻击是先对靶机的ARP缓存污染,继而接收到靶机发送出去的数据包,中间人对其进行篡改后,然后重新发送。

三、实验过程

3.1 Task 1: ARP Cache Poisoning

首先使用ARP请求发送数据包,可以看到,回显sent 1 packets 说明构造的ARP包可以成功send。

wireshark 如何查看 wireshark如何查看丢包率_ARP


wireshark 如何查看 wireshark如何查看丢包率_http_02


Host A 、HostB、以及中间人M的IP地址以及MAC地址如下表

Host IP HWaddr

A 10.0.2.5 08:00:27:e1:e7:55

B 10.0.2.6 08:00:27:90:ba:d6

M 10.0.2.8 08:00:27:78:9a:1e

3.1.1 Task1A(using ARP request)

在发送之前,查看攻击机M的ARP信息,攻击机M的IP地址为10.0.2.8,此时有10.0.2.3以及10.0.2.1host对应发送的硬件地址。

wireshark 如何查看 wireshark如何查看丢包率_http_03


此时查看hostA的相关信息,可以看到IP地址为10.0.2.5

wireshark 如何查看 wireshark如何查看丢包率_ARP_04


同理,可以查看B的arp以及IP地址为10.0.2.6

wireshark 如何查看 wireshark如何查看丢包率_http_05


在中间人M中构造arp request数据包,使得src_ip是中间人M的IP地址,dst_ip是honstA的ip地址

wireshark 如何查看 wireshark如何查看丢包率_http_06


此时在中间人M中运行request代码,可以看到能够成功发送伪造的ARP数据包。

wireshark 如何查看 wireshark如何查看丢包率_ARP_07


在host A中通过wireshark抓包,查看伪造的数据包的去向。可以看到,内容是who has 10.0.2.5?Tell 10.0.2.6。其中,10.0.2.5是host A的IP地址,10.0.2.6是host B的IP地址。说明伪造了一条从host B发出的,想要得到host A 的 IP地址的ARP数据包。

wireshark 如何查看 wireshark如何查看丢包率_安全_08


此时,查看host A中的ARP Cache中的信息如下。

可以看到,成功完成了ARP request方向的ARP_Attack。因为host A的ARP Cache中已经添加了伪造的IP地址10.0.2.6(host A)以及其对应的硬件地址08:00:27:78:9a:1e(中间人M)。

wireshark 如何查看 wireshark如何查看丢包率_ARP_09

3.1.2 Task 1B (using ARP reply)

在主机M上,构建一个ARP应答包并发送到主机A。检查M的MAC地址是否已映射到A的ARP缓存中的B的IP地址

在进行Task1B之前,由于在Task1A中已经使得host A中有了host B(10.0.2.6)的缓存。因此需要先在host A的ARP Cache中删除host B的相关信息。

wireshark 如何查看 wireshark如何查看丢包率_ARP_10


首先在中间人M中构造ARP_Reply数据包,其中构造的src_ip是host B的IP地址,dst_ip是host A的IP地址,但是需要伪造的是src的MAC地址。

需要将src的硬件地址设置为中间人M的硬件地址。dst_mac是正常的host A的MAC地址。

wireshark 如何查看 wireshark如何查看丢包率_ARP_11


在中间人M中运行此代码,伪造ARP_reply的数据包。可以看到,成功发送到了host A.

wireshark 如何查看 wireshark如何查看丢包率_安全_12


在host A中使用wireshark 抓包查看数据信息,可以看到这个reply数据包告知host A,10.0.2.6的MAC地址是“08:00:27:78:9a:1e”

wireshark 如何查看 wireshark如何查看丢包率_网络_13


此时,再次查看host A的ARP Cache信息,可以看到,新增了10.0.2.6的硬件地址,即是伪造的M的MAC地址。伪造成功!

wireshark 如何查看 wireshark如何查看丢包率_安全_14

3.1.3 Task 1C (using ARP gratuitous message)

首先在开始任务之前,同样需要先在host A的ARP Cache中清除之前已经有的10.0.2.6的缓存MAC地址

wireshark 如何查看 wireshark如何查看丢包率_http_15


在host M中写gratutious的代码。其中根据题目要求,需要设置的src地址和dst地址需要是相同的。

wireshark 如何查看 wireshark如何查看丢包率_安全_16


还需要注意的是其中的dst MAC地址是需要设置为ff:ff:ff:ff:ff:ff。这样的MAC地址表示发送的是广播包,即broadcast。

wireshark 如何查看 wireshark如何查看丢包率_http_17


因此,可以在host M中得到如下代码。

wireshark 如何查看 wireshark如何查看丢包率_http_18


在中间人M中运行gratuitous.py代码,可以看到成功sent数据包。

wireshark 如何查看 wireshark如何查看丢包率_wireshark 如何查看_19


在host A中打开wireshark抓包分析,可以看到收到了广播包,内容是关于10.0.2.6的gratuitous数据包。

wireshark 如何查看 wireshark如何查看丢包率_ARP_20


此时,再在host A中查看arp情况,发现host A中成功缓存了10.0.2.6对应的中间人M的MAC地址。攻击成功!

wireshark 如何查看 wireshark如何查看丢包率_wireshark 如何查看_21

3.2 Task 2: MITM Attack on Telnet using ARP Cache Poisoning

3.2.1 Step1

此处需要实施的是中间人攻击,这部分可以参考Task1的scapy使用方法,可以通过伪造ARP数据包来完成。

Poisoning host A的思路是,src的IP地址是host B的IP地址,dst的IP地址是host A的IP地址。src的MAC地址是中间人M的MAC地址,dst的MAC地址是广播broadcast的MAC地址,即’ff:ff:ff:ff:ff:ff’。这样做的目的是使得host A将自己的ARP Cache设置为host B的IP对应到了中间人M的MAC地址,这样就成功使A的ARP Cache中毒。

同理,对于host B的Poisoning的思路也一样。可以使用如下代码来实现。

首先是对一些已知信息的定义。

wireshark 如何查看 wireshark如何查看丢包率_网络_22


对Poisoning host A的定义如下。

wireshark 如何查看 wireshark如何查看丢包率_wireshark 如何查看_23


同理,Poisoning host B的定义如下。

wireshark 如何查看 wireshark如何查看丢包率_安全_24

此时即可在中间人M中运行cache_poisoning.py的代码。
此处需要注意的是此处构造ARP数据包是需要较高的权限的,在seed普通用户下是无法运行成功的。

因此,转换到root用户,重新运行。可以看到,成功运行了代码。并发送了两个数据包。

wireshark 如何查看 wireshark如何查看丢包率_wireshark 如何查看_25


在host A中查看ARP Cache,发现在sent packet之后,A中成功达到了ARP缓存污染的效果,使得host B的IP对应了中间人M的MAC地址。

wireshark 如何查看 wireshark如何查看丢包率_wireshark 如何查看_26


此处可以到host B上查看,发现host B的ARP Cache也被成功污染了。其中host A的IP地址对应了

wireshark 如何查看 wireshark如何查看丢包率_ARP_27

3.2.2 Step2

使用host B去ping host A的IP地址:可以看到100%的丢包率,说明host A的连通性是不具备的。

wireshark 如何查看 wireshark如何查看丢包率_安全_28


此时在host A中使用wireshark抓包工具去查看:可以看到,源地址是host B的IP,目的IP是host A的IP,发送的都是request请求包,但是都没有reply包的回显。显示的均为no response found!

wireshark 如何查看 wireshark如何查看丢包率_wireshark 如何查看_29

使用host A去ping host B的IP地址,同理。

可以看到100%的丢包率,说明host A的连通性是不具备的。

wireshark 如何查看 wireshark如何查看丢包率_ARP_30


在host B中使用wireshark抓包的数据包也均为not found!

wireshark 如何查看 wireshark如何查看丢包率_网络_31

3.2.3 Step3

在中间人M中打开IP forwarding 功能。

wireshark 如何查看 wireshark如何查看丢包率_ARP_32


此时,与Step2相同,再次测试host A和host B的连通性。

host A去ping host B:

此时发现是可行的,没有数据包的丢失。

wireshark 如何查看 wireshark如何查看丢包率_wireshark 如何查看_33

在host B中使用wireshark抓包查看情况:

可以看到,host A发送出去的ICMP包都得到的reply,其中黑色部分即是forward IP 的情况,对host的一个重定向过程。

wireshark 如何查看 wireshark如何查看丢包率_安全_34


同理,尝试host B去ping host A的IP地址。

可以看到,数据包也是没有丢失的,均得到了reply。

wireshark 如何查看 wireshark如何查看丢包率_网络_35


在host A中使用wireshark查看数据包情况,如下图:

wireshark 如何查看 wireshark如何查看丢包率_wireshark 如何查看_36

3.2.4 Step 4

1、在host A中telnet连接Server B

wireshark 如何查看 wireshark如何查看丢包率_ARP_37

成功连接,输入命令查看ip地址。如图,在host A中显示的是Server B的IP地址,说明连接成功。.

wireshark 如何查看 wireshark如何查看丢包率_网络_38


在Server中使用wireshark查看数据包

wireshark 如何查看 wireshark如何查看丢包率_wireshark 如何查看_39


当在中间人M中关闭forwarding功能。

wireshark 如何查看 wireshark如何查看丢包率_ARP_40

此时当在host A中输入命令的时候没有显示。即host A与Server B无法通信,无法在host A中键入信息。

wireshark 如何查看 wireshark如何查看丢包率_ARP_41

2、首先在中间人M中设置IP forward使得 hostA可以连通hostB

wireshark 如何查看 wireshark如何查看丢包率_ARP_42

接着在中间人M中运行污染ARP缓存的程序,每3秒就转发一次ARP更新的数据包,将host A 和host B中的缓存一直保持是对应的中间人M的MAC地址的情况。

wireshark 如何查看 wireshark如何查看丢包率_wireshark 如何查看_43


在中间人M中抓包分析;可以看到构造的广播包成功污染了host主机的ARP对应关系

wireshark 如何查看 wireshark如何查看丢包率_安全_44


查看执行程序后host A和host B的IP的对应的MAC地址,发现均是对应了M的MAC地址。

wireshark 如何查看 wireshark如何查看丢包率_http_45


wireshark 如何查看 wireshark如何查看丢包率_安全_46


在host A中telnet连接host B

抓包可以看到,显示了重定向的功能,比如说从A到B的数据包,先到了中间人M这里,M使用了IP_forward功能,再发给了B

wireshark 如何查看 wireshark如何查看丢包率_ARP_47


可以看到,在hostA中可以成功连接hostB,并且成功执行了pwd的指令

wireshark 如何查看 wireshark如何查看丢包率_网络_48


此时,在中间人M中取消IP forward功能

wireshark 如何查看 wireshark如何查看丢包率_ARP_49

在中间人M中运行sniff_spoof.py程序,并且再次在hostA中键入pwd指令,可以观察到,此时显示出来的是ZZZ

wireshark 如何查看 wireshark如何查看丢包率_ARP_50


抓包分析这个过程,过滤tcp包,分析一个过程。由10.0.2.5(host A)发送到10.0.2.6(host B)。

wireshark 如何查看 wireshark如何查看丢包率_ARP_51


抓包分析这个过程,可以看到,此时从A发送到B的报文,显示的目标MAC地址是M的MAC地址,数据包是先去了M,可以看到,我们发送的pwd中的p被组装成一个tcp数据包发送了过去,先到中间人M被中间人处理。

wireshark 如何查看 wireshark如何查看丢包率_网络_52


可以看到,host A发送到host B的数据被中间人M处理后转发了出来,转发给host B,虽然此时的目标IP是host A,但是他的目标MAC地址是中间人M的MAC地址,因此,这个数据包还是会被中间人M截获,但是由于我们设置了对于源地址是host B,目标地址是host A。但是此时的数据Data字段均被置为了Z,我们输入的p被处理为了Z,其他数据包也均是这种情况。说明攻击是成功的!

wireshark 如何查看 wireshark如何查看丢包率_http_53

3.3 Task 3: MITM Attack on Netcat using ARP Cache Poisoning

本实验与Task2类似,只需对Z变换为遇到first_name“lunan”改为AAAAA即可。

首先是开启IP的forward功能,使得host A可以与host B连接。

wireshark 如何查看 wireshark如何查看丢包率_http_54

此时打开ARP污染程序,使之每隔3秒发送一次数据包,这样做的目的是为了使得从A发送到B以及从B发送到A的数据包能够第一时间发送到中间人M,使得数据包先被M处理。

wireshark 如何查看 wireshark如何查看丢包率_wireshark 如何查看_55


此时在host B中开启端口9090,并且host A中运行nc程序,目的IP是host B的地址,端口为9090。

此时发现host A发送什么,host B就收到什么,即使是first_name也没有什么改变。

wireshark 如何查看 wireshark如何查看丢包率_ARP_56


此时,关闭中间人M的IP数据包的forward功能

wireshark 如何查看 wireshark如何查看丢包率_wireshark 如何查看_57

此时再次在host A中输入内容,在host B中得到回显。

发现输入python内容时候,回显不变。

但是输入的内容如果包括first_name “lunan”的话,返回结果会将first_name替换为“AAAAA”。说明攻击成功!

wireshark 如何查看 wireshark如何查看丢包率_http_58

四、参考文献

[1] ARP欺骗原理及实现 - 知乎 (zhihu.com) https://zhuanlan.zhihu.com/p/374650070

[2] ARP 协议详解 ARP报文结构_u010069213的专栏-_arp请求报文采用什么方式传播

[3] ARP报文格式详解 (biancheng.net) [4]中间人攻击——ARP欺骗的原理、实战及防御 - 简书 (jianshu.com)
https://www.jianshu.com/p/d6f84e2e88c6