本文档针对已学习了解ARP原理及理解ARP报文结构中各个字段意义的同学。
网络环境如下图:
下面由我来讲解如何进行全手工的ARP中间人攻击,之所以不用全自动的工具,是为了让大家理清思路,所谓授人以鱼不如授人以渔!
中间人欺骗思路:
欺骗网关使20.3的MAC指向我,欺骗20.3使他将网关的MAC映射实际为我的MAC(中间人),然后开启PC机的路由转发功能。
1、 欺骗用户20.3,可以通过ARP Request或Reply报文,将对方的ARP缓存表对应20.254的MAC为中间人机器的MAC。
2、 欺骗网关20.254,可以通过ARP Request或Reply报文,将对方的ARP缓存表对应20.3的MAC为中间人机器的MAC。
同时发送两个欺骗报文
通过以上两步,把用户到网关的流量引入到中间人,把网关到用户的流量引入到中间人。
我们看看是否成功:
20.3机器上 arp –a 显示ARP缓存表,虽然欺骗成功,但是高手一看254的MAC和222的MAC对应同一台机器,显然知道222就是攻击者,此处如何解决请您思考。
网关上show arp 看20.3对应的MAC是什么
但是由于Windows系统默认没有开启IPRouting功能,那么目的地址不是自己的报文,或者目的地址不是自己侦听的组播报文以及目的地址不是广播的报文会进行Drop动作。那么这时候可以通过以下方式开始路由功能:
检查IP路由功能是否开启
此时,我们的Windows7就能够转发IP报文了,但是,此刻并不能完全实现数据包的中转,对于本机来说,20.3去往其他网段的数据包从自己的网卡进来,查表后发现找到默认路由,又需要将数据报从此接口转发出去,那么这时候会触发ICMP Redirect,本机会帮20.3转发第一个报文,后续的报文并不会转发(实际环境中的现象是第一个报文通,后面的报文不通,你ping –t的时候会发现流量断断续续通和不通),那么我们就需要关闭本机的ICMP Redirect功能了,让本机实现所有的流量帮20.3转发(20.254的报文也一样),实现不丢一个报文。
修改注册表:
禁止响应ICMP路由通告报文
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\interface
PerformRouterDiscovery REG_DWORD 0x0 (默认值为0x2)
OK,这时候我们来看现象:
20.3上能ping通外网
实际上流量是转发到了中间人,他帮我们转发出去的。
这时已经欺骗成功了,当20.3 telnet192.168.20.254时,所有的流量经过中间人机器中转,那么你可以在机器上抓报文,通过Follow TCPStream就可以解析出telnet用户名以及密码。
这里我有个点我没想通,为什么关了重定向功能,依然发重定向报文。
思考题:
1、ARP请求和回应可以实现ARP欺骗,那么免费ARP报文可以吗?
2、如何解决ARP欺骗,请列举你知道的几种方法或技术。