ARP协议原理与ARP攻击欺骗及模拟实战

一. ARP协议
ARP(地址解析协议)是一个三层协议,但是工作在二层。所以也有的地方把它称为2.5层协议
二层数据交换靠MAC地址,这个时候ARP协议用来将一个已知的IP地址解析为MAC地址,,从而进行二层数据交互
二. 工作阶段
主机向另一台主机发送ARP请求,然后接收到ARP请求后,会发ARP响应
1. ARP请求
主机A向主机B发送ARP请求,然后主机B接收到后,向主机A发送ARP响应。
但是现在有个问题,ARP是工作在二层,二层靠MAC地址进行传送数据,所以主机A向主机B发送数据之前,他得先知道主机B的MAC地址,但是他现在不知道,所以主机A在分装ARP请求的时候,目的MAC地址是广播地址
他是以广播的方式来请求。
2. ARP响应
主机B收到后,会检测数据帧,发现IP和自己一样,说明是在访问主机B的MAC地址,然后它再封装一次。
这就是一个单波的响应。
3. 实例
我们有两台虚拟机,win10和win7
win10的IP是192.168.40.131,win7的IP是192.168.40.130,这俩是一个网段的,在一个局域网。
我们在win10打开wireshark准备抓包。
现在是没有任何流量的,我们用win10去ping win7
我们先不看结果,先猜一下,ping使用的是ICMP协议,所以这个协议一定有,那么之前为了找到win7,就一定会进行局域网的广播,所以在ICMP协议前就有ARP协议的存在。
和我们想的一样。
我们看一下。
首先是 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报文格式
我们简单画一个这个数据包结构
我们可以看一下包
我们可以看到它没有网络层的数据信息,所以这个结构应该是这样的。
5. ARP缓存
ARP缓存主要是为了避免去重复发送ARP请求
比如上面的那个环境,我们再ping一下
可以看到,ARP请求没有了,因为我们的缓存表中已经记录了对应IP的MAC地址。
我们可以通过 arp -a
查看缓存表
我们可以通过arp -d
来清空缓存
这个需要管理员权限
我们用管理员打开cmd
可以看到缓存就没了,剩的那个是组播地址不用管他
有一个这样的网络
我们拿PC1去ping PC2,它肯定是可以ping通的,这是后我们看一下ARP缓存表
1.10是本机的,1.20是对端主机的,它的type类型是ARPA,是从F0/0发送的
我们想要清除ARP的话,用clear arp-cache
命令
我们可以手动添加ARP
1 | arp 192.168.1.20 cc03.143c.0000 arpa |
也可以手动删除
1 | no arp 192.168.1.20 cc03.143c.0000 arpa |
那如果我们手动添加的时候,把MAC地址给改了,即MAC地址和IP地址对应的主机不同,会发生什么
1 | arp 192.168.1.20 cc03.143c.0011 arpa |
那么现在我们ping 192.168.1.20能不能ping通?
肯定ping不同
因为我们ARP是在二层交互,二层就靠MAC地址来交互,你给了一个虚假的MAC地址,他是肯定不同的。
三. ARP欺骗与ARP攻击
1. ARP攻击
和ARP欺骗不同,他的目的是让目标机访问不了网
主机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地址呢?
这个时候主机A会将数据发给主机C,然后主机C再发给出口路由器。
这个过程中,主机C也会发送ARP应答。
(2) 欺骗主机
主机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 |
1 | apt-get upgrade |
然后安装工具 dsniff
1 | apt-get install dsniff |
2. ARP攻击模拟
ARP攻击不仅要搞主机IP,还要搞主机的网关
win10的IP是 192.168.40.134,网关是 192.168.40.2
然后确认一下kali的网卡
1 | ifconfig |
有一块eth0网卡
输入:
1 | arpspoof -i eth0 -t 192.168.40.134 192.168.40.2 |
这个 00:50:56:28:13:28 就是kali的MAC地址
我们在win10上抓一下包
可以看到清一色的全是 00:50:56:28:13:28
这个时候这台win10就无法访问网关了,即无法上外网。
我们看看抓包内容
看包的内容,看不出啥东西。
但是我们看看最开始,我们ping的那个抓包,那个是不是就两个ARP啊,这里一堆ARP报文,这极有可能是ARP攻击。
3. ARP欺骗模拟
ARP欺骗简单,就有点像中间商,win10的数据先交给kali,然后kali再交给网关。
我们首先要开启kali的IP转发功能,我们可以命令开启
我们重新开一个终端,ARP攻击让它继续
1 | echo 1 >> /proc/sys/net/ipv4/ip_forward |
打开后,win10就能上网了
我们在kali打开wireshark
我们筛选ip 192.168.40.134
1 | ip.addr == 192.168.40.134 |
抓到包了。
4. ARP欺骗工具
我们这里再用另外的工具试试
kali里自带了一个工具叫 ettercap-graphical
我们打开它
选择好网卡后点击勾。
点击这个 hostlist
找到目的IP
添加到目标1
下面就会告诉你添加好了。
开启ARP毒化
然后我们打开客户端
1 | ettercap -Tq -i eth0 |
我们打开一个http的网页,截取一下密码。
注意,这个方法只能整http,有时间会出一篇截取https的文章。