ICMP协议是网络层协议, 利用ICMP协议可以实现网络中监听服务和拒绝服务,如 ICMP重定向的攻击。
ICMP是Internet控制报文协议,用于在IP主机、路由器之间传递控制消息,控制消息指网络通不通、主机是否可达,路由是否可用等等。
PC#show int f0/0
FastEthernet0/0 is up, line protocol is up
Hardware is AmdFE, address is cc02.1b08.0000 (bia cc02.1b08.0000)
Internet address is 192.168.1.1/24
#可知PC的MAC地址为cc02.1b08.0000
R3#show int f0/0
FastEthernet0/0 is up, line protocol is up
Hardware is AmdFE, address is cc03.187c.0000 (bia cc03.187c.0000)
#可知路由器R3的MAC地址为cc03.187c.0000
根据抓到得报文可以看出:ICMP报文是有请求有响应的,如果说出现请求超时这种情况,很有可能是数据包可以到达目的地,但是回不来,或者说 根本不能到达目的地,所以请求超时会有多种情况。如果是路由器回复目标主机不可达造成的结果就是路由器没有帮你转发数据。
ICMP是主机和路由器之间传递控制报文消息的,ICMP属于网络层协议,是封装在传输层和控制层之间的。
ICMP报文主要就是看它的类型(type)和代码(code)
注:ICMP报文不同的类型下面可能有不同的代码,可能要去了解下常见的ICMP类型有哪些,某一类型下面有哪些代码。如当你去访问一个不存在或者目标不可达或者说没有响应的目的的时候,数据到达网关后,路由器发现目标无法到达或者回不来的时候,会给主机发送ICMP响应,即ICMP控制报文,根据UCMP控制报文的Type和code可以分析出主机访问目标到底是什么情况。
重定向是ICMP控制报文中的一种,在某一种特定的情况下,当路由器检测到一台机器使用的是非优化路由的时候,这个时候路由器回会主机发送ICMP重定向报文,使得它走优化路由。.
网络中有三台主机{主机A(192.168.1.10)主机B (192.168.2.1)主机C(192.168.3.1}
一台交换机和两台路由器,主机A通过交换机连接到路由器R1和R2,主机A的网关是R1,
主机B接R2,主机C接R1。网络拓扑如下:
现主机A(1.10)要访问主机B(3.1),因为主机A的网关是(1.254),初始R1没有配置到R2的路由,所以主机A是无法到达主机B的。
此时如果在R1路由器添加到R2的静态路由,主机A访问主机B的数据流向如下:
主机A->R1->R2->主机B
这样走的话就比较复杂了,因为从网络拓扑来看,主机A如果能够走R2到主机B的话显然是最优路线,那么就要引入了ICMP重定向l了。
此时我们可以在R2路由器R1上直接设置主机重定向,让主机A访问主机B的时候直接走路由器R2.
即在此情况下,当路由器R1检测到主机A使用的是非优化的路由,路由器R1就会想主机A发送ICMP重定向报文,使主机A的路由改变。
此时,如果有黑客直接给逐句A发送ICMP重定向,将主机A的路由改变了,可能在成逐句A无法进行网络通信,或直接将主机A的网关改成自己来达成截取流量的目的,这就是ICMP重定向攻击。
实验环境:GNS3(两台路由器、一台交换机、一台主机)2.1和3.1的网络通过路由器的loopback虚拟接口来实现
PC(config)#no ip routing
PC(config)#int f0/0
PC(config-if)#ip add 192.168.1.10 255.255.255.0
PC(config-if)#no shut
PC(config-if)#exit
PC(config)#ip default-gateway 192.168.1.254
PC(config)#
R1#
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#int f0/0
R1(config-if)#ip add 192.168.1.254 255.255.255.0
R1(config-if)#no shut
R1(config-if)#exit
R1(config)#int loopback 0
R1(config-if)#ip
*Mar 1 00:13:05.739: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up
R1(config-if)#ip add 192.168.2.1 255.255.255.0
R1(config-if)#
R2#conf
Configuring from terminal, memory, or network [terminal]?
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#int f0/0
R2(config-if)#ip add 192.168.1.253 255.255.255.0
R2(config-if)#no shut
R2(config-if)#no shut
*Mar 1 00:09:59.695: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
*Mar 1 00:10:00.695: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
R2(config-if)#exit
R2(config)#int loopback 0
*Mar 1 00:10:18.415: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up
R2(config-if)#ip add 192.168.3.1 255.255.255.0
R1、R2以及192.168.2.1都可以ping通,但是192.168.3.1无法ping通(没有路由)
直接在R1路由器配置一条路由,使得数据通过R1转发到192.168.3.0
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#ip route 192.168.3.0 255.255.255.0 192.168.1.253
R1(config)#
开启三条链路的抓包,然后主机ping192.168.3.1抓取数据进行分析。
第一条报文是no response,没有响应也就是cmd上面显示请求超时的那条报文。
我们来看下ICMP报文的type和code字段,type类型为5,code为0表示对网络进行重定向
下一条报文就请求到了
左边链路是
1.10请求3.1
1.10收到路由器的重定向,
1.10去请求1.253的MAC地址
接下来后续的包就直接交给了1.253
主机A访问3.1的时候网关直接发送ICMP重定向报文给主机A,
由于主机A的网关R1发现自己路由表中有直接到达192.1683.1的路由
所以看到下一跳地址直接向R2发送了ARP请求,请求R2的MAC地址,R2发送ARP应答将自己的MAC地址响应给R1.
右边这条链路很清楚,它就没有重定向的过程。直接是1.10请求3.1,3.1响应1.10
整个过程:
192.168.1.10请求192.168.3.1
192.168.1.10收到网关的ICMP重定向报文
网关请求R2(192.168.1.253)的MAC地址
接下来后续的包就直接交给了R1(192.168.1..253)
在GNS3中,重定向的路由直接改了PC网关;
如果遇到直接点击ettercap图标无法启动,尝试终端输入ettercap -G运行
在列表中任选一个Add to Target2
正常实施ICMP重定向攻击的话,Windows这台主机是不能通信的,实验结果的话在虚拟机里面很难实现。
web.ecs.syr.edu/~wedu/Teaching/cis758/netw522/netwox-doc_html/tools/index.html