ARP Cache Poisoning Attack Lab

本实验网络拓扑图如下所示: 一台Attacker主机M和两台Victim主机A、B:

Task 1: ARP Cache Poisoning

本实验的任务是要攻击A机器的ARP cache,在A的ARP缓存中,将B的IP地址对应到M的MAC地址上。

实验前的准备:

  1. ARP 缓存查看:

在A主机(10.9.0.5)上运行arp -n命令即可看到A主机的ARP cache,如下所示:

结果显示当前A主机没有ARP cache。

  1. 查看docker为当前实验容器创建的网卡:

在虚拟机上执行ifconfig可以查看对应于子网10.9.0.0/24的网卡名称:

  1. 查看各个主机的MAC地址(使用ifconfig命令):

M主机:

A主机:

B主

机:

攻击过程:

有三种攻击方法:

(1)使用ARP Request: M机器发送ARP请求到主机A。

(2)使用ARP Reply: M机器发送ARP Reply到主机A。

(3)使用ARP gratuitous message

Task 1.A (using ARP request)

  1. 主机A上查看ARP cache,结果如下:

  1. 主机A ping 主机B(10.9.0.6):

然后查看主机A的ARP

cache:

可以看到ARP cache中已经有了主机B的MAC地址,并且是正确的。

  1. 在M主机上创建arp_A_attack.py,文件内容如下:

然后添加执行权限,chmod +x arp_A_attack.py:

执行得到如下图

结果:

  1. 在主机A上查看ARP cache,结果如下:

Task 1.B (using ARP reply)

在Attacker主机M上创建新的脚本arp_B_attack.py,

内容如下:

这里有两种情况:

Scenario 1: B’s IP is already in A’s cache.

  1. 先使用arp -d 10.9.0.6命令清除A主机中的关于B主机的缓存并查看ARP cache:

  1. A主机ping B主机(10.9.0.6):

之后A主机中重新出现B主机的ARP缓存,并且对应正确。

结果如下:

  1. 在Attacker主机M上运行arp_B_attack.py:

  1. 在主机A上查看ARP cache,结果如下:

    发现主机B对应的MAC地址已经变成主机M的MAC地址了。

Scenario 2: B’s IP is not in A’s cache.

  1. 先使用arp -d 命令清除A追加的arp缓存:

  1. 在Attacker主机M上运行arp_B_attack.py:

  1. 在主机A上查看ARP cache,结果如下:

发现并没有关于B主机的ARP缓存。

得出结论:

ARP Reply只能修改ARP缓存,不能添加新的项。

Task 1C (using ARP gratuitous message)

在Attacker主机M上创建脚本arp_C_attack.py,内容如下:

还是存在1B的两种情况:

Scenario 1: B’s IP is already in A’s cache.

  1. A主机ping B主机(10.9.0.6),之后A主机中出现B主机的ARP缓存,并且对应正确。结果如下:

  1. 在Attacker主机M上运行arp_C_attack.py

在主机A上查看ARP cache,

  1. 结果如下:

发现主机B对应的MAC地址已经变成主机M的MAC地址了。

Scenario 2: B’s IP is not in A’s cache.

  1. 先使用arp -d 命令清除A追加的arp缓存:

  1. 在Attacker主机M上运行arp_C_attack.py:

  1. 在主机A上查看ARP cache

    如图所示:

    得出结论:ARP gratuitous message只能修改ARP缓存,不能添加新的项。

    综上所述,通过执行以上操作,我们完成了ARP Cache Poisoning 任务

    Task 2: MITM Attack on Telnet using ARP Cache Poisoning  

    Step 1 (Launch the ARP cache poisoning attack).

    在Attacker主机上创建脚本文件mitm_attack.py,文件内容如下:

    然后运行nmitm_attack.py文件,即可投毒。

    Step 2 (Testing).

    投毒成功后测试主机A和主机B之间互ping的结果,以及wireshark抓包的结果。

  1. 在Attacker主机上运行以下命令:

sysctl net.ipv4.ip_forward=0

  1. 主机A和主机B之间互ping的结果都是无法ping通,如下所示:

  1. wireshark抓包结果

在A主机(10.9.0.5)ping B主机(10.9.0.6)时wireshark抓取的结果如下:

B主机ping A主机的结果也是一样的,都没有回复。

Step 3 (Turn on IP forwarding).

  1. 将net.ipv4.ip_forwarding设置为1

sysctl net.ipv4.ip_forwarding = 1

  1. Attacker继续ARP投毒: 运行mitm_attack.py
  2. wireshark结果如下所示:

发现有回复了。

Step 4 (Launch the MITM attack).

之后开始进行snif_and_spoof过程,在Attacker上创建attack-2.py,内容如下:

  1. 在Attacker主机中执行mitm_attack.py程序,不断投毒:

另开一个页面,用于后续的攻击。

  1. 在Attacker上执行以下命令开启转发,先让A主机和B主机可以建立Telnet连接。

在A主机上建立到B主机(10.9.0.6)的telnet

  1. 连接。

  1. 开启Wireshark抓包,为了方便之后查看,直接过滤规则tcp.port == 23:

  1. 在Attacker主机上修改禁止转发,然后开启attack-2.py文件:

在A主机上任意输入一个字符到建立好的telnet

  1. 连接中:

  1. Wireshark中会看到发送一个字符都会出现6个包(已经过滤过了),仔细观察后,会发现前4个包分别是:

- A发送到Attacker的包(10.9.0.5 → 10.9.0.6)

- Attacker修改后发送给B的包(10.9.0.5 → 10.9.0.6)

- B返回给Attacker的包(10.9.0.6 → 10.9.0.5)

- Attacker修改后返回给A的包(10.9.0.6 → 10.9.0.5)

在Wreshark中找到的Attacker主机修改后发送给B主机(10.9.0.6)的包如下所示,数据被修改为Z:

综上所述,通过执行以上操作,我们完成了MITM Attack on Telnet using ARP Cache Poisoning任务

Task 3: MITM Attack on Netcat using ARP Cache Poisoning

在Attacker上创建脚本attack-3.py,内容如下:

  1. 关闭forawrd:

2.在Attacker主机上的另一个Tab页执行ARP投毒攻击,如下所示:

3.在Attacker主机上执行attack-3.py脚本

等待来自主机A和主机B的数据包:

4.在主机B上开启监听:

5.在A主机上连接主机B,然后输入带有name的字符串。

6.在B主机(10.9.0.6)上可以看到结果如下:

综上所述,通过执行以上操作,我们完成了MITM Attack on Netcat using ARP Cache Poisoning任务

上一篇:企业数据高效集成案例:钉钉到MySQL的数据同步


下一篇:JMeter实战之——模拟登录