浅谈arp攻击

Posted by 404player on August 18, 2020

ARP攻击原理


ARP协议

ARP协议,即地址解析协议,用于实现从IP地址MAC地址的映射,简单来说就是访问目标IP的对应MAC地址。

在网络通信中,两台主机之间通信的数据包根据OSI模型至上而下进行数据封装,再向外发出。在局域网通信中,不仅需要源目IP的封装,同时也是需要源目MAC地址的封装。IP地址决定数据包往哪个网络发送,而MAC地址决定数据包往目标网络的哪台主机发送。

一般情况下,上层应用程序并不多关心MAC地址,MAC地址在数据链路层才进行封装,所以需要ARP协议来获知目的主机的MAC地址。

下面我们来看看ARP协议是怎么工作的。

上图只是一个简单的模型,以局域网内一台主机ping另外一台主机为例。

PC1一个ping ip2的命令,此时PC1就有了源目IP地址以及自身的MAC地址,而要完成一次完整的数据封装就需要源目IP以及源目MAC,此时ARP协议就起作用了。

ARP协议需要PC1PC2完成一次请求和回复的交互,通过这个交互过程,PC1得知了PC2的MAC地址,此时PC1会将这条MAC信息放入本地的缓存表,并再次进行数据封装,就可以进行数据包的发送了。

上述过程的重点在于这个请求和回复交互的完成,既然不知道MAC地址就无法发送数据包,PC1PC2是怎么进行交互通信的呢?

其实这并不矛盾,上述模型只是个简单的一对一模型,我们来看看复杂一点的模型,你就会豁然开朗。

上图是一个四台主机连一个交换机的局域网,假设此时PC1PC2通信(此前两台主机并没有通过信),PC1必须提前知道PC2的MAC地址,此时PC1就会在局域网内发出一个ARP Request的广播包,简单来说,这个请求包会被同一局域网内所有主机收到。PC3PC4收到ARP请求包后,发现不是自己,就会将请求包丢弃,PC2收到包后,确认过眼神发现是自己,就会发送ARP回应包,返回自身的MAC地址。

整个ARP协议的大致内容就是这样。

攻击原理

ARP攻击算是中间人攻击的一种,所以局域网中要是存在ARP攻击,说明局域网中必然存在中间人。

以上图为例,简述一次ARP攻击的过程。

PC1,PC2,PC3都连在同一台交换机上,对应的接口为port1,port2和port3。

当PC1要跟PC2通信时,需要提前通过ARP请求包询问PC2的MAC地址,由于请求包是一种广播包,交换机会通过广播的形式将数据包广播到PC2和PC3处。

PC2根据请求包的查询信息,返回ARP单播回应包,即只往PC1处发送回应包,而此时PC3不发回应包,处于”监听”状态。

PC1和PC2经过这么一个过程的问答,获取了对方的MAC地址,存储在各自本地的ARP缓存表中。

交换机也通过自身的学习机制,记录了MAC地址对应的接口信息,存储在CAM表中。此时交换机收到数据包,解封装数据包得到目的MAC地址,就会根据CAM表转发到对应的接口处。

综上所述,主机通信要查询ARP缓存表,根据IP查询到对应的MAC地址,交换机通信需要查询CAM表,基于目的MAC转发到对应的接口,从而将数据包发送给对应主机。

以上只是一个正常的通信过程,我们注意到,这个过程中,我们的中间人PC3是处于监听状态的,正常状态下,当PC3收到来自PC1的ARP请求PC2 MAC的数据包时,因为不是问询自己,所以会直接丢弃。而当PC3要发起ARP中间人攻击的时候,就会在监听之后,发起ARP回应包,告知PC1:我就是PC2(IP2-MAC3)

让我们看看接下来会发生什么情况,因为这一条错误的引导信息,PC1会将IP2-MAC3写入本地的ARP缓存表,而交换机也会存储MAC3-PORT3CAM信息,所以当PC1与PC2通信时,通过查询本地的ARP缓存表,将信息发送到MAC3处,并从PORT3处将数据包送出,这样,本来是要交给PC2的信息就交给了PC3。

到此处完成了一次完整的ARP中间人劫持。

其实上述过程还有一个很多小白都会提出的疑问,既然PC2和PC3收到ARP请求包都会回复IP-MAC的信息,那怎么知道ARP缓存表会存储哪一条呢?

是这样的,ARP缓存机制是遵循后到优先的原则的,意思就是在同一条IP对应信息的情况下,哪一条信息后到,就会把前面已经存在本地的信息给覆盖掉。这跟电话本的情况很像,假设朋友告诉你他的电话换了,你就会将本来存在电话本里有关他的信息进行更新,不是吗?

