目录
- 一、ARP协议和ARP攻击
- 1.ARP协议
- 2.利用Wireshark分析ARP数据包
- 3.ARP攻击
- 二、kali实现ARP攻击和ARP欺骗
- 1.实验过程
- 2.问题记录T_T
一、ARP协议和ARP攻击
1.ARP协议
ARP协议,地址解析协议(Address Resolution Protocol),用来实现IP地址到物理地址的映射。
每一台主机都设有一个ARP高速缓存(ARP cache),里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表,主机如何获取这些地址的?
例如,主机A向本局域网上的某台主机B发送IP数据报时,要先在ARP高速缓存中查看有无主机B的IP地址,如果有,就在ARP高速缓存标中查出对应的硬件地址,再把这个硬件地址写入MAC帧,然后发送到该硬件地址。
如果查不到主机B的IP地址(有可能是B刚入网,或者A刚加电,高速缓存还是空的),A就自动运行ARP,查找主机B的硬件地址。
- ARP进程在本局域网上广播发送一个ARP请求分组。
- 在本局域网上的所有主机运行的ARP进程都收到该ARP请求分组。
- 主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下ARP请求分组,并单播向主机A发送ARP响应分组。
- 主机A 收到主机B的ARP相应分组以后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。ARP对保存在高速缓存中的每一个映射地址都设置生存时间,凡是超过生存时间的项目就从高速缓存中删除掉。
在Windows系统中可以通过arp -a
查看arp缓存表信息。
当本网段新连入一台设备,并且与本主机产生通信后,arp表更新为:
2.利用Wireshark分析ARP数据包
新加入本网段一台新设备(分配的ip为192.168.43.131),利用Wireshark捕获ARP数据包
ARP请求包
ARP回应包
ARP协议中各字段
Hardware type :硬件类型,标识链路层协议
Protocol type: 协议类型,标识网络层协议
Hardware size :硬件地址大小,标识MAC地址长度
Protocol size: 协议地址大小,标识IP地址长度
Opcode: 操作代码,标识ARP数据包类型,1表示请求request,2表示回应reply
Sender MAC address :发送者MAC地址
Sender IP address :发送者IP地址
Target MAC address :目标MAC地址
Target IP address: 目标IP地址
说明:我这里使用的是手机热点,两台设备连入热点。上面arp的请求和回应是连入同一个热点的两个设备之间。手机的mac地址可以通过终端模拟器(Android Terminal Emulator 或者 Termux),输入命令 ip add
查看。如果想在手机上查看连接到本机热点的设备ip地址和硬件地址,可输入命令ip neigh
查看
3.ARP攻击
ARP欺骗攻击原理:
ARP欺骗攻击建立在局域网主机间相互信任的基础上的。
比如:假设A、B、C在同一个局域网中,网关为192.168.43.1,IP地址和MAC地址分别假设如下。假设C是攻击者。
A | B | C | |
---|---|---|---|
IP地址 | 192.168.43.2 | 192.168.43.3 | 192.168.43.4 |
MAC地址 | macA | macB | macC |
当A发广播询问:我是192.168.43.2,硬件地址macA,我想知道主机IP是192.168.43.3的硬件地址。
此时B回应:我是192.168.43.3,硬件地址是macB。
如果此时IP地址是192.168.43.4的C非法回应:我是IP192.168.43.3,我的硬件地址是macC。
这样A就会收到两个ARP回应包,由于ARP遵循后到优先规则,所以如果C持续不停发出ARP欺骗包,就一定能够覆盖掉正常的ARP回应包(也称为ARP毒化)。然后A就会误信192.168.43.3的硬件地址是macC。这样当主机A向主机B发送数据时,主机C就劫持了主机A发送给主机B的数据,这就是ARP欺骗的过程。
相反,如果主机B向主机A发送数据,主机C依然可以以同样的ARP欺骗,劫持主机B发送给主机A的数据,这样就形成了“中间人攻击”。
还有一种ARP欺骗的方法:主机C直接冒充网关,此时主机C会不停的发送ARP欺骗广播,大声说:我是192.168.43.1,硬件地址是macC。此时局域网内所有主机都会被欺骗,更改自己的缓存表,C将会监听到整个局域网发送给互联网的数据报。
ARP攻击分类:
1、ARP泛洪攻击
通过向网关发送大量ARP报文,导致网关无法正常响应。首先发送大量的ARP请求报文,然后又发送大量虚假的ARP响应报文,从而造成网关部分的CPU利用率上升难以响应正常服务请求,而且网关还会被错误的ARP表充满导致无法更新维护正常ARP表,消耗网络带宽资源。
2、ARP欺骗主机的攻击
攻击者通过ARP欺骗冒充网关,使得局域网内被攻击主机发送给网关的流量信息实际上都发送给攻击者。
3、欺骗网关的攻击
把别的主机发送给网关的数据通过欺骗网关的形式使得这些数据通过网关发送给攻击者。这种攻击目标选择的不是个人主机而是局域网的网关,这样就会攻击者源源不断的获取局域网内其他用户数据。
4、中间人攻击
最典型的攻击之一,中间人攻击是同时欺骗局域网内的主机和网关,局域网中用户的数据和网关的数据会发给同一个攻击者,这样,用户与网关的数据就会泄露。
5、IP地址冲突攻击
通过对局域网中的物理主机进行扫描,扫描出局域网中的物理主机的MAC地址,然后根据物理主机的MAC进行攻击,导致局域网内的主机产生IP地址冲突,影响用户的网络正常使用。
二、kali实现ARP攻击和ARP欺骗
1.实验过程
首先声明kali实现ARP攻击实验所用的环境,一部手机开启热点,一台电脑和一台手机连接同一个热点。 网关(开启热点的手机):192.163.43.1; 电脑,kali:192.168.43.217; 手机:192.168.43.98。首先我的主机是Kali,通过 ip add
查看本机的IP。
然后通过fping -g 本主机IP
查看同一局域网中的主机IP。
也可以用nmap -sP 网络网段
查看同一局域网的主机。
确定了192.168.43.98就是接下来的攻击目标(也就是连入该热点的手机)。可以通过Termux查看本机IP来验证,并且此时是可以上网的。
现在在kali中通过arpspoof
实现ARP攻击。
( 如果输入arpspoof命令出现了bash: arpspoof:未找到命令
这种情况,可参考文章https://blog.csdn.net/qq_42137895/article/details/105250215 )
此时发现,被攻击主机网络十分缓慢甚至无法上网。
停止ARP攻击后,被攻击主机又可以上网了。
接下来进行ARP欺骗
除了arpspoof以外,还需要使用eteercap和driftnet 进行嗅探。
首先要开启IP转发功能,linux系统出于安全考虑不支持IP转发,需要修改/proc/sys/net/ipv4配置文件的ip_forward。
关于/proc/sys/net/ipv4/下文件的详细解释可查看文章https://www.cnblogs.com/happy1983/p/9173100.html
将ip_forward的值改为1,原来默认为0。
(如果想进行断网攻击,就可修改回0,如果这里是0,被攻击主机不能上网,是1就可以上网)
使用arpspoof,此时被攻击主机可以正常上网,欺骗成功(该窗口不要关)。
接下来使用ettercap进行嗅探。
当靶机登陆http网站时,就可以捕获用户登录信息。
但我这里一直显示SEND L3 ERROR,显示不出用户登录信息,不知道是什么原因。。。T_T
使用driftnet进行嗅探,当靶机浏览图片时可以截获图片。
2.问题记录T_T
- arpspoof最初查询不到是因为PATH路径的问题,需要添加PATH路径,修改/etc/profile文件,但是修改后不管是
source /etc/profile
还是. / etc/profile
都不是永久生效,注销和重启也都不行。 - 使用arpspoof时,最开始命令中没有加-r,断网攻击和欺骗都失败了,后来加上-r,就可以了,查了一下-r这个参数。但我还是不明白为什么没有-r参数会失败。
-r 毒化两个主机(目标和主机(host))以捕获两个方向的网络流量。(仅仅在和-t参数一起使用时有效)
- 使用ettercap捕获用户登录信息的时候,一直显示SEND L3 ERROR,但是没找到具体原因。