数据转发过程

在聊ARP之前,我们需要先了解一下我们在发送一个数据时在网络中发生了什么 ,它需要什么东西,又是怎么获得的?对方又是怎么接收到的?
当前现网中我们都是使用TCP/IP协议栈进行网络通信的,假设当前你正在通过火狐浏览器访问tide官网(www.tidesec.com),当你输入完网址,敲下回车键后,计算机内部会发生如下事情:
首先当前计算机只知道域名为www.tidesec.com,此时要先向DNS服务器发送数据去请求www.tidesec.com的IP地址,DNS服务器收到数据包后发现计算机请求获得www.tidesec.com的IP地址,将www.tidesec.com所绑定的IP地址打包发送给计算机。

火狐浏览器调用HTTP协议,完成应用层数据封装,HTTP依靠传输层的TCP进行数据的可靠性传输,将封装好的数据传输到传输层,传输层将应用层传递下来的Data添加上相应的TCP头部信息(源端口、目的端口)后。传递给网络层,网络层收到传输层传递爱的数据段后添加上相应的IP头部信息(源IP、目的IP)后将数据包传递给数据链路层,数据线路层收到后,添加上相应的Ethernet头部信息(源MAC地址、目的MAC地址)和FCS帧尾后将数据帧传递给物理层,根据物理介质的不同,物理层负责将数字信号转换成电信号、光信号、电磁波信号等,转换完成的信号在网络中开始传递。

如刚刚上面数据发送方数据封装的流程,我们看到了在封装时,传输层需要源目端口,这里源端口随机分配,目的端口由服务器的应用指定,网络层需要源目IP,这里刚刚我们向DNS服务器请求www.tidesec.com时也获得了tide官网的IP地址,也能实现,那么现在数据链路层需要源目MAC地址,源MAC地址好说,自己的mac地址,那目的mac地址呢?该怎么获取呢?这时就需要用到我们的ARP协议了。

地址解析协议(ARP)

ARP(Address Resolution Protocol)是一种网络层协议,根据已知的目的IP地址解析获得其对应的MAC地址。在局域网中,每台设备都有唯一的MAC地址,就像我们的身份证号一样在全球独一无二的,而IP地址是可以重复分配的。因此,当一个设备需要发送数据包到另一个设备时,它需要知道另一个设备的MAC地址。

那么ARP是怎么工作的呢?一般设备里都会有一个ARP缓存表,用来存放IP地址和MAC地址的关联信息,在发送数据前,设备会先查找ARP缓存表,如果缓存表中存在对方设备的MAC地址,则直接采用该MAC地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应信息,则通过ARP来获取。

当ARP缓存表为空时,主机1通过发送ARP request报文来获取主机2的MAC地址,由于不知道目的地址,因此ARP Request报文内的目的MAC为广播地址FF-FF-FF-FF-FF-FF,因为ARP Request是广播数据帧,因此交换机收到后,会对该帧执行泛洪操作,也就是说该网络中所有主机包括网关都会接收到此ARP Request报文。

所有的主机接收到该ARP Request报文后,都会检查它的目的IP地址字段与自身的IP地址是否匹配。主机2发现IP地址匹配,则会将ARP报文中的发送端MAC地址和发送端IP地址信息记录到自己的ARP缓存表中。

这时主机2通过发送ARP Reply报文来响应主机1的请求,此时主机2已知主机1的MAC地址,因此ARP Reply是单播数据帧。

主机1收到ARP Reply以后,会检查ARP报文中目的端IP地址字段与自身的IP地址是否匹配。如果匹配,ARP报文中的发送端MAC地址和发送端IP地址会被记录到主机1的ARP缓存表中。

至此,ARP工作结束,获得目的IP对应的MAC地址后,即可封装完整的数据包进行数据包的发送(上述工作过程为局域网内的工作过程,如访问其他网段或外网中的IP地址时,所获得的MAC地址为网关的MAC地址,网关收到此ARP Request后会发送ARP Reply)

ARP欺骗

刚刚我们也看到了,ARP协议是通过广播来获取目标设备的MAC地址的,当一个设备需要发送数据到另一个设备时,他会发送一个ARP请求,询问局域网内的所有设备,是否具有指定IP地址对应的MAC地址,目标设备收到请求后会回复一个ARP应答,告诉请求主机它的MAC地址。
ARP欺骗利用了这种工作原理,攻击者会发送伪造的ARP数据包,将自己伪装成网关或其他设备,目标设备收到伪造的ARP数据包后,会将攻击者的MAC地址和其目标IP地址相对应写入ARP缓存表中,并将后续数据包发送给攻击者。攻击者就可以截获目标设备发送的数据包,甚至可以修改、篡改数据包中的内容。
同样的ARP欺骗也分为单向欺骗和双向欺骗。

单向欺骗

如下图所示,攻击者通过伪造ARP Request来将自己的MAC地址伪装成网关IP相对应的mac地址广播出去,主机A收到该ARP Request后会将发现该ARP Request目的IP地址为自己,将该ARP Request中的目的IP地址与MAC地址写入到ARP缓存表后,然后发送ARP Reply,将本该传输给网关的数据错误的传输给攻击机,使主机A得不到网关的响应数据,从而导致断网。

以上就是ARP单向欺骗的原理,那我们怎么来实现呢?往下看
首先我们先来查看一下主机A的mac地址缓存表,当前192.168.45.2就是当前系统的网关地址,所对应的也是真实的MAC地址

那么现在主机A也是可以正常上网的。

根据我们上面的思路来看,我们如果想要让主机A找不到网关无法上网,我们只需要构造一个IP地址为192.168.45.2的虚假mac地址的ARP Reply数据包就可以了,这里我们使用科莱网络分析系统这个工具就可以实现这个功能。
首先我们来先对当前网段的MAC地址进行一个扫描,获得主机A的MAC地址。


这里获得了主机A的MAC地址后,就可以点击上面的数据包生成器。

添加ARP数据包

然后在目的MAC地址和目的IP中输入我们的目标主机的IP和MAC地址,源MAC地址任意输即可,源IP输入网关的IP地址。

然后点击发送,选择网卡,这里选择循环发送,次数为0,让它一直发送伪造的ARP数据包后点击开始。

这时我们抓包看一下当前的网络状况,可以看到,源mac为00-01-02-03-04-05,寻找目的IP地址为192.168.45.131的ARP Request已经发出。

这时我们再来看主机A的ARP地址表中是否有了变化

可以看到主机A中对应192.168.45.2的MAC地址成功被我们修改为了00-01-02-03-04-05,那这时我们再访问一下百度来看看。

可以看到主机A目前已经无法正常返回百度。

双向欺骗

如下图所示,攻击机一直发送伪造的ARP Reply,欺骗网关自己是主机A,欺骗主机A自己是网关,同时开启路由转发功能,就可以让主机A在正常上网的情况下截获网络数据包,所有数据都会经过攻击机然后再转发给主机A。

如上图所示,进行ARP双向欺骗后,主机A所有的通信都需要经过攻击机,攻击者再对目标和网关之间的数据进行转发,则可作为一个"中间人",实现监听目标却又不影响目标正常上网的目的。
可通过kali中自带的arpspoof工具进行攻击,首先在kali上开启数据转发

#终止
echo 0 > /proc/sys/net/ipv4/ip_forward
#允许
echo 1 > /proc/sys/net/ipv4/ip_forward


首先来看我们攻击机的mac地址为00:0C:29:4B:AE:FB

然后使用arpspoof进行双向毒化攻击

arpspoof -i eth0 -t 192.168.45.143 -r 192.168.45.2


开启后我们再来看当前网络情况

可以看到当前网络中同时发出了两个ARP Reply,源IP分别为网关和主机A,源mac为攻击机的mac地址,这里我们再来看下主机A的MAC地址缓存表

可以看到当前主机A的MAC地址缓存表中,192.168.45.2的mac地址与我们的攻击机一致,这里我们访问一下TideFinger 潮汐指纹识别网站,也是可以正常访问的。

然后再看我们攻击机有没有抓到主机A访问http://finger.tidesec.net/的流量

以上就是ARP双向欺骗劫持流量的内容,那么,ARP双向欺骗除了能做流量劫持外,还可以做DNS劫持,假如主机A想要访问www.baidu.com,我们可以通过毒化DNS来达到让主机A跳转到我们的钓鱼站点来。
这里需要用到我们在kali中自带的ettercap,在使用前先修改一下它DNS的配置文件。

vim /etc/ettercap/etter.dns

然后打开ettercap,点击开始按钮

ettercap -G


扫描当前网络

将目标主机和网关分别添加到Target1和Target2中

添加完毕之后,打开ARP poisoning,选择Sniff remote connections,点击OK


然后选择Plugins-Manager Plugins,勾选DNS_Spoof.


然后点击左上角的start按钮即可开始攻击。

这时再去访问www.baidu.com时,即可跳转的我们刚刚所劫持的网站中,如下图所示。

最后修改:2023 年 04 月 27 日
如果觉得我的文章对你有用,请随意赞赏