Продвинутое использование Pyrit


Базовое использование Pyrit, а также самый эффективный алгоритм реализации атаки описан в разделе «Взлом рукопожатий в Pyrit — самый быстрый способ с использованием графических процессоров и предварительного расчёта хешей». Рекомендуется начать чтение с него.

Вышеприведённый алгоритм использования Pyrit является самым популярным. Тем не менее, у программы Pyrit есть ещё множество команд и опций. Подробнее с каждой из них вы можете познакомиться в статье посвящённой Pyrit из Энциклопедии Kali Linux.

Структура базы данных Pyrit. Импорт и экспорт паролей

Давайте чуть подробнее разберёмся в составляющих базу данных Pyrit. Во-первых, это пароли. Одни и те же пароли могут применяться при взломе разных Точек Доступа. Для импорта паролей используются две команды:

  • import_passwords
  • import_unique_passwords

Одинаковое у этих команд то, что пароли могут содержать все символы (включая NULL-bytes) кроме завершающих символов новой строки ("\n"). Пароли, которые не подходят для использования с WPA-/WPA2-PSK игнорируются. Т.е. очистку файла паролей, которую мы проводили, делать было необязательно.

Разница между этими командами заключается в том, что:

  • команда import_passwords следит за уникальностью импортируемых паролей, а команда import_unique_passwords — нет, она импортирует все пароли, даже те, которые уже есть в БД.
  • Команда import_unique_passwords намного быстрее.

Название команд заставляют думать, что в документации имеется ошибка. Поскольку ведь import_unique_passwords больше подходит для импорта уникальных паролей. Но ошибки нет.

Скорость импорта с import_unique_passwords превышает скорость импорта с import_passwords в разы. Поэтому если у вас гигантский словарь, размер которого измеряется гигабайтами, то вы сможете сэкономить очень много времени только на импорте паролей. Конечно же если вы уверены в его «чистоте» (отсутствии дублирующих данных).

Кстати, пароли можно сохранить из базы данных в файл, это делается командой export_passwords. Пример использования:

pyrit -o myword.txt.gz export_passwords

Как уже было сказано, пароли могут использоваться множество раз. Причём Pyrit сам следит за чистотой базы данных паролей. Но импорт паролей занимает на так много времени, как вычисление хешей. Хеши у каждой ТД свои, поскольку имя ТД является солью в этих хешах.

Мы создавали таблицу нашей точки доступа командой create_essid. Некоторые команды самостоятельно создают необходимую таблицу в случае если она необходима, но ещё не создана. Также можно создать много ESSID, для этого после опции -i нужно указать файл, в котором имеется список ESSID (каждая ТД на новой строке). Повторное создание существующей ESSID не приведёт к ошибке.

Реализации атак в Pyrit

Для расчёта хешей мы использовали команду batch, а для последующей атаки (проверки по хешам) мы использовали команду attack_db. Возможны следующие варианты:

  • attack_batch — если пароли переведены в хеши, то используются эти хеши, если есть «непросчитанные» в хеши пароли, то они просчитываются и по всем этим хешам идёт проверка (атака). Фактически, attack_batch = batch + attack_db за один раз. Поддерживает опции -b-e и -o.
  • attack_cowpatty — генерировать Pairwise Master Keys из паролей может не только Pyrit, например, это умеет также genpmk. Если мы используем базу данных хешей, которая сгенерирована в формате cowpatty, то используем именно эту команду.
  • attack_db — проводит атаку по ранее вычисленным (с помощью batch) хешам. Поддерживает опции -b-e и -o.
  • attack_passthrough - эта команда обходит базу данных Pyrit и должна использоваться только если имеются проблемы с местом в хранилище (например, на LiveCD). Вместо неё используйте attack_batch. Поддерживает опции -b-e и -o.
  • batch - Запускает перевод всех паролей в базе данных в их соответствующие Pairwise Master Keys (парные главные ключи) и сохраняет результаты в базу данных. Можно использовать опцию -e для ограничения применения этой команды только к одной ESSID; если эта опция пропущена, будут обработаны все ESSID одна за одной в неопределённом порядке. 
  • passthrough - Считывает пароли из файла, данного с -i и вычисляет их Pairwise Master Keys для ESSID, данной с -e. Результаты записываются в файл, который указан после -o в бинарном формате cowpatty и не сохраняются в базе данных для дальнейшего использования. Т.е. эта команда обходит необходимость иметь базу данных и должна использоваться только при проблемах с местом хранилища (например, при использовании Pyrit на LiveCD). Команда batch обеспечивает в точности такую же функциональность как passthrough, но может давать намного улучшенную производительность, поскольку результаты могут считываться из базы данных вместо повторного их расчёта.  Если вы всё равно не поняли, то passthrough это как batch, только полученные хеши не сохраняются в базу данных, а выводятся в стандартный вывод. Пример практического использования:
