![]() |
Пишем консольный клиент для Web-сервиса на примере Hash Cracking Bot (HCB)
Пишем клиент для Web-сервиса на примере Hash Cracking Bot (HCB) для hashcracking.info [Intro] Сидел я на работе в одно дождливое осеннее утро попивая утренний кофе и мечтал... Мечтал о суперботнете для распределённых вычислений на GPU.Ведь если взять хотя бы 10% мощности современной видеокарты, то скорость перебора для MD5 хэшей получится в районе 30-50 млн. пасс/сек. Представим ботнет из 1К таких компьютеров и получаем производительность 30-50 млрд. пасс/сек. Две самые мощные видеокарты на одном компе дадут производительность 1-1,5 млрд. пасс/сек, но это при 100% загрузке обеих GPU, что отрицательно сказывается на производительности компьютера в целом. (Т.е. чтоб комфортно работать на нём, ресурсов не хватит, конкретно - пропускной способности шины данных между GPU-память не хватает). Вообщем мечты, мечты... Тут я вспомнил подпись Электа "Кто, если не ты сам?" и решил начать с малого, чтоб мечта, хоть как-то приблизилась к той альтернативной реальности, где этот бот уже существует в виде "правильного" набора байтов (реализован в коде). Теперь посмотрим вперёд: У ATI тоже есть своя технология для разработки и написания софта для параллельных вычислений, пример тому программа брутфорсер IGHASHGPU (https://hashcracking.info/forum/viewtopic.php?f=10&t=304) которая поддерживает как видеокарты nVidia 8xx, так и ATI 4хх и пока бесплатна. Т.е. логично предполагать, что каждый второй или третий комп через 1-2 года будет оснащён такой видеокартой. Активные пользователи интернета - молодёжь, а значит, они любят и развлечься - поиграть в компьютерные игры, т.е. имеют в компе современную видеокарту. Конечно это предположение... Но скорее всего именно через 1-2 года бот будет как нельзя кстати, т.е. есть время начать его писать уже сейчас. Термины используемые в статье cURL — это свободная (распространяемая по лицензии MIT)[1], кроссплатформенная служебная программа командной строки для передачи файлов по различным протоколам с синтаксом URL. Автором и обладателем всех прав является Daniel Stenberg.SSL (англ. Secure Sockets Layer — уровень защищённых сокетов) — криптографический протокол, обеспечивающий безопасную передачу данных по сети Интернет. (c) Вики [Для кого написана статья?] Статья для начинающих кодеров на PHP, для тех кто не работал с CURL, SSL, а использовал сокеты. Как раз этот пробел я восполню, ибо в сети полная инфа по CURL есть на английском и мало примеров использования на русском. Статья будет интересна хэшкрякерам, тем, кто использует программы брутфорсы и юзает сервис hashcracking.info (имеет там учётную запись).[Нафиг я её писал?] Раскрутка сервиса hashcracking.info? (она имеет обратную сторону - при использовании бота Вам заходить на сайт совсем не надо - он всё сам делает) Так что не обвиняйте меня в том, что это реклама! Популяризация хэшкряка (как занятия, хобби, работы) как такового в рунете. Популяризация кодинга на PHP для создания win-приложений. Пополнение рядов хэшкрякеров в этом увлекательном деле. Кто-то любит ловить рыбу, хэшкрякеры любят ловить пароли, и чем жирнее (чарсет) и длиннее тем лучше. Вообщем я ничего давно не писал и вот решил написать, я думаю многие по достоинству оценят сей труд, а немногие будут плеваться, ну на это мне самому, как бы, наплевать. Социалки достали уже, если честно, эпоха расцвета WEB2 :( [Подготовка] На чём писать? Подумал я... Хотелось бы конечно сделать в идеале на Visual С++ c красивыми окошками и т.д. но учитывая мои слабые знания в этой области (где брать либы, где достать хороший ман по функциям и т.д.) я решил это дело оформить на PHP. PHP привлекателен тем что содержит мощный набор встроенных функций и заточен под WEB. Кроме того вспомнил одну запись в блоге Raz0r`a, что есть удобные инструменты для разработки полноценных приложений для windows и компиляции php в exe, прикручивания GUI к приложению. Вообщем полез я в его блог искать ту запись и нашёл в архивчике.Инструментов обнаружилось два: это mini PHP Studio (http://exvision.net/miniphp/) и RoadSend Studio (http://www.roadsend.com/home/index.php). Я скачал оба и попробовал некоторые тестовые скрипты, в итоге мне больше понравился mini PHP Studio своей лаконичной простотой в управлении, а с RoadSend Studio постоянно возникали какие-то проблемы из-за отсутствия нужных библиотек (хотя я их подключал практически все). Вообщем инструмент я выбрал. Будем использовать mini PHP Studio. Для того чтоб заюзать все возможности CURL и SSL нам необходимо будет найти и подключить к php соответствующие либы (расширения). Необходимы две либы это: php_curl.dll и php_openssl.dll. Так же я узнал чтоб всё это дела работало необходимы системные библиотеки это libeay32.dll и ssleay32.dll. Чтоб не заморачиваться с их поиском просто рекомендую установить поддержку Open SSL Win32 (http://www.slproweb.com/products/Win32OpenSSL.html) и они появятся в системе. Теперь всё готово и можно приступать к кодингу. [Постановка задачи] Мы хотим разработать клиентское приложение для общения с WEB-сервисом, а именно бота для hashcracking.info , который будет выполнять следующие функции:1. Скачивание нужной очереди хэшей с сервиса (авторизация не требуется). 2. Запуск программы брутфорса (тут на примере будем EGB натравливать на очередь хэшей). 3. Отправка найденных паролей от хэшей в очереди на сервис (необходима авторизация). Это неполный список задач, но это только начало. [Подводные камни] Ну во-первых, всем известно что hashcracking.info работает только по https протоколу, при обращении к любой странице по http отображается морда-заглушка сайта, с которой потом идёт редирект на https.Во вторых, на работе у меня локальная прокся (UserGate4), поэтому надо сделать так чтоб бот её мог использовать, иначе он не сможет достучатся до сервиса. Ну и последнее, что использовать сокеты или CURL? Дружит ли он с SSL? Кроме того для отправки паролей необходима авторизация на сервисе. Чтобы разрешить все сомнения я полез в гугл и нашёл ман по СURL на английском и убедился что поддержка SSL и PROXY в нём реализована, поэтому и остановил свой выбор на нём. Кроме того использовать его намного проще чем заморачиваться с сокетами. [Кодим] Настройки бота я решил положить в один файл hcb.ini, где первая строка описание параметра, вторая - его значение. Все параметры добавлял туда по мере разработки проекта, Вам привожу окончательный вид на данный момент:Код:
Файл с хэшами (очередь с сервера запишется в него, сохраняется в папку брутфорса, путь указывать не надо)PHP код:
[1.Скачивание очереди хэшей] Казалось бы тривиальная задача скачать файл оборачивается написанием функции из-за использования SSL.Сервис хэшкрэкинга предоставляет нам свой API для получения очереди (и не только) таким образом: Код:
https://hashcracking.info/check.php?hash=[тип хэша], где тип хэша может принимать значения mysql, md5, sha1, mysql5Напишем функцию скачки очереди get_hash($n), предварительно объявив несколько глобальных переменных, которые будут использоваться как в функциях, так и в основном коде, это параметры прокси-сервера: PHP код:
PHP код:
[2. Запуск программы брутфорса] И так мы должны скачать очередь, записать её в файл и положить в папку брутфорсера EGB, далее запустить брутфорсер в фоновом режиме. Т.е. бот не будет ждать завершения брутфорса, а должен будет продолжить свою работу.PHP код:
Недолго погуглив я нашёл приемлемые варианты запуска в фоновом режиме: PHP код:
3. Отправка найденных паролей от хэшей в очереди на сервис (необходима авторизация). Тут надо определится как мы будем отслеживать какие пароли нашёл брутфорсер. Я решил буду это определять считывая размер файла. Т.е. если размер файла изменился, то читаю пароли с указателя равному предыдущему размеру файла до конца файла. Размер файла будем замерять периодически.Итак: PHP код:
...Продолжение следует. Оно нужно? Если тема не найдёт свою аудиторию, боян и т.д., то продолжать не буду, юзайте готового бота и не лазайте на сайт браузером ;) P.S.Скачать готового бота и затестить можно тут: http://slil.ru/28080917 Результаты проверки на VirusTotal.com: Цитата:
|
все зависит от компилятора + тотже UPX
|
Цитата:
P.S. и Это... самого брутфорсера пока там нет! Он только запускает EGB-брутфорс (уже должен стоять на компе). |
Продолжение в студию :)
ТС, интересная мысль возникла при прочтении, стукни лс) |
2Lebed
Цитата:
ввести на сервере дополнительно функцию положительного ответа о приеме данных "считаем сколько пасов в файле - Соединяемся - отправляем - ждем подтверждения с количеством - если количество совпадает то рвем соединение - очищаем файл - на сервере помечаем как найденные и больше не даем их ботам" (это как я вижу)/ Цитата:
|
Как бы коллекция реалрассов не мешает на локальном компе (потом можно юзать как словарь для гибридной атаки). Можно поставить удаление как опцию, хотя оно и не нужно. Тут ещё такой смысл, что могут работать несколько брутфорсов и писать результат в один и тот же файл! Ну вот бот и будет из общей кучи забирать пароли.
Есть ответы от сервера, примерно так выглядит всё: Код:
Download hashlist md5 ...ok!P.S. Продолжение будет завтра или сёдня вечером, (пара функций дома осталась) |
Цитата:
Если его не вернули то снимать пометку о том что он взятый и отдавать обратно в очередь ибо если этого не делать то может получиться что человек взял хэш а у него бумсь и слетела винда - хэши так и останутся висеть где то в воздухе. (мысли в слух - просто строю картинку у ся в голове) Цитата:
Цитата:
З.Ы. уже как две недели колупаю CUDA под C++ |
Не... хэши остаются висеть в очереди на сервисе для других пользователей, бот их не удаляет оттуда, просто скачивает копию себе для локального брута, найденные пассы потом отправляет обратно на сервер. Если хэши от паролей на момент отправки всё ещё находятся в очереди, то происходит успешное добавление паролей в базу и удаление хэшей из очереди.
|
ну тогда боту, вместе с хэшем нужно передавать еще и диапазон для сканирования ибо получится что куча ботов будет брутить один и тот же диапазон что сведет на НЕТ всю идею распределенности.
(просто ссылке что в коде, по "md5" я увидел только хэши а EGB начнет брутить с первого символа диапазона, или я ошибаюсь насчет EGB?) |
... продолжение как и обещал.
... Для отправки паролей функцией put_pas($passlist) необходима авторизация на сервисе, оформим её отдельной функцией:
PHP код:
Теперь переходим к функции заливки паролей она практически идентична авторизации, только заменяем данные POST PHP код:
собираем всё воедино: PHP код:
[заключение] Вот мы и рассмотрели работу cURL по HTTPS протоколу, отправку GET, POST запросов, пример авторизации и работы с кукисами. Теперь Вам не составить труда написать любой клиент, работающий по HTTPS c поддержкой прокси (например https брутфорс или какой-нибудь кликатель) Анализировать передаваеммые данные GET и POST запросов можно через любую программу, перехватывающую их, я использовал плагин для FF UrlParams 2.2.0P.S. Отдельное спасибо Raz0r за его блог, буду почаще туда заглядывать, что и другим советую, Red_Red1 за ответы на мои некоторые вопросы. |
| Время: 02:37 |