ARP 协议
什么是 MAC 地址
MAC 地址是固化在网卡上的网络标识,由 Ieee802 标准规定。
什么是广播
向同一个网段内的设备,发送数据包,广播 IP 地址是同网段最后一个 IP 地址。
认识 ARP 协议
ARP 的全称是地址解析协议,我们通过 ARP 协议获取对方的 MAC 地址,PC 机发送 ARP 协议包,通过交换机,到达目标 IP 地址的 PC 机,从而获取对方的 MAC 地址,但是 ARP 有一个限制,那就是必须在同一个网段内,也就是说交互地址信息的 PC 机是在一个局域网内。
ARP 协议原理
ARP 是请求包,只要是同一个网段的都可以收到。
ARP 协议是 TCP/IP 模型网络层的协议,网络层是对传输层传下来的数据段进行封装,形成数据包,而对于数据包而言,它只关心 IP 地址,因为网络层是根据 IP 地址,确认这个数据包传给谁的。
而在网络的传输中,数据包在数据链路层被封装成以太网帧,而以太网帧是通过首部的 MAC 地址来寻找设备,所以,当我们向目标机器发送数据的时候,我们要先得到目标机器的 MAC 地址。
在数据链路层,以太网帧是根据前端的 MAC 地址,找寻到目标机器的网卡,从而向他交付数据包,目标机器在接收到数据包的时候,会判断数据包的 MAC 地址跟自己的 MAC 地址是不是一样的,一样的,就会向上传。
也就是说,当我们不知道目标机器的 MAC 地址的时候,我们是无法向它传递数据包的,这个时候,就用到了我们的 ARP 协议,也就是 ARP 请求,这个请求是一个广播包,它会询问同一个局域网内,目标机器 IP 地址,它的 MAC 地址是多少,当目标机器接收到这个广播包的时候,发现它的 IP 地址正是自己,这个时候,目标机器就会以单播的方式,返回一个数据包,这个数据包里,就有我们想要的目标机器的 MAC 地址。
ARP 缓存
现在,我们知道了,当我们给一个 PC 机发送 ARP 请求的时候,它会通过广播的方式,询问目标机器的 MAC 地址,那如果,我们每次要向目标发送数据包的时候,都要 ARP 请求的话,就很麻烦了,这个时候,我们就想到了 ARP 缓存表,把之前获取到的 IP 地址和 MAC 地址对应起来,存储下来,当我们在下一次使用的时候,就可以直接调用 ARP 缓存表的数据,对目标 IP 地址进行访问。
通过对 ARP 缓存的使用,有效降低了网络拥塞,在一定程度上防止了 ARP 的大量广播,在一般情况下,ARP 缓存不仅发送方会缓存 MAC 地址表,接收方也会,缓存下来的 MAC 地址,有一定的有效期,过了这段时间,缓存就无效了。
ARP 协议拓展
根据 ARP 协议,还搞出了一个 RARP 协议,它的全称是逆地址解析协议,顾名思义,它的功能跟 ARP 协议是反过来的,它是通过 MAC 地址获得对方的 IP 地址,在这里,大家,会联想到 DHCP 协议,DHCP 协议,就是用来自动分配 IP 地址的,它分配地址的原理,就是根据 RARP 协议,将 MAC 地址转成 IP 地址。
【一一帮助安全学习,所有资源获取处一一】
①网络安全学习路线
②20 份渗透测试电子书
③安全攻防 357 页笔记
④50 份安全攻防面试指南
⑤安全红队渗透工具包
⑥信息收集 80 条搜索语法
⑦100 个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年 CTF 夺旗赛题解析
数据包结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ROpNw7Zk-1658488892426)(https://upload-images.jianshu.io/upload_images/26472780-fa4f91376576c91a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
ARP 协议包
实验环境:
PC1:物理机 win10(IP:192.168.42.1)【在此启动虚拟机】
PC2:虚拟机 kali(IP:192.168.42.128)
Wireshark(数据包流量捕获器)
根据我们使用的网卡选择对应的捕获选项,因为我们的 Kali 网络模式选择的是 Nat 模式,所以我们选择 Vmnet8。
在物理机上执行 Ping 命令,并输出如下信息[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YNBqlSgW-1658488892429)(https://upload-images.jianshu.io/upload_images/26472780-6e8af286ec034acc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
在 Wireshark 中筛选出 ARP 协议,查看抓包记录
查看捕获的 ARP 数据包,第一个为 ARP 请求包
其中第一帧有着数据包的详细信息,其中包括包的发送时间、包的大小、包的类型
第二帧表示以太网帧头部信息,其中源 MAC 地址为 00:50:56:c0:00:08(物理机),目标 MAC 地址为 ff:ff:ff:ff:ff:ff(广播地址)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qo1crHBd-1658488892444)(https://upload-images.jianshu.io/upload_images/26472780-8c0c553f0de5582f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
第三帧的内容为 ARP 协议内容,Request 表示该包是一个请求包。请求包中的详细内容,如下所示
我们用同样的方式去分析 ARP 的响应包[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IYSV7y16-1658488892447)(https://upload-images.jianshu.io/upload_images/26472780-fd77763211119571.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
其中,以下内容表示第一帧数据包的详细信息,其中包的大小为 60 字节[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qCHfD38a-1658488892450)(https://upload-images.jianshu.io/upload_images/26472780-090f9f2708018e6c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
第二帧包含帧的头部信息,源 MAC 地址(00:0c:29:01:7d:67),目标 MAC 地址(00:50:56:c0:00:08),其中源 MAC 地址是 Kali,目标 MAC 地址是物理机[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GstZLbrf-1658488892456)(https://upload-images.jianshu.io/upload_images/26472780-5b2d8eee9a31ced4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
第三帧,Reply 表示该包是一个响应包[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sA56imrN-1658488892460)(https://upload-images.jianshu.io/upload_images/26472780-ac9f69656033edfc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
ARP 协议与二层主机发现
二层主机发现
利用 TCP/IP 模型中链路层中的 ARP 协议,进行主机发现。好处就是 ARP 协议在局域网当中使用,局域网当中的数据包是不经过路由器,所以它的速度是比较快,而且数据包不会被过滤,因此能够保证我们的数据包能够到达我们的目标,而且接收到目标的响应,从而确认目标是否存在。坏处就是只能在一个子网中,进行二层发现。
Kali linux 自带工具 Netdiscover 可以针对特定子网进行多主机扫描。
<pre>netdiscover -h //查看帮助信息</pre>
-i 指定你的网卡
-r 扫描指定范围
-l 加载一个文件,文件当中包含我们要扫描的范围
-p 不发送任何的数据包,只做为嗅探,这样的一个过程,是不会被我们网络当中的设备发现,因为它只进行嗅探,将数据包发送到目标去,它就会确认当前主机是存活状态
-m扫描一个已知的MAC地址表或者是主机名
-f过滤,自定义过滤PCAP发送包的表达式
-s当我们发送arp请求时,我们每次休息几毫秒
-n表示一个节点,上一次IP的十进制来进行扫描
-c扫描的次数
-f快速扫描,来节约大量时间
-d忽略配置文件以及快速模式
-S在每一个请求过程中,开启休息时间
-p输出结果
-N不输出对应的头
-L一个输出模式,确定存活性扫描后,我们进行输出
复制代码
我们选择一条命令试一下
netdiscover -r 192.168.42.1/24
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sYXEG8m5-1658488892465)(https://upload-images.jianshu.io/upload_images/26472780-ab640775127ef123.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
这样子就证明了这些子网的 IP 地址是存活状态
ARP 地址欺骗
正常情况下:连接出口路由器的靶机,访问外网时,会将数据发送给出口路由器,再由出口路由器将数据发送到外网。
不正常的情况下:攻击者欺骗靶机,告诉他出口路由器是我的 MAC 地址,靶机相信了他的话,把访问外网的数据包错误的发送给了攻击者的 MAC 地址,导致靶机收不到外网返回的数据包,导致断网,这就是 ARP 欺骗。
ARP 地址欺骗过程
首先我们准备两台虚拟机,一台是 Kali,用来做攻击机,另一台是Winserver2003
,做为靶机,两台虚拟机网络模式,都采用 Nat 模式,处于同一个局域网下。
第一步,Netdiscover 发现同一个网段中的主机,寻找攻击目标
netdiscover -r 192.168.42.1/24
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3cDL52JQ-1658488892474)(https://upload-images.jianshu.io/upload_images/26472780-8e5b430c752c3eee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
192.168.42.1
是本机的 IP 地址,192.168.42.2
是虚拟机的网关、192.168.42.236
是靶机的 IP 地址
第二步,确认攻击目标处于联网状态[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ou12rO8i-1658488892477)(https://upload-images.jianshu.io/upload_images/26472780-cbc3d7a199da27bb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
然后在攻击机 Kali 上发起攻击
arpspoof -i eth0 -t
靶机 Ip 地址 靶机网关arpspoof -i eth0 -t 192.168.42.236 192.168.42.2
//欺骗主机192.168.42.236
,网关192.168.42.2
的 mac 地址是 kali 虚拟机物理接口 eth0 的 mac 地址
看到靶机无法上网[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mEIoqGKJ-1658488892481)(https://upload-images.jianshu.io/upload_images/26472780-d59f3574062f6683.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
然后再到攻击机 Kali 上停止攻击
ctrl+z
等待一段时间后,发现靶机恢复正常[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E9lKpBYj-1658488892485)(https://upload-images.jianshu.io/upload_images/26472780-382c00fec3bc313a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
ARP 地址欺骗防护
上网的设备统一采用 MAC 地址静态绑定,同时上安全设备进行保护。