什么是ARP
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。
在局域网环境中,数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。
工作流程

局域网内有设备 A(IP:192.168.2.97,MAC:10:5f:ad:ba:a3:2e)和设备 B(IP:192.168.2.180,MAC:0c:b9:83:5c:9c:06),当 A 需要向 B 发送数据时,ARP 的工作步骤如下:
1. 检查本地 ARP 缓存表
设备 A 首先查询自己的ARP 缓存表,查看是否有 192.168.2.180 对应的 MAC 地址:

- 若缓存表中已有记录(如之前通信过),A 直接使用该 MAC 地址封装数据帧并发送给 B,流程结束。
- 若缓存表中无记录,进入下一步。
2. 发送 ARP 请求报文(广播)

设备 A 生成一个ARP 请求报文,内容为:
“谁有 IP 地址 192.168.2.180?请将你的 MAC 地址告诉我,我的 IP 是 192.168.2.97,MAC 是 10:5f:ad:ba:a3:2e。”
该报文通过广播方式发送(目标 MAC 地址为FF:FF:FF:FF:FF:FF),即局域网内所有设备都会收到该请求。
3. 接收并响应 ARP 请求(单播)

局域网内所有设备收到 ARP 请求后,会检查报文中的目标 IP 地址是否与自己的 IP 一致:
- 非目标设备(如其他设备 C、D)会忽略该请求。
- 目标设备 B 发现请求中的 IP 地址(192.168.2.180)与自己的 IP 一致,会生成ARP 响应报文,内容为:
“我是 192.168.2.180,我的 MAC 地址是 0c:b9:83:5c:9c:06。”
该报文通过单播方式直接发送给设备 A(目标 MAC 为 A 的 MAC 地址)。
4. 更新 ARP 缓存表并通信
设备 A 收到 B 的 ARP 响应后,会将 “IP:192.168.2.180 → MAC:0c:b9:83:5c:9c:06” 的映射关系存入自己的 ARP 缓存表
之后,A 即可使用 B 的 MAC 地址封装数据帧,实现与 B 的直接通信。

ARP中间人攻击原理
概述
中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”。
攻击原理
利用ARP协议漏洞进行的攻击—ARP欺骗
1、PC1给PC3发送数据:网络层(IP包)10.1.1.1 10.1.1.3 端口号 Hello,PC3 (源IP地址 目标IP 源端口号 目标端口号 数据)
2、到数据链路层后:数据帧包__ AA 10.1.1.1 10.1.1.3 端口号 Hello,PC3 (目标MAC地址[PC3的未知] 源MAC地址 源IP地址 目标IP 源端口号 目标端口号 数据)
3、ARP协议出现
“我是10.1.1.1,我的MAC地址为AA,谁是10.1.1.3,你的MAC地址是什么呀?”ARP协议发送广播MAC地址(FF-FF-…12个F):FF AA 10.1.1.1 10.1.1.3 端口号 Hello,PC3
4、局域网内所有主机都收到这个广播,PC2会丢弃这个包;PC3收到包后会单播应答它,CC AA 10.1.1.1 10.1.1.3 端口号 Hello,PC1,并通过交换机查询MAC地址表,将响应包传递给PC1,PC1会在第一时间建立一个ARP缓存表:10.1.1.3 CC;
5、漏洞出现:ARP缓存表遵循的规则是谁后到达就学习谁,由于ARP没有验证功能,所以PC2使用攻击工具不停发送虚假的ARP应答,PC1的ARP缓存表就会变成了10.1.1.3 BB;
6、从此PC1发送数据就要先经过PC2,(BB AA 10.1.1.1 10.1.1.3 端口号 数据),PC2截获获取数据后再修改目标MAC地址(CC AA 10.1.1.1 10.1.1.3 端口号 数据),然后转发给PC3,完成攻击。
实操
Win
工具:alandau/arpspoof:适用于 Windows 的简单 ARP 欺骗器
1 | D:\CTFtool\ARP>arpspoof.exe --help |
列出可用的网卡
1 | arpspoof.exe --list |

开始欺骗

wireshark过滤数据包


盗取用户cookie

kali
1 | fping -g 192.168.2.0/24 -a -q |

1 | nmap -sn 192.168.1.0/24 # 仅检测192.168.1.0/24网段的存活主机 |

注意
如果未开启 IP 转发:你的机器会直接丢弃这些流量,导致目标主机和网关之间的通信彻底中断(目标会发现断网并快速恢复 ARP 缓存,攻击效果短暂且明显)
linux系统出于安全考虑禁止了IP转发功能,所以需要手动打开,在/proc/sys/net/ipv4/ip_forward里面数值是0,改为1就允许了IP转发
使用echo 1 > /proc/sys/net/ipv4/ip_forward 实现该操作
1 | arpspoof -i eth0 -t 192.168.2.180 192.168.2.1 |