Как создать программу брут

Чужая информация всегда привлекала к себе внимание, а когда к ней нет прямого доступа, возникает желание прибрести этот доступ контробандным путём. Если социальная инженерия и прочая игра на чувствах не срабатывает, остаётся идти на таран и использовать метод «грубой силы», что в дословном переводе на инглиш звучит как «Brute-Force». За периметром конкретной задачи брутфорс лишён смысла – каждый случай требует индивидуального подхода. А потому предлагаю ознакомиться с алгоритмами его реализации на программном уровне, чтобы самостоятельно решать проблемы по мере их поступления.

1. Общие сведения о криптологии;
2. Практика – генератор паролей;
3. Практика – брутфорс паролей;
4. Варианты оптимизации кода;

• выбор по индексу, ​
• распределение по потокам Thread. ​

1. Криптология – общие сведения

Разработкой методов крипта и декрипта информации занимается «криптология», которая пошла по двум направлениям – криптография и криптоанализ. Первая (криптография) – это наука о методах обеспечения конфиденциальности, т.е. изучает криптосистемы и способы шифрования данных. Криптоанализ-же занимается вопросами оценки слабых сторон отдельно взятых методов защиты. Соответственно два эти направления являются враждующими сторонами, между которыми идёт не шуточная война. В рамках представленного на ваш суд материала, нас будет интересовать только криптоанализ в виде атаки на шифр, а его обобщённую схему раскрывает рисунок ниже:

БРУТ АККАУНТОВ СТИМ!ЧЕКЕР!2017//Как взломать аккаунт стим?(Проверка и вся правда)

Crypto_class.png

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

Ссылка скрыта от гостей

. Чтобы понять, о чём пойдёт речь конкретно в этом треде, рассмотрим определение атак, которые выделены на рисунке выше коричневым цветом.

1.1. Атака с известным шифротекстом – «Сiphertext only attack».

В атаках этого класса предполагается, что взломщик знает алгоритм шифрования, но не знает секретный пароль. Это самый распространённый вид атак, внутри которых можно пойти по одной из следующих трёх веток:

1. Перебор ключей по словарю. Способ требует наличия «файла-словаря» – этакой базы, со списком всевозможных паролей. Словари лежат в свободном доступе, например

Ссылка скрыта от гостей

. Встречаются базы размером 30 и более гигаБайт, которые обычный блокнот мастдая уже не в силах открыть и нужно искать подходящий софт. В атаках по словарю, мы берём из него очередной пароль и подсовываем его жертве. Если облом, то парсим следующую запись и т.д. Если пароль криптостойкий и его нет в словаре, то данный подход вообще не даст результата, хотя в зависимости от размера используемой базы, процесс перебора может длиться довольно долго. ​

Brute-Force на PYTHON 😱

2. Полный перебор ключей – классический «брутфорс», или слепая атака в лоб. Отличается от метода со-словарём тем, что пароли в явном виде уже нигде не хранятся – их порождает заброшенная в цикл матка. В осуществляющем брут софте должна быть предусмотрена опция, которая позволяла-бы выбирать «алфавит» для паролей. На практике применяются следующие типы алфавитов: (1) только цифры 0..9, (2) только заглавные символы «A..Z», (3) пароли только из прописных символов «a..z», (4) гремучая смесь всех печатных символов, включая знаки препинания. Если брутить пароли с полным алфавитом(4), то перебор обязательно даст положительный результат и это придаёт надежды. Однако затраченное на поиск время может в несколько раз превысить возраст вселенной. ​

3. Частотный криптоанализ. Метод основывается на частоте повторения букв в пароле. Например, если пароль представляет собой осмысленное слово, то в англоязычных текстах много букв «e», и артиклей «the». Частотный криптоанализ – это любая атака, которая использует данный факт. Даже если пароль закодирован (к примеру подстановочным шифром Цезаря), то по частоте встречающихся символов можно сделать вывод, что это именно символ(е). ​

Таким образом, даже внутри одного класса атак имеем три совершенно разных подхода, мы-же остановимся только на втором варианте – брутфорс. По своей природе, он подразумевает попытку взлома паролей методом циклического перебора до полного совпадения. Если в качестве алфавита был выбран верхний регистр «A..Z», то на каждой итерации цикла к символу «А» прибавляем 1 и получаем «В».

