Брутфорс: полезная практика Докучаев Дмитрий aka Forb Xakep, номер #058, стр. 058-058-2 А получить его довольно просто. Заходим на главную страницу проекта, пытаемся залогиниться под пользователем, например, "vasya" (предварительно убедившись, что линк www.livejournal.com/~vasya содержит 1-2 записи, сделанных в 2000 году ;)). Естественно, сервер сообщит о неверности введенного пароля. Вернемся назад и откроем пагу в виде HTML-кода. После просмотра нужной формы станет ясно - для успешной аутентификации достаточно передать правильные поля user и password. Первое поле мы знаем, соответственно, наше "уравнение" содержит всего одно неизвестное, а учитывая тупость Васи, который не способен придумать нормальный пароль (как и подавляющее большинство ЖЖ-пользователей), у нас появляется шанс сломать аккаунт. Начало положено! Основная ошибка начинающих кодеров - поспешная реализация задачи без четкого понимания алгоритма. Любую задачу, пусть даже примитивную, следует разложить на n пунктов, после чего задуматься о способе реализации каждого из них. И лишь после этого приступить к процессу кодинга. Так будет и в нашем случае. Что мы имеем? Название полей формы (user и password), страницу, куда передаются данные, и метод передачи (POST). Попробуем послать POST-запрос. Телнетимся на 80 порт www.livejournal.com и пишем следующее: POST /login.bml HTTP/1.0 Host: www.livejournal.com Content-Type: application/x-www-form-urlencoded Content-Length: 24 Два раза Enter user=petya&password=1234& В ответе видим пагу, которая сообщает, что пользователь petya успешно залогинился на сервер (разумеется, у нас была заранее подготовлена рабочая учетная запись). Кодинг Теперь, когда мы располагаем полной информацией о форме, ее структуре и методе, можем начинать кодить. Дополнительно замечу: чтобы узнать результат перебора, совсем не обязательно грузить всю страницу-ответ. Достаточно послать HEAD-запрос, и при верном пароле скрипт создаст кукиз, в котором будет находиться имя пользователя. Следующая конструкция кода реализует чтение паролей из словаря и последовательный их перебор. Этот кусок кода, как и все программы из этой статьи, написан на Perl'е: Таблица1: Последовательный алгоритм переборщика open(file, "$words") || die print "$!\n"; while($pass=<file>) { # По каждому слову в файле chomp($pass); crack($pass); # Переходим на процедуру crack() } close (file); После реализации этого несложного алгоритма, мы получаем работоспособный брутфорсер. Полноценный вариант программы ты можешь найти под названием ljbrut1.pl на CD либо в архиве (ссылку на архив смотри во врезке). Работает все стабильно, но крайне медленно. Поэтому теперь займемся усовершенствованием нашего кода с применением потоков. |