Python Безопасность Брутфорс

Python в ИБ. Часть 5. Создаём брутфорсер формы.

Сегодня мы научимся писать скрипт для брута формы авторизации. Брутить будем форму авторизации, созданную в сервере,...

Python в ИБ. Часть 5. Создаём брутфорсер формы.

Сегодня мы научимся писать скрипт для брута формы авторизации. Брутить будем форму авторизации, созданную в сервере, который мы написали на прошлом уроке.

Теория.

Используем библиотеку pwntools (про неё мы писали в части 3). Также нам понадобятся словари, возьмём топ-1000 логинов и паролей.

Подразумевается, что мы не знаем не логинов не паролей. Для брута чистых  TCP приложений (например FTP-серверов) — это достаточно реальное предположение.

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

Практика.

Итак, приступим. Нам необходимо запустить написанный нами в прошлом уроке сервер (если вы ещё не читали этот урок, то обязательно прочтите).

Запустим его на машине, на которой не будет запускаться наш скрипт. Можно запустить на основной машине и запускать скрипт с виртуалки, или наоборот.

Запуск сервера мы опустим, т.к. это показывалось в прошлом уроке. Также, опустим и объяснение работы сервера.

Для начала качнём словари с логинами и паролями. Для этого используем хороший репозиторий на github’e в котором есть словари паролей и логинов, при чём разнообразных и в большом количестве (ссылка).

Для имён пользователя возьмём словарь — ссылка (вы можете взять другой)

Для паролей словарь — ссылка.

Скачиваем эти словари и помещаем их в одну папку с нашим скриптом.

Поехали.

Сделаем необходимые импорты.

Для начала нам нужно написать простенький код сетевого клиента, а именно принятие аргументов при запуске из командной строки.

Здесь всё довольно просто. Есть 4 аргумента: хост, порт, файл с логинами, файл с паролями. Здесь всё тривиально и уже рассматривалось не один раз.

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

Открываем файл, считываем всё из файла и разбиваем считанное по разделителю в виде символа переноса строки (то есть получаем отдельные строчки), закрываем файл, возвращаем полученный список. Если вы не поняли, что произошло, советую посмотреть про функции работы с файлами и функцию split.

Теперь получим наши списки и сохраним в отдельные переменные.

Пришло время подключаться и перебирать логины.

Начинаем цикл по списку из имён пользователей, т.к. при неудачном вводе сервер разрывает соединение, на каждой итерации нам надо устанавливать новое подключение. После установки подключения мы считываем данные, пока не встретим приглашения ввода имени пользователя (строка 28), после чего мы отправляем имя пользователя на сервер и ожидаем ответ, если в ответе содержится сообщение о том, что имя неверное, мы просто заканчиваем текущую итерацию и закрываем наш клиент. Если такое сообщение не пришло, то мы считаем, что был найден верный логин и заканчиваем данный цикл с выводом верного логина на экран. Запустим наш код и проверим его.

Мы нашли имя пользователя. Чтобы убрать сообщения об открытых и закрытых соединениях, можно дописать слово SILENT в конце строки запуска скрипта.

Теперь напишем код для брута пароля. При этом будем использовать логин найденный в ходе первого цикла, то есть не будем запускать скрипт два раза: для нахождения логина, для нахождения пароля, а будем запускать всего один раз для нахождения всего.

Итак, код делает практически тоже самое, что и для имени пользователя, вы можете их сравнить. Переменная  valid_username была добавлена и теперь код для нахождения имени пользователя выглядит так.

Просто сохраняем верное имя пользователя в отдельной переменной, чтобы потом её использовать в поиске пароля.

Запустим всё что мы написали.

Отлично, мы нашли логин и пароль.

Теперь ты знаешь как на питоне написать простейший брутфорсер. Но это далеко не всё о чём мы хотели тебе рассказать.

Вас ебали, ебут и будут ебать. Государство, хакеры, чиновники.
Остановить эту свингер-пати невозможно. Но мы научим предохраняться.
Следите за новостями на нашем канале @cybersecs или на сайте
cybersec.org

Очень злой админ
Очень злой админ Автор статьи

Админ сайта. Публикует интересные статьи с других ресурсов, либо их переводы. Если есть настроение, бывает, что пишет и что-то своё.

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

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