实验环境:
Linux ubuntu 3.13.0-24-generic
#46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014
x86_64 x86_64 x86_64 GNU/Linux
sudo apt-get install wireshark
sudo apt-get install netwag
sudo apt-get install netwox
wireshark
netwag
netwox
ifconfig
ping 10.211.55.2*
ARP缓存是ARP协议的重要组成部分。ARP协议运行的目标就是建立MAC地址和IP地址的映射,然后把这一映射关系保存在ARP缓存中,使得不必重复运行ARP协议。因为ARP缓存中的映射表并不是一直不变的,主机会定期发送ARP请求来更新它的ARP映射表,利用这个机制,攻击者可以伪造ARP应答帧使得主机错误的更新自己的ARP映射表,这个过程就是ARP缓存中毒。
这样的后果即使要么使主机发送MAC帧到错误的MAC地址,导致数据被窃听;要么由于MAC地址不存在,导致数据发送不成功。
Machine Index | HWAddr | IPAddr |
---|---|---|
1 | 00:1c:42:6f:5b:ee | 10.211.55.27 |
2 | 00:1c:42:cc:87:b6 | 10.211.55.29 |
3 | 00:1c:42:2e:73:dc | 10.211.55.28 |
因为之前测试几个虚拟机之间是否连接成功的时候进行了ping
命令,这个时候在各个虚拟机的时候已经进行了ARP缓存,如果进行实验的话,将不会有ARP协议的数据包,因为会直接在ARP缓存库里面取得相应的MAC地址。
所以这里我要先对ARP缓存进行清理。以下是ARP命令的使用说明:
arp: 显示所有的表项。
arp -d address: 删除一个arp表项。
arp -s address hw_addr: 设置一个arp表项。
先用ARP
命令查看已经缓存的ARP信息,然后再根据需要删除我们需要删除的ARP缓存。
老师给的参考文档里面使用的是Telnet命令,但是可能因为虚拟机设置和VMWare不同的原因,在用Telnet命令的时候会出现connection refused
的错误,所以我尝试使用ssh
命令来实现实验内容。第一次建立ssh连接的时候就会产生ARP的数据包,可以用wireShark捕捉,我们一样用第三台虚拟机用虚假的ARP信息进行广播,那么应该ssh连接会失败。
正常状态下,我用虚拟机#3连接虚拟机#1,可以看到抓取到的ARP数据包如下:
对照前面我们记录的MAC地址和IP地址可以看到,在正常的状态下ARP是正确缓存的,并且可以连接ssh:
然后按照老师的教程,用虚拟机#1进行虚假ARP信息广播:
sudo netwox 80 "00:1c:42:6f:5b:ee" -i "10.211.55.29"
我们可以在虚拟机#3的Wireshark里面看到这个周期性的广播信息:
虚拟机#3连接虚拟机#2的时候,程序出错了,然后我们用arp命令查arp缓存,可以看到虚拟机#2的IP地址10.211.55.29
对应的MAC地址已经被改成了虚拟机#1的MAC地址00:1c:42:6f:5b:ee
。
说明攻击成功。
注意:①WireShark在正常情况下我的环境里并找不到端口,所以我用了管理员权限打开WireShark,就能正常工作了。②我在第一次实验的时候发现虽然广播了但是没有被修改,第二次就成功了,查了WireShark找到原因,是因为刚好连接建立的时候没有广播到。。
ICMP重定向攻击
ICMP重定向信息是路由器向主机提供实时的路由信息,当一个主机收到ICMP重定向信息时,它就会根据这个信息来更新自己的路由表。由于缺乏必要的合法性检查,如果一个黑客想要被攻击的主机修改它的路由表,黑客就会发送ICMP重定向信息给被攻击的主机,让该主机按照黑客的要求来修改路由表。
安装traceroute:sudo apt-get install traceroute
Machine Index | HWAddr | IPAddr |
---|---|---|
1 | 00:1c:42:6f:5b:ee | 10.211.55.27 |
2 | 00:1c:42:cc:87:b6 | 10.211.55.29 |
3 | 00:1c:42:2e:73:dc | 10.211.55.28 |
网关 | 00:1c:42:00:00:18 | 10.211.55.1 |
使用命令sudo traceroute baidu.com
来尝试路由追踪连接到百度时候的路由表情况,并且打开WireShark监视网络。
由上图可知,路由追踪过程中因为有防火墙屏蔽了ICMP信息,所以没有返回任何结果而是*
。但是没有关系,我们可以从WireShark抓到的数据包看到默认网关。
由上图可以看到虚拟机#3的默认网关在正常状态下是00:1c:42:00:00:18|10.211.55.1
。
为了让虚拟机#3认为默认网关已经被修改成了虚拟机#1,需要不断广播ICMP重定向信息。为了实现这个广播,可以使用netwox命令sudo netwox 86 -d "Eth0" --gw "10.211.55.27" -i "10.211.55.1"
,这个命令代表广播ICMP重定向信息,把10.211.55.1
重定向为10.211.55.27
,前者为默认网关,后者为虚拟机#1。
注意:为了让虚拟机#1能够正常转发数据包,需要对虚拟机#1进行如下设置:sudo sysctlnet.ipv4.ip_forward=1
打开WireShark监视网络,使用traceroute
命令访问baidu.com
。观察抓包情况:
由上图可以验证虚拟机#1的广播生效了。
由上图可以验证虚拟机#3发送的数据包的默认网关已经被改成了虚拟机#1,说明攻击成功。