更何况,作为一名合格的hacker,当然有办法保证自己的攻击万无一失。使用稳健的ARP嗅探渗透工具,能够进行高并发的网络扫描,并持续不断地发出ARP欺骗数据包,从而保证真正的信息被彻底覆盖。


ARP攻击流程还原

傻瓜式攻击工具P2Pover

P2Pover俗名就叫P2P终结者,通过ARP攻击可以实现网络流量限速、针对性APP禁用及网关劫持等多种多样的功能。

此次攻击将配合Wireshark抓包使用,切记所学不可用于非法行为。

为还原ARP攻击的流程,我准备了两台虚拟机,以WindowsXP作为靶机,以Windows2003作为攻击机。

首先我们要先在靶机上cmd进入终端,并运行arp -a查看一下靶机本地的ARP缓存表,因为我提前用靶机提前Ping过攻击机,所以缓存表中显示以下信息:

我们可以看到缓存表中出现两条ARP缓存信息,192.168.247.138是攻击机的IP-MAC信息,192.168.247.2是虚拟机网关出口地址的IP-MAC信息。

接下来,我们将主战场切换到攻击机那里去,启动P2Pover,并开始扫描网络,扫描如下:

已知192.168.247.138是攻击机本地IP,而同一个IP段的最大最小地址一般为全网地址,广播地址或者是网关地址,我们很容易就判断出,这个192.168.247.141就是靶机的IP地址。

勾选除自身IP外所有地址,点击启动提速,并打开Wireshark抓包,我们可以看到如下的情况。

第一张图显示的抓包的信息是P2Pover在通过扫描网络的方法获知网段中所有主机的MAC地址,图二显示的就是攻击机在通告所有主机该网段的网关就是自己,所谓网关,可以理解为,所有局域网数据包的交互都要通过的一个关口,这样一来,局域网所有的数据包都会被攻击机所截取。

当我们再次查询arp -a,发现网关192.168.247.2的MAC地址已经换成了攻击机的MAC,证明此次攻击已经成功了。

接下来就好办了,我们来模拟一次受攻击的过程。我把环境切换回靶机处,尝试用telnet远程登陆一个美国的服务器route-server.ip.att.net

进入后服务器会要求你输入账号密码,而默认的账号和密码都是rviews

输入账号密码以后我们就成功登录这台远程服务器了!

为了验证我们此次网关劫持是否成功,我们回到攻击机,看Wireshark的抓包情况,我们先过滤出telnet包,可以看到所有本不应该通过攻击机的数据包,我们都成功抓到了!

接下来,更进一步,右键数据包,点击Follow TCP Stream,我们可以看到刚才输入的全过程。

神级工具Cain

前面介绍的P2Pover我们可以感觉到,攻击方式太糙了,杀伤范围大,根本实现不了精准打击。

有什么办法可以实现只欺骗一台主机,而同网段的其他主机并不会被影响呢?

这个时候就要介绍以下一款神级Cain工具,这款工具据说是早年美国网络兵工厂泄露的武器之一,具有实施网络攻击,加密解密,无线破解等功能,可谓是十分强大。单以该工具以恶人之祖Cain来命名就可见一般了。

具体原理就不加详述了,直接上手实操!

现在攻击机上启动Cain,启动Sniffer模块,并开始网络扫描。扫描图像和抓到的数据包如下。

随后点击左下角的ARP骷髅头像,并点击顶层功能栏的加号,将要欺诈的主机与网关地址加入攻击列表。

确定后,点击左上角的骷髅头像,开始进行ARP毒化,抓包分析,数据包的特征跟用P2Pover时抓取的包的特征相似,只是更有针对性,只对靶机进行毒化,对同网段的其他主机并没有影响。

通过对数据包的分析,我们看到,此时网关的MAC地址已经被覆盖了,证明此次网关劫持已经成功。

为了验证结果,我们再次访问上文提到的远程服务器,输入账号密码登录。

回到Cain页面,点击下方的Password,在出现的页面左侧我们看到有一个telnet,点击后我们可以发现下载一个txt文件,下载下来就是抓取到的密码。

这就是Cain强大的地方,这个工具不需要配合Wireshark抓取密码,会自动识别并抓取,并可视化显示在用户界面。其实不只是telnet,所有明文传输的网页,包括HTTP,都可以通过Cain这款工具成功地抓取。

上图是我在测试一个HTTP网页时抓取的账号密码。

当然,很多网站现在已经升级成HTTPS了,会对传输的信息进行加密处理。面对这种情况,简单地用Cain进行攻击不再能实现获取用户信息的目的。此时我们可以尝试用ARP欺骗加上DNS域名劫持,配合构造克隆网站,拿到站点的信息。