研究生课程-信安实验报告整理
前言
ARP是什么?
ARP(Address Resolution Protocol)是地址解析协议。作用是将32位IP地址解析为48位MAC(硬件地址)的协议。
ARP的工作流程
第一步
假设主机A想和主机B通信,主机A根据路由表的内容,找到主机B的IP,然后在自己的ARP高速缓冲中,查看有无主机B的MAC地址。如果没有,主机A会发送一个ARP请求广播包,本地网络上的每台主机都接收到主机A的ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
第二步
主机B在ARP请求分组中看到自己的IP地址,就向主机A发送ARP响应分组,并写入自己的硬件地址。同时,主机B还把主机A的IP地址和MAC地址的映射关系也保存到自己的ARP高速缓存中。
第三步
主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。这样,主机A、B都有了彼此的IP和硬件地址,双方可以通信了。
ARP的缺陷分析
无状态
ARP高速缓存根据所接收到的ARP协议包随时进行动态更新,它是无状态的协议,不会检查自己是否发过请求包,只要收到目标MAC发送的ARP响应数据包或ARP广播包,都会接受并缓存。
不认证
ARP协议没有认证机制,只要接收到的协议包是有效的,主机就无条件地根据协议包的内容刷新本机ARP缓存,并不检查该协议包的合法性。
实验探索
实验环境
WinXP:装有WinArpAttack与WireSharp
win7: 靶机
实验工具在文末给出
实验流程
打开WinArpAttacker工具,点击[扫描],就能获取整个局域网的信息
其中:
红色方框就是靶机(Win7)的信息
蓝色方框是默认的网关
IP为192.168.248.132就是宿主机XP的信息
选中靶机,进行 [不断IP] 的攻击,打开WireSharp,由下面的图,可以观察到:
网络中涌现了大量Arp包,我们随意点一个进去看(下图)。
可以看到源地址的MAC地址(Sender MAC address )是伪造的(01:01:01:01:01:01),目的地址(Target MAC address)就是靶机的地址。
这样同一个IP地址就有两个不一样的MAC地址,我们知道IP地址是唯一的,并且对应的MAC地址也应该是唯一的。当网络中出现一个IP地址对应多个MAC地址时,就会产生IP冲突,严重还会导致宕机!
由分析的结果,我们可以了解到 [不断IP冲突] 这种攻击模式的原理就是:
保持靶机的IP地址不变,修改MAC地址,并在网络中发送大量这样的包。
另外,我们可以看到靶机的ARP相关请求数目不断增多。
我们再选择[禁止上网]的攻击模式,抓包分析得到如下结果:
可以看到,有两个可疑的包。
打开第一个包,发现伪装成IP地址与靶机相同的一个包,但是修改了mac地址,然后发送给网关(192.168.248.2),因为网关不会辨别是否是真的靶机传送来的,所以网关收到arp包以后,将IP地址与mac地址存储在自己的高速Arp缓存中。此时靶机在网关的ARP对应关系就被修改成错误的了。
同时在第二个包中,我们可以发现:这个Arp包伪装成网关的IP地址,将自己的mac地址改变,然后发送给靶机,靶机就会将其存储在缓存中。这样靶机的高速Arp缓冲中存储的网关对应关系就是错误的。
由此,我们可以知道该次攻击进行了一次双向欺骗,网关中存储的是错误的靶机信息,靶机中存储的是错误的网关信息。
为了更好地看到结果,在攻击之前,我们在靶机中输入' arp -a ' ,可以看到正确的映射关系。
攻击之后,我们在靶机下再次执行' arp -a ',此时,就会发现网关的mac地址变了。由此可见,[禁止上网]攻击的原理就是:
发包欺骗网关,告诉网关错误的靶机MAC地址,这样会导致靶机无法接受到网关发送的信息,进而不能上网。
值得一提的是,当我们在靶机上再次输入' arp -a ',此时会发现网关的mac地址又自动回复成原来的,这是因为每隔一段时间会发送广播包,重新建立映射关系,这样又能回到正确的映射关系了。
编程部分
接下来,我们基于Winpcap编写程序,对指定的目标IP地址进行ARP欺骗攻击。
在我们使用Wincap来手动构造Arp包时,可以从网上找来Arp的包信息,也可以去WireSharp中抓取一个Arp包,来获取Arp包的信息,这样对我们在使用代码构造Arp包时有很大的帮助。
打开WireSharp,可以看到发送的很多包,任意选取一个Arp包,然后双击打开。
可以看到目的地址是ff:ff:ff:ff:ff:ff,源地址是 00:50:56:C0:0C:08,当我们点击某个条目是,下面自动对应到数字,非常直观。
在构造Arp包之前,首先获取设备名称,在ifirst下直接运行即可,红色方框里面就是项目名,记住要全部复制,同时\要改为\,这是为了防止转义字符做。
在使用vc++较低版本的时候,在项目[右键],点击 Set as Start Up Project然后可以看是运行了。
当我们清楚arp包的结构之后,就能够实现Arp攻击,我们先进行 [IP冲突] 攻击,假设我们要攻击的目标IP 为192.168.227.135,我们就能伪造一个假的mac地址来,我们设为1.1.1.1.1.1,然后设立目的mac: 00:50:56:C0:0C:08, 依次,再设立硬件协议等等,设置完毕以后开始设置ip地址。根据上述IP的冲突原理,源ip地址和目的ip地址都设置成靶机的192.168.227.135,源mac地址设置成为1.1.1.1.1.1,目的mac地址设置为00:50:56:C0:0C:08。
单单一个包肯定是不够的,在这里我们设置flood的数,表示发送包的数量。可以看到如下结果,我们设定的flood的数目为10,那么发送了10次冲突。
可以看到如下结果,我们设定的flood的数目为10,那么发送了10次冲突
再点进包里面,可以包的信息(目的mac地址,目的ip地址等)与我们设置的是一摸一样的。由此就造成了IP冲突,我们还可以模拟禁止上网,照葫芦画瓢即可。
修改代码,主要是修改sendpack.c
代码地址
工具
关注[微信公众号] 文无第一,回复 arp 就能获取云盘连接。
工具仅作学习交流之用,请勿滥用。
参考文章:
捣鼓软件之:网络抓包利器-wireshark
Wireshark-ARP数据包
网络攻击神器:WinArpAttacker使用说明