После того-как дойдём до символа «Z» (26 итераций = длина алфавита), то добавляем к паролю второй символ и получаем «АА». Теперь продолжаем перебирать первый символ, пока не получим «ZA», после чего увеличиваем уже второй символ пароля «АВ» и т.д.. На каждой итерации цикла, текущий пароль забрасывается удочкой программе-жертве и если она его не проглотила, значит подставляем следующий, ..и так до второго пришествия архангела-Михаила.

При таких раскладах, противостоять бруту довольно просто – достаточно ввести ограничение на количество попыток-ввода неверного пароля (допустим 3-раза), как перебор отваливается сам по себе. Реализовать это можно проверкой хорошо спрятанного в нёдрах системы счётчика, или установкой аппаратного бряка на обращение к памяти (SEH + отладочные регистры DR0-7). Нужно помнить, что в современных реалиях программы для брутфорса паролей предлагают лишь теоретическое решение проблемы, без каких-либо гарантий по временной шкале. Прибегать к нему стоит лишь в том случае, когда основа пароля известна (например, это какое-то число или дата), и необходимо подобрать к ней комбинацию из дополнительных нескольких цифр/букв.

2. Практика – генератор паролей

Чтобы опробовать свои силы в бруте нам нужен пароль, ..а если готовых паролей нету, то напишем примитивный их генератор. Гугл предлагает нам различные варианты, а мы пополним этот зоопарк ещё одним «зверьком». В масштабах этой задачи, нужно будет сформировать три типа символьных алфавитов, из которых рандомом будем выбирать числа и буквы для пассвордов. С алфавитом проблем нет – его мы честно скомуниздим у кодировок «Base64/32/16», а рандом будем использовать как индекс (порядковый номер), для выборки символов из этих алфавитов. Base64 описывает стандарт

Ссылка скрыта от гостей

, в котором приводится полный его паспорт, в том числе и задействованные в кодировках символы:

Base_ascii.png

Посмотрите на таблицу символов ASCII – все числа и буквы в ней собраны последовательно с инкрементом +1. К примеру символ верхнего регистра «А» будет лежать в памяти нашей программы как значение 41h , а все буквы нижнего регистра начинаются с 61h , т.е. разница между ними =20h или всего один бит(5). Символы всех чисел 0..9 отличаются от своего-же 10-тичного значения ровно на 30h , т.е. «1»=31h, «2»=32h и т.д. Это упрощает их перевод из верхнего в нижний регистр, или из строки в число.

Читайте также:
Что будет выведено на экран после выполнения этой программы s 123456 q abc

Синтаксис ассемблера FASM имеет интересную директиву «%» . Если поместить её внутрь цикла, она возвращает текущий счётчик. Так-же, в наличии имеется директива «times» , которая повторяет одну инструкцию указанное кол-во раз. За ней должно следовать значение счётчика, и инструкция, которую нужно повторять (в нашем случае символ). Например, такая конструкция запишет в память все символы кодировки «Base64». Поскольку счётчик(%) начинает считать с единицы, делаем -1:

Base64: ;//

Base_mem.png

Будем считать, что забросили алфавиты в память, теперь нужно выбирать из них псевдо-случайные значения для пароля. Как видим, каждый из символов имеет свою позицию в дампе – это «индекс элемента» в массиве. Например по индексу(3) от начала лежит символ «D» со-значением 44h и т.д. (отсчёт с нуля).

Соответственно если мы сгенерим рандомный байт, то можем использовать его в качестве индекса для выборки случайного символа из общего алфавита. Только этот рандом обязательно должен быть в диапазоне 0..63, чтобы индекс не вылетал за пределы алфавита.

Если юзер захочет в генераторе паролей использовать символы кодировки «Base32», то и рандом должен быть в пределах 0..31. На практике, загнать значение в диапазон можно взятием остатка от деления. В данном случае, «потолки» всех алфавитов у нас кратны двум: 16,32,64, поэтому находить остаток от деления можно логикой, как в примере ниже (случайное значение лежит в регистре AL):

and al,63 ;// AL = число в диапазоне 0..63 and al,31 ;// AL = число в диапазоне 0..31 and al,15 ;// AL = число в диапазоне 0..15

Теперь в AL лежит число, значение которого мы должны использовать в качестве индекса в алфавите. Для этого, воспользуемся инструкцией ассемблера XLAT с таким описанием от Intel. Преимущество её в том, что она 1-байтная и процессор тратит на её исполнение всего 2 своих такта. За это время, инструкция «убивает сразу два зайца» по такой схеме:

XLAT – Table Look-up Translation (opcode = D7h)
————————————————
Находит запись байта в таблице в памяти, используя содержимое регистра AL в качестве индекса в таблице. Затем копирует содержимое записи таблицы обратно в регистр AL. Индекс в AL рассматривается как целое число без знака = 127.

Другими словами, эта инструкция требует, чтобы в регистре EBX лежал указатель на массив в памяти, а в регистр AL нужно поместить некоторый байт без-знака. Теперь XLAT берёт значение из AL и использует его как порядковый номер элемента в массиве EBX . На заключительном этапе, найденный элемент копируется обратно в регистр AL перезаписывая находящийся в нём индекс. На выходе в том-же AL получаем результат в виде символа из алфавита. Для нашего случая как-раз то, что доктор прописал, ..и всё это за каких-то пару тактов процессора.

Ну и в заключении о самом рандоме..
Сгенерить его можно различными путями – это и счётчик тактов процессора RDTSC , и текущие милли-секунды системного времени, и.. список можно продолжать бесконечно. Но без дополнительных танцев с бубном все эти варианты возвращают лишь 2, 4 или 8-байтный рандом, а ведь для индекса нам нужно число в диапазоне 0..16..32..64. Так-что мы пойдём другим путём, и специально предназначенной для крипта функцией CryptGenRandom() сгенерим сразу массив случайных чисел требуемой длинны – благо функция это позволяет. Теперь из этого массива будем читать по 1-байту, что и позволит решить проблему. В конечном итоге, прожку для генерации случайных паролей можно оформить например так:

Pass_gen.png

3. Практика – программа для брутфорса паролей

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

Авансом скажу, что за разумное время (примерно месяц), брутфорсом на одной машине можно подобрать пароли длинной не более 8-ми символов. На подбор представленных выше 16-значных паролей могут уйти года! Но если учесть, что производительность современных компьютеров сейчас на высоте, то «лобовой перебор» из утопии превратился в реальность – это не брут на третьих пеньках. А если распараллелить вычисления по всем ядрам CPU и собрать в кластер несколько таких машин (что собственно и делают хакерские группировки), то время брутфорса можно уменьшить в тысячи раз.

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

Соответственно на каждой итерации цикла нужно сравнивать обе строки, а в данном примере я отображаю ещё и процесс брута на консоль – это отнимает львиную долю времени перебора. Чтобы узнать чистый профайл брутфорса, можно закомментировать демонстрацию и оставить только сравнение паролей функцией lstrcmp() и сам полезный код, без SetConsoleCursorPosition() + printf() . Вот пример:

Обратите внимание, что чем длиннее алфавит, тем дольше длиться процесс перебора. Например алфавит «Base64» содержит вдвое больше символов, чем «Base32». Соответственно и обходить его в цикле по-времени будет в два раза накладней. Поэтому если пароль состоит только из цифр типа «12345», то и выбирать нужно самый короткий алфавит «Base16» – это на порядок увеличит скорость брутфорса, чем если-бы мы выбрали только для цифр алфавит «Base64».

Читайте также:
Вирус компьютер сам устанавливает программы

4. Варианты оптимизации кода

Время – основной фактор в циклическом инкременте паролей, а потому код должен быть максимально компактным, без избыточных обращений к памяти. Пример выше не может похвастаться этим, хотя и выполняет поставленную задачу. Ныне покойный К.Касперски был увлечён этим направлением и в своих трудах приводил различные фишки для оптимизации кода. Маэстро бесспорно отличался неординарным мышлением и предложил для брута весьма оригинальный вариант – рассмотрим его детали..

Значит по-прежнему имеем в памяти алфавит, из которого последовательно планируем выбирать символы для своего пароля. Здесь, мыщъх посоветовал выстрелить дробью и сразу убить стаю куропаток по такому алго. Мы знаем, что первым символом в алфавите является «А» с кодом 41h=65 . А что если использовать код очередного символа, в качестве индекса в алфавите? Правда в этом случае сам алфавит должен иметь строго определённый формат, зато код брутфорса сократится буквально до нескольких байт.