pyrit -i dirty_words.txt.gz -e NETGEAR -o - passthrough | cowpatty -d --r wpatestcapture.cap -s NETGEAR

Распределённое и удалённое использование ресурсов с Pyrit

Pyrit может выступать в роли сервера и в роли клиента. При определённой сноровке можно организовать распределённое вычисление хешей.


  • relay

Запускает сервер для ретрансляции другого устройства хранилища через XML-RPC; другой клиент Pyrit может использовать этот сервер как хранилище. Это позволяет ему иметь сетевой доступ к своим собственным (наподобие file:// и sqlite://) или скрытым за файерволом SQL базам данных и обеспечивает множественный доступ для клиентов к базе данных через RPC интерфейс Pyrit. Порт TCP 17934 должен быть открыт для работы этой функции. Например, на сервере (где база данных):

pyrit -u sqlite://var/local/pyrit.db relay

и клиент (где большой GPU):

pyrit -u http://192.168.0.100:17934 batch
  • -u URL

Для подключения используется опция -u URL. Она позволяет указать URL хранилища устройства в форме:

driver://username:password@host:port/database

Pyrit в качестве хранилища может использовать файловую систему, удалённый Pyrit-Relay-Server и, если установлен пакет python-sqlalchemy, базу данных SQL. Драйвер file:// отправляет в собственную файловую систему Pyrit, которая размещена на диске, http:// связывает с Pyrit-Relay-Server и все другие URL идут напрямую к python-sqlalchemy, если доступен. Устройство-URL по умолчанию могут быть также указаны ключём defaultstorage в конфигурационном файле pyrit (за подробностями обращайтесь к справке и смотрите секцию ФАЙЛЫ).

  • serve

Запускает сервер, который обеспечивает доступ к локальному вычислительному оборудованию для помощи клиентам Pyrit. IP адрес сервера должен быть добавлен в конфигурационный файл клиентов (смотри секцию ФАЙЛЫ в справке) в качестве разделённого пробелами списка в known_clients. Настройка rpc_server-setting у клиентов также должна быть 'true'. Порты TCP и UDP 17935 должны быть доступны. Например, на сервере (где есть GPU):

pyrit serve

и на клиентах (IP адрес сервера был добавлен в known_clients и rpc_server установлен в 'true'):

pyrit -r test.pcap -b 00:de:ad:be:ef:00 -i words.txt attack_passthrough

Поиск рукопожатий с помощью Pyrit

Для выявления рукопожатий имеется три команды:


  • analyze - парсит один или более файл с захваченными пакетами (в формате pcap, возможна работа с сжатыми в gzip) переданными с опцией -r и попытаться определить Точку Доступа, Станции и EAPOL-хендшейки. Пример:

01

root@HackWare:~/Рабочий стол# pyrit -r DANIELLE2015-01.cap analyze
Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+

Parsing file 'DANIELLE2015-01.cap' (1/1)...
Parsed 35 packets (35 802.11-packets), got 3 AP(s)

#1: AccessPoint 68:72:51:40:78:b5 ('@Office N.Y TMN WiFi 038-249734'):
#2: AccessPoint 0c:54:a5:c0:24:d6 ('DANIELLE2015'):
  #1: Station e0:99:71:fa:d3:c9
  #2: Station 4c:8d:79:9c:06:54
  #3: Station 00:1f:3a:41:5e:70, 9 handshake(s):
    #1: HMAC_SHA1_AES, good, spread 1
    #2: HMAC_SHA1_AES, good, spread 1
    #3: HMAC_SHA1_AES, good, spread 1
    #4: HMAC_SHA1_AES, good, spread 3
    #5: HMAC_SHA1_AES, good, spread 3
    #6: HMAC_SHA1_AES, good, spread 3
    #7: HMAC_SHA1_AES, good, spread 3
    #8: HMAC_SHA1_AES, good, spread 7
    #9: HMAC_SHA1_AES, good, spread 7
  #4: Station 74:e2:f5:ba:bc:bc
#3: AccessPoint 20:25:64:16:58:8c ('Mial'):
  • strip - парсит один или более файлов захваченных пакетов и переданных с опцией -r, извлекает только пакеты, которые необходимы для выявления EAPOL-рукопожатия и записывает новый дамп в файл, переданный с опцией -o. Можно использовать опции -e и -b для фильтрации конкретных Точек Доступа. 

Пример:

pyrit -r "large_dumps_*.pcap" -e MyNetwork -o tiny_compressed_dump_MyNetwork.dump.gz strip
  • stripLive - Парсит файл с захваченными пакетами, которые переданы опцией -r, извлекает только пакеты, которые необходимы для выявления EAPOL-рукопожатия и записывает новый дамп в файл, переданный опцией -o. Эта команда отличается от strip тем, что захваченный файл может быть символьным устройством, включая сокеты и другие псевдо-файлы, которые выглядят как файлы в формате pcap. stripLive записывает релеватные пакеты в новый файл (переданный опцией -o), по мере их пребывания вместо попытки вначале прочитать весь файл захвата.

Кроме команд, о которых здесь рассказано, есть ещё несколько команд и опций (в основном по самотестированию). Со всеми ними вы можете познакомиться в Энциклопедии Kali Linux в статье, посвящённой Pyrit.


Рекомендуется Вам:

11 комментариев to Продвинутое использование Pyrit

  1. NetHunter:

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

    • Alexey:

      К сожалению, нет. Имя точки доступа является чем-то вроде соли. Если для одной ТД захвачено несколько рукопожатий, то после создания БД каждое из них можно проверить за несколько секунд (конкретное рукопожатие может быть плохим).

  2. Роман:

    Здравствуйте. Спасибо за отличную статью.
    Хочу спросить. У меня в базе данных Pyrit храниться больше 100000000, с просчитанными хешами. Но после того как я добавляю в эту базу еще 10-20 паролей, то команда pyrit batch начинает заново пересчитывать хеши для всех 100000000 + вновь добавленных. Это очень не удобно и тратиться много времени. Может быть Вы бы могли ответить, это действительно должно так быть? Или можно что то сделать чтоб хеши считались только для новых паролей? Спасибо.

  3. v01d:

    "все пароли, даже те, которые даже уже есть в БД. "

    Второе даже лишнее, нет?

    Спасибо за сайт.
    Очень много интересного.

     

  4. v01d:

    "Выберите изображение для вашего комментария (GIF, PNG, JPG, JPEG):"

    Может написать, "Приложить картинку" ?

    А то как-то неоднозначно.
    Мне подумалось это для авы.

    Извините.
     

    • Alexey:

      Текст в статье поправил - спасибо, что обратили внимание. Для прикрепления картинки текста также изменил - вроде бы, стало более однозначно.

  5. v01d:

    Как же удалить пароли импортированные в "file://"?

    Ну например когда пропала уверенность в их уникальности и вы решили реимпортировать пароли вновь.
    Команды для очистки не существует, а жаль.
    Если нужно обнулить базу полностью, нужно просто удалить каталог ~/.pyrit/blobspace

    • Alexey:

      На 100% не уверен, но думаю желаемого результата можно достичь удалив папку ~/.pyrit/blobspace/password/

  6. Некто:

    я использую Пирит с маленькой флэшки, и пирит виснет при импортировании словаря в БД, можо ли ему указать где создавать (держать)  БД и где создавать таблицу? файлы с паролями у меня огромные гигов под 30, а флэшка 8Гб 🙂

  7. Alexey:

    У меня была очень похожая ситуация и именно с Pyrit. Посмотрите эту статью, разделы «Вынос домашней директории пользователя на отдельный диск (раздел диска)» и там же «Что делать, если не хватает места на диске». Там в командах поменяйте имя на имя вашего диска.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *