zoukankan      html  css  js  c++  java
  • wpa2破解代码思路(教你写poc)

    前言:此篇关于1、wpa2协议漏洞的产生原因;2、scapy这个数据包库的基础;3、最后讲解代码思路,让你们从伪代码可以直接写成代码展开介绍分享~

    本文作者:i春秋签约作家——kaikaix

    1、大家可以先看看官方文档

    // 如果不是很熟悉scapy,推荐看一下我这篇文章的代码https://bbs.ichunqiu.com/thread-18592-1-1.html

    http://pan.baidu.com/s/1boVAf63  //

    ps:要会wireshark和Python基础 这很重要

     

    2、wpa2漏洞

    当用户要连接AP(WIFI)将会和AP有四次握手:

    前2次不需要关注主要是后2次

    (3)AP向用户发送一个密钥,用来加密用户数据的密钥

    (4)用户发送ack,表示自己接受到了

    那么漏洞是怎么产生的,那就要了解一下wpa2的mitm了(中间人攻击)

    1、先创建一个一模一样的AP(ssid一样),而且信号要好过真正的AP(应该也可以用mdk3,强制一直断网)

    2、用mdk3或者其他工具,断了用户的网络(mdk3的用法就不讲了,你们可以自行百度,当然待会会用到fluxion,那里自带断网功能)

    3、用户会重新连接,因为伪造AP信号强,所以连到伪造AP,向他发送四次握手

    请看示意图

    QQ截图20171018143816.png

    好,接下来说一下wpa2的漏洞

    1、AP向用户发送一个密钥,用来加密用户数据的密钥

    2、用户安装密钥,然后从内存把密钥清0,发送ack数据包

    3、拦截ack数据包

    4、AP没有收到ACK数据包,重新发送密钥

    5、用户接收到密钥,从清0的内存重新安装了一个为0的密钥

    这样真正AP就会重发密钥,这里可以看看360发的,比我讲的好,或者直接看文档


    3、介绍一些关于scapy的用法

    kali自带scapy

    Linux安装:

    https://github.com/secdev/scapy/archive/v2.3.2.zip

    解压后进入文件夹,输入Python setup.py install

    剩下的可以看看我的这篇文章

    https://bbs.ichunqiu.com/thread-18592-1-1.html

    要知道2个重要的函数

    (1)sniff(prn=fun)

    用于嗅探,把嗅探到的每个数据包都放入fun这个函数进行处理

    (2)sendp(packet,iface=’你的网卡名’)

    这个函数工作在osi第二层,wpa协议也是第二层的协议

    packet是要发送的数据包

    iface是网卡,网卡名就是类似wlan0那种

    在Python解释器导入库

    from scapy.all import

    如果要查看有的数据包,可以用

    ls()

    这里用到的数据包一般都是Dot的

    如果要看数据包的有的参数,可以使用ls(名字)

    比如:ls(TCP)

    创建数据包可以看看我那篇WIFIDOS的代码


    4、创建热点

    我觉得用fluxion就可以了

    https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=17554&highlight=fluxion

    可以看这篇文章,来创建伪造AP。当你创建了热点,有一些窗口是要关闭的,因为这会妨碍到程序的正常工作

    如果fluxion不可以,那就用其他方法创建wifi,不知道hostapd行不行,我试不了,不知道在那种模式下能不能启动网卡监听模式,只能你们实验了

    如果也不可以

    可以试一下http://xiao106347.blog.163.com/blog/static/215992078201463597381/

    这篇文章

    记住,wifi名字要和真正的wifi名字相同

    5、拦截ack数据包
    拦截ack数据包只要不让真正AP接受到ack数据包就可以了

    我们需要用到scapy,如果对scapy不是很了解还是看一下我这篇文章https://bbs.ichunqiu.com/thread-18592-1-1.html比较好

    导入库

    from scapy.all import *

    因为你用fluxion创建热点的时候已经启动了监听模式,这里就不用开启了

    直接嗅探

    sniff(prn=catch_4,iface=’wlan0′)

    把抓取的每个数据都丢进catch_4进行处理

    这里需要你们用wireshark进行分析数据包的结构,这样才能判断是不是ack数据包

    def sniff(pkt):
        if i==0:
            if pkt.haslayer(EAPOL) and pkt.type ==2:
                #还需要进一步进行判断是不是第四个ack数据包,这就需要你们抓到包自己分析了
                i=i+1

    pkt.haslayer(EAPOL)意思是是否存在EAPOL

    eapol=pkt.getlayer(EAPOL)就是取这一层的内容,也就是这一层的上面信息全部不取,比如

    udp=pkt.getlayer(UDP)可以获得udp的信息

    http=udp.getlayer(HTTP)又从udp中读取http的信息

    分析数据包的思路就是wireshark肯定有标识是不是ack的,或者抓包直接分析最后一个eapol数据包

    还要判断准确性,也就是判断他们目的地是不是那个真实AP

    如果不满足上面那些条件(i=0 and 是ack数据包),就把这个数据包调用sendp发送

    sendp(pkt,iface=’wlan0′)

    如果满足上面那些条件就不发送数据包,相当于劫持下了ack数据包,而且i+=1

    这样可以防止第二次发送ack数据包的时候又被拦截下来,如果你想标识用户的话可以用字典

    {‘用户mac’:次数}这样就可以记录是不是同一个用户的ack请求了,提取mac的方法没代码和数据包不好说,所以还是你们自己分析吧


    6、结语

    密钥就变成0了应该,我也不敢确定我的理解对不对,大致代码思路就是这样,如果我错了,求指出我的错误

    http://pan.baidu.com/s/1qYHmK5u最后送上一本书,我从里面学的scapy

  • 相关阅读:
    [php代码]从svn获取指定版本,并同步到ftp上。
    java程序用pid重启
    Gearman安装,测试笔记
    ant编译android项目
    jquery代码收藏
    [读书笔记]读《code complete》有感
    无法解析的外部符号_main,该符号在函数_tmainCRTStartup中被引用
    4路电梯调度——pair program总结
    阅读作业2
    必应缤纷桌面的使用测试
  • 原文地址:https://www.cnblogs.com/ichunqiu/p/7688205.html
Copyright © 2011-2022 走看看