То-есть по адресу(0) в алфавите кладём символ(А) с кодом 41h , а по адресу(41h) вставляем в алфавит следующий символ(B) с кодом 42h . Далее, по адресу(42h) ставим символ(С) с кодом 43h , и т.д. Чтобы по окончании очередного прохода по всему алфавиту на автомате опять перейти в его начало, нужно всего-то закончить алфавит терминальным нулём, который послужит индексом к первому символу(А) алфавита. Всё остальное сделают инструкции XLAT (чтение в AL по индексу) и STOSB (сохранение считанного символа в пароль). Чуть запутано, но надеюсь рисунок ниже прояснит эту ситуацию:

Alpha_Table.png

Таким способом можно сформировать таблицу буквально всех символов, начиная с пробела с кодом 20h , и до самого подвала с символом тильда(~). Теперь наш текущий пароль будет хранить не только просто символы, но эти символы сами будут индексами к следующему символу в алфавите:

Невероятно, но буквально в 26-ти байтах мыщъх умудрился закодировать полноценный брутфорс паролей! Вот это действительно мысль достойная аплодисментов. В примере ниже я позаимствовал у него этот алгоритм, и добавил в него счётчик сгенерированных на текущий момент паролей. При каждом обновлении пароля, я увеличиваю регистр ECX на 1, после чего проверяю его на 100.000. Если равно, то запрашиваю процедуру вывода счётчика на консоль. Это позволит наблюдать скорость перебора паролей – вот вторая, оптимизированная версия брутфорса:

Чтобы посмотреть, с какой скоростью код перебирает пароли, я скомпилировал его в двух вариантах – с выводим процесса на консоль, и без него. Для этого я просто закомментировал следующие две строки кода:

invoke SetConsoleCursorPosition,[hndl],040010h ;// позиция курсора в консоли cinvoke printf,,passStr ;// показать текущий наш пароль

Если клавишей(F7) зайти в эти функции отладчиком, то обнаружим сотни строк кода, при помощи которых система реализует эти функции. Непосредственно полезная нагрузка брутфорса уходит в этом случае на 10-ый план, поэтому и время увеличивается соответственно. Эта разница показана на скринах ниже:

SpeddTest.png

5. Заключение

Здесь я попытался освятить только одну сторону этого интересного направления. За бортом остались «атаки по-словарю», и это чуть другая тема со-своим подходом. Как нибудь в другой раз мы обязательно вернёмся к ней, поскольку в своей массе юзеры используют для паролей именно осмысленные слова, а вот фантазии у них не хватает. Поэтому перебор по-словарю всегда идёт на шаг впереди брутфорса.

В скрепку я положил три исполняемых файла, коды которых мы рассмотрели выше. В версии(1) имеется возможность выбрать алфавит для паролей «Base16/32/64», зато сам алгоритм перебора оставляет желать лучшего. Во-второй версии алго оптимизирован, но алфавит включает в себя все печатные символы, из-за чего процесс перебора может длиться дольше.

Без проблем можно было заточить версию(2) и на выбор алфавита, с построением соответствующих таблиц. Но оставлю это вам в качестве дз. Здесь ставлю точку, и до скорого!

Источник: codeby.net

Статья Пишем однопоточный брут C#

Статус В этой теме нельзя размещать новые ответы.

Albert

Заблокирован

Albert

Заблокирован

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

1) Немного истории
Еще в начале года я начал искать информацию по написанию брутфорса в сети.
Ее было очень мало, пришлось даже кое-что переводить с испанского =)).
Но я не сдавался и продолжал поиски, и вот месяца два назад я во всем разобрался и написал простой однопоточный брутфорс. Но до «гигантов» типа «Brutus AET2» было далеко. Я стал искать информацию про многопоточность, и мои поиски увенчались успехом. Теперь все информация собрана и я пишу эту статью, чтобы тем кто решил написать брут не пришлось лазать по уголкам сети, собирая информацию.
2)Теория
В своем предыдущем рассказе, я не раз упомянул слово брутфорс. Что же это такое?
Покажу на примере: Допустим, вы забыли свой пароль не Email (кстати, это происходит довольно часто).
Можно попробовать восстановить пароль через контрольный вопрос или мобильный телефон, но если мобильного нет, а в контрольном вопросе написано — «Сколько зубов на правой лапе у моего кота?”.
Что тогда делать? Правильно, пытаться подобрать пароль. Но как. Вручную?? Конечно же нет, для этого и создан брутфорс, чтобы делать перебор за вас.
Принцип работы простой: Указываем наш Email и подключаем список паролей. Жмем Start и идем заниматься своими делами. Когда будет подобран правильный пароль, брутфорс выведет его на экран.
Все бы хорошо, но если у нас в словаре миллион паролей? Брут отправит миллион запросов на сервер и сервер подумает, что мы пытаемся взломать чужой ящик, и просто заблокирует наш IP адрес. Как тогда быть?
Для этого предусмотрели прокси-сервера. Я не буду рассказывать, что это такое, так как это довольно обширная тема. Почитать про прокси можно

Войдите или зарегистрируйтесь для просмотра ссылок.

. В двух словах: прокси поменяют наш IP и перебор продолжится.

Последний пункт теории — режимы перебора.
Их всего два: однопоточный и многопоточный.

В однопоточном режиме брутфорс берет первый пароль и ждет ответ от сервера. Когда ответ получен — берет следующий пароль и т.д.

В многопоточном режиме брутфорс создает множество потоков. В каждом из них происходит перебор, т. е. брутфорсу не нужно ждать ответа от сервера для продолжения. Он просто создает следующий поток и перебор продолжается.
Пример: Вы решили скачать фильм через торрент. Вы нашли торрент файл и поставили закачку. Пока идет закачка, вы, например, зашли в Контакт и переписываетесь с друзьями. В одном потоке работает браузер, а в другом торрент усердно качает фильм, а в третьем антивирус выполняет сканирование системы и т.д
Надеюсь, понятно объяснил.

Читайте также:
Как делать пояснительную записку к программе

2)Долгожданная практика
Пока мы напишем простой однопоточный брут (чтобы мозги не перегружать), а во второй части стать, я расскажу о создании многопоточного перебора и смене
прокси + приведу свои части кода, которые вы можете использовать в своих проектах.
Итак! Поехали.
Открываем VB.NET, создаем обычный проект и делаем примерно такой дизайн:

93db25973b92ea910ba63944e39b38ee.JPG

Теперь надо определиться с сервером и «отснифать» запросы.
Я покажу на примере Маил.ру:
1)Скачиваем программу

Войдите или зарегистрируйтесь для просмотра ссылок.

.
С помощью нее мы посмотрим, как происходит авторизация на сервере.
2) Запускаем Stand-Alone версию программы:3

Войдите или зарегистрируйтесь для просмотра ссылок.

3) Идем на Маил.ру почту и вводим данные, но пока не входим:

3b440f014369644bccdeb4cacf68feaf.jpg

4) В HttpAnalyzer’е отщелкиваем паузу.
Возвращаемся в Маил Почту и жмем Войти.
Теперь обратно в сниффер. Наблюдаем следующее:

Войдите или зарегистрируйтесь для просмотра ссылок.

Синим цветом выделен POST запрос на скрипт авторизации.
URL — адрес скрипта авторизации
Смотрим, какие данные отправляются:
Login — Логин
Domain — Домен
Password — Пароль
Saveauth — Надо ли сохранять наши данные (точно не уверен)
Про последний параметр ничего сказать не могу, но он нам и не нужем:н =)
Пробуем отправить запрос:

1f7df47699066cb7b8d4a3c0a52fd5ae.JPG

Если все введено правильно, то попадаем на свою почту.
Если нет, то увидим сообщение об ошибке входа.

5) Теперь мы знаем, как происходит авторизация на сервере, но нам еще надо сравнить кукисы при правильных и неправильных данных.
Для этого идем на вкладку Cookies. Нас интересует правая часть:

ed8d519ab035a4d0e2ff4a46054e237a.JPG

Видим, что создаются две куки: Mpop и t.
«Set — Cookie» — поле заголовка отправляемого на сервер.
6) Теперь введем левые данные и проанализируем результат.
Видим, что кукисы не создаются.
Отлично! Теперь мы знаем как написать брутфорс:

Для начала объявим массив, в который поместим пароли из словаря:

Public PassList As New ArrayList
Код для кнопки «. » (три точки):

Dim f As New OpenFileDialog ‘ Создаем новый диалог октрытия файла If f.ShowDialog = Windows.Forms.DialogResult.OK And f.FileName <> «» Then ‘ Если пользователь выбрал список, то PassList.AddRange(IO.File.ReadAllLines(f.FileName)) ‘ Считываем все пароли в массив txtPassList.Text=f.FileName ‘ Выводим в текстбокс путь до файла End If


Теперь код для кнопки Начать перебор:

If txtLogin.Text <> «» Then ‘ Если ввели логин то Dim i As Integer = 0 ‘ Объявляем счетчик для перебора For i = 0 To PassList.Count — 1 ‘ Перебираем, пока есть пароли System.Threading.Thread.Sleep(1000) Dim Request As Net.HttpWebRequest = Net.HttpWebRequest.Create(«

Войдите или зарегистрируйтесь для просмотра ссылок.

Если что-то непонятно — напишите мне. Свои контакты оставлю ниже.

Делаем словарь паролей типа:
73736236
[тут правильный пароль]
hh28236e
32843
234411dsdfd

Скопируйте и поменяйте красный текст на свой пароль.
Подключаем все к программе:

Источник: bhf.gg

Пишем брутфорс для livejournal.com

Всем известно, как в последнее время стал
популярен ресурс livejournal.com или попросту ЖЖ.
Сделать аккаунт в этой системе далеко не
просто. Нужно либо заплатить за ключ, либо
попросить его у знакомых ЖЖистов.

Существует известная пословица: чем
просить и унижаться, лучше цензурой> и молчать :). Поэтому, сегодня мы
будем писать брутфорс, который с легкой
руки поломает ЖЖ какого-нибудь американца
лабуха :). Разумеется, ты должен выбирать
жертву, которая кинула пару сообщений после
регистрации, а потом как в воду канула, то
есть попросту забила на livejournal. Таких
аккаунтов полно и их можно узнать без
проблем.

Итак, вернемся к нашей задумке. Вначале нам
нужно узнать, как осуществляется логин в
систему. Зайдя на www.livejournal.com/login.bml мы увидим
в правом верхнем углу маленькую форму для
логина. Нет, я сужу не про большую в середине
экрана. После просмотра html-кода я выбрал
маленькую. Дело в том, что в этой форме всего
два параметра, в отличии от полноценной. Наш
будущий брутфорс должен передавать минимум
данных для высокого КПД, поэтому
остановимся на этой формочке.

Форма имеет два параметра: user и password. Сам
скрипт может получить необязательный
параметр mode, значение которого равно «login».
Видимо, при передаче user и password система
подразумевает авторизацию. Нетерпеливо
вбив в броузере ссылку http://www.livejournal.com/login.bml?user=fuck и увеличить длину строки на
единичку, то сервер успешно кушал данные и
возвращал Loginned.

Мне очень не хотелось выкачивать всю
длинную ХТМЛину и вырезать из нее строку
Loginned. Я хотел ограничиться скромным recv на
один килобайт данных :). Это было возможным,
так как сервер проставлял кукизы в header-строках.
В этих куках при удачном ответе содержалось
имя пользователя и зашифрованный пароль,
примерно в таком формате:

Set-Cookie: ljsession=ws:fuck:1:fDjwfWdsC; path=/; HttpOnly

Ничто не мешало проверить, есть ли в header’е
имя пользователя и если есть — прекращать
брутфорсинг и писать в лог аккаунт.

В теории брутфорс был написан. Осталось
реализовать это дело на практике. Я
использовал Perl для кодинга, ибо знаю этот
язык уже третий год и он идеально подходил
для моих задумок. Поискав у себя на винте
шаблон брута, я нашел MIME-брутфорс для httpd-аккаунтов,
который как-то описывал на этом сайте :).
Немного изменив его, я получил полноценный
ЖЖ-брутфорс. Единственным его минусом
является однопотоковость, но для такого
крутого кодера как ты, я считаю это не будет
большой проблемой :). Тебе остается
реализовать многопотоковость, либо
пользоваться моей демо-версией ;).

Итак, собственно код:

## Отправим в сокет
длинный header

$socket->recv($answer,1024); ## И
прочитаем возврат = 1 кб данных

if ($answer=~/:$user:/) open(logf, «>>$logfile») or die print «$!n»;
print logf «$user:$pass is OK. n»;
close logf;
print «$user:$pass is OK. n»;
exit 0; ## Если он содержит
строку вида :user: — пишем лог и завершаем брут.
> ## Иначе, проверяем
следующий пароль
>

Вот собственно и весь брутфорс. Проверен
лично мной — работает на ура :). Но аккаунтов
для проверки я тебе не дам — я жадный ;), тести
на своих. Как видишь все просто осуществить,
если только захотеть.

Источник: xakep.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru