Fresh | Дата: Понедельник, 2016-03-28, 14:30 | Сообщение # 1 |
Админ
Группа: Админ
Сообщений: 163
Репутация: 32767
Статус: Offline
|
Модули http-post-form и http-get-form
По умолчанию эти модули сконфигурированы на следование максимум по пяти редиректам подряд. Они всегда собирают новые куки для одинаковых URL без значений.
Параметр принимает три величины разделённых двоеточием ":", плюс опциональную величину.
(Примечание: если вам нужно двоеточие в строке опции в качестве значения, экранируйте его так "\:", но не экранируйте "\" на "\\".)
Синтаксис:
Код <url>:<параметры формы>:<строки условия>[:<опционально>[:<опционально>]
Первое - это URL страницы на сервере, принимающей GET или POST.
Второе - это величины POST/GET (принятые хоть от браузера, прокси и т. д.) имена пользователя и пароли будут символизируют заполнители "^USER^" и "^PASS^" (параметры формы).
Третье - это строка, которая проверяет на *неверный* логин (по умолчанию).
Строке, соответствующей условию введения неверных учётных данных может предшествовать строка "F=", строке, соответствующей условию введения верных учётных данных должна предшествовать "S=".
Здесь многие ошибаются. Вы должны проверить веб-приложение, на что похожа строка, выдаваемая при неверных учётных данных и скопировать её в этот параметр!
Следующие параметры опциональные:
C=/page/uri определяет другую страницу для сбора базовых куки (h|H)=My-Hdr\: foo для отправки заданных пользователем HTTP заголовка при каждом запросе ^USER^ и ^PASS^ также могут быть внесены в этот заголовок! Справка: 'h' добавит заданный пользователем заголовок в конец не обращая внимания, был ли он уже отправлен Hydra или нет.
'H' заменит значение существующего заголовка той строкой, которая задана пользователем или добавит заголовок в конец
Обратите внимание, что если вам нужно двоеточие (:) в ваших заголовках, то его нужно экранировать обратным слэшем (\).
Все двоеточия, которые не являются разделителями опций, должны быть экранированы (смотрите примеры выше и ниже).
Вы можете задать заголовок без экранирования двоеточий, но таким образом вы не сможете разместить двоеточия в самих значениях заголовка, поскольку они будут интерпретироваться в hydra как разделители.
Примеры:
Код "/login.php:user=^USER^&pass=^PASS^:incorrect" "/login.php:user=^USER^&pass=^PASS^&colon=colon\:escape:S=authlog=.*success" "/login.php:user=^USER^&pass=^PASS^&mid=123:authlog=.*failed" "/:user=^USER&pass=^PASS^:failed:H=Authorization\: Basic dT1w:H=Cookie\: sessid=aaaa:h=X-User\: ^USER^" "/exchweb/bin/auth/owaauth.dll:destination=http%3A%2F%2F<target>%2Fexchange&flags=0&username=<domain>%5C^USER^&password=^PASS^&SubmitCreds=x&trusted=0:reason=:C=/exchweb"
Полная команда для брутфорса сайтов с Hydra выглядит примерно так:
Код hydra -L logins.txt -P passwords.txt http-post-form://example.org/ -m "/signin.php:login_username=^USER^&login_password=^PASS^:Please login"
Подробнее об элементах:
-L logins.txt -P passwords.txt - это имена пользователей и пароли, как их можно задать рассказывается в первой части — если вы не понимаете этот фрагмент, то начните чтение с первой части.
http-post-form - это протокол, точнее говоря, это указание на то, что брутфорсится форма ввода (form) сайта (http), которая отправляет параметры методом POST (post).
Вместо http-post-form может быть указан http-get-form - в случае, если форма отправляет параметры методом GET.
example.org - адрес сайта для подбора паролей
-m - ключ, который говорит о том, что сейчас будет передана специальная опция для модуля (в данном случае для модуля http-post-form)
"/signin.php:login_username=^USER^&login_password=^PASS^:Please login" - эта и есть передаваемая опция, уберём кавычки и разделим её на три части, разделителем служит двоеточие
/signin.php - адрес страницы, куда передаются данные формы, должен начинаться со слеша
login_username=^USER^&login_password=^PASS^ - это строка, которая передаётся форме. О ней подробнее рассказывалось чуть выше. ^USER^ - это заполнитель, который будет заменяться на имя пользователя. ^PASS^ - это заполнитель для пароля.
Слова login_username и login_password - это названия полей формы, они у каждой формы свои, их нужно задавать самому.
Please login - это строка, которую hydra будет искать в присланном от сайта ответе после введения учётных данных. Если эта строка присутствует, значит попытка аутентификация провалилась, учётные данные неверны и нужно пробовать следующие логины и пароли. Если эта строка отсутствует, значит произошёл вход. Эта строка индивидуальна для каждого сайта и вам самостоятельно нужно её выявлять и задавать.
Как видно, достаточно запутанно, плюс к этому, есть ещё и подводные камни. Давайте будем разбираться на конкретных примерах.
Как ввести данные в Hydra для перебора пароля на сайте
Рассмотрим на примере конкретного сайта. Форму можно исследовать двумя способами - статическим и динамическим. Давайте рассмотрим оба способа последовательно.
Дан сайт с адресом https://example.org/. На этом сайте есть форма для ввода пароля:
Код <form method="post" enctype="application/x-www-form-urlencoded" action="?signin" style="margin: 10px;"> <table> <tr> <td><label>Имя</label></td> <td><input type="text" style="font-size: 11px" name="login_username" size="10" value="Имя" onfocus="if (this.value == 'Имя') this.value = '';" /></td> </tr> <tr> <td><label>Пароль</label></td> <td><input type="password" style="font-size: 11px" name="login_password" size="10" /></td> </tr> <tr> <td><label><input type="checkbox" name="cookieuser" value="1" checked="checked" />Запомнить?</label></td> <td><input type="submit" value="Вход" title="Введите Ваше имя пользователя и пароль, чтобы войти, или нажмите кнопку 'Регистрация', чтобы зарегистрироваться." /></td> </tr> </table> </form>
Задача - составить команду для hydra под эту форму.
В форме видим строку
method="post"
Значит будем использовать метод http-post-form, итак, начнёт писать нашу команду:
Код hydra -l 111111 -p 222222 http-post-form://example.org
111111 и 222222 - это предполагаемое имя и пароль пользователя (можно указать файлы для перебора)
http-post-form - это указание на используемый модуль (на используемый протокол)
example.org - это адрес сайта (обязательно без конечного слэша).
Теперь нам нужно составить строку, состоящую из трёх величин, разделённых двоеточием
"адрес_страницы_куда_отправляются_данные_из_формы:передаваемая_в_форму_строка:строка_которую_ищем_в_ответе"
Глядя на форму мы видим, что она свои данные передаёт на страницу ?signin - поставим перед ним слеш и первый элемент строки готов:
Форма содержит следующие поля: login_username, login_password, cookieuser
login_username передаёт имя пользователя, т.е. ^USER^, поэтому login_username=^USER^, login_password передаёт пароль пользователя, т.е. поэтому ^PASS^ login_password=^PASS^, есть есть cookieuser, присвоим ей статичную величину cookieuser=1, теперь полученные отрезки объединяем символом &:
Код login_username=^USER^&login_password=^PASS^&cookieuser=1
Теперь третий элемент - то, что мы будем искать в ответе. Например, в форме есть строка «Введите Ваше имя пользователя и пароль». Практически наверняка после входа на сайт эта строка не отображается - поскольку она больше не нужна. Поэтому мы выбираем её для поиска: если она найдена, перебор будет продолжаться, если в ответе нет этой строки, значит мы успешно вошли, т. е. угадали логин и пароль.
Ещё можно попробовать ввести любые учётные и посмотреть на ошибку, которую выдаёт веб-сайт. Эту ошибку (часть этой строки) и нужно использовать.
Т.е. мы составили три подстроки, исходя из анализа формы:
Код /?signin login_username=^USER^&login_password=^PASS^&cookieuser=1 Введите Ваше имя пользователя и пароль
Объединим эти строки, разделив их двоеточием:
Код /?signin:login_username=^USER^&login_password=^PASS^&cookieuser=1:Введите Ваше имя пользователя и пароль
Эту строку нужно взять в двойные кавычки и перед ней поставить ключ -m. Т.е. наша строка для брутфорса теперь выглядит так:
Код hydra -l 111111 -p 222222 http-post-form://example.org -m "/?signin:login_username=^USER^&login_password=^PASS^&cookieuser=1:Введите Ваше имя пользователя и пароль"
Для большинства сайтов этот алгоритм будет работать.
Но для конкретного этого сайта, даже при подстановке верных учётных данных hydra не может распознать, что пароль подобран. Это первый подводный камень:
Hydra и проблема для сайтов с редиректом Для анализа проблемы я буду использовать ключ -d
Код hydra -l 111111 -p 222222 http-post-form://example.org -m "/?signin:login_username=^USER^&login_password=^PASS^&cookieuser=1:Введите Ваше имя пользователя и пароль" -d
Вот часть из сообщения отладки:
Это то, что отправляет сервер в ответ на попытку авторизации. Оказывается, никакие сообщения об ошибке не показываются, вообще ничего не показывается - происходит только редирект.
Повторюсь, такие ситуации не часты - скорее, это исключения. «Нормальные» сайты показывают нам нормальные сообщения об ошибках. В крайнем случае, даже при редиректе можно попытаться найти какое-то отличие в ответах для заголовков при верной и при ошибочной авторизации.
Например, т. к. для рассматриваемого сайта я знаю верные учётные данные, то я могу ввести их и, оставаясь в режиме отладки, посмотреть на разницу вывода:
Ну можно кричать «ура!», заголовок ответа другой - при вводе верных учётных данных устанавливается куки, т. е. нам нужно искать строку Set-Cookie. Причём, если эта строка есть — значит всё прошло успешно. Перед этой строкой мы поставим S=, это даст указание hydra, что если строка найдена, то это успех, а не провал:
Код hydra -l 111111 -p 222222 http-post-form://example.org -m "/?signin:login_username=^USER^&login_password=^PASS^&cookieuser=1:S=Set-Cookie"
Всё работает, при вводе ложных данных, hydra понимает, что данные ложные. А при вводе верных данных — понимает, что имя и пароль угаданы.
Все сайты разные, и для каждого движка нужно тестировать, прежде чем начинать атаку.
|
|
|
|