Брут-форс веб-сайтов: инструкция по использованию patator, Hydra, Medusa ЧАСТЬ 2

Pain

The Godfather
Botnet Operator
Joined
Feb 18, 2017
Messages
1,780
Reaction score
158
Использование Medusa для брут-форса веб-форм, передающих данные методом GET
У программы Medusa также очень большая страница справки, которая содержит информацию по всем модулям программы. Выпишем информацию по модулю web-form, поскольку именно он применяется для брут-форса форм входа веб-сайтов.

-h [ТЕКСТ] : Имя хоста или IP адрес цели

-H [ФАЙЛ] : Файл, содержащий целевые имена хостов или IP адреса

-u [ТЕКСТ] : Имя пользователя для тестирования

-U [ФАЙЛ] : Файл, содержащий имена пользователей для тестирования

-p [ТЕКСТ] : Пароль для тестирования

-P [ФАЙЛ] : Файл, содержащий пароль для тестирования

-C [ФАЙЛ] : Файл, содержащий комбинированные записи. Подробности смотрите ниже.

-O [ФАЙЛ] : Файл, в который добавляются записи журнала (логи)

-e [n/s/ns] : Дополнительные проверки паролей ([n] Без пароля, Пароль = Имя Пользователя)

-M [ТЕКСТ] : Имя модуля для выполнения (без расширения .mod)

-m [ТЕКСТ] : Параметры для передачи модулю. Эту опцию можно использовать несколько раз

каждый раз с разными параметрами и они будут отправлены модулю (пример,

-m Param1 -m Param2 и т.д..)

-d : Вывести все известные модули

-n [ЧИСЛО] : Использовать для TCP портов не по умолчанию

-s : Включить SSL

-g [ЧИСЛО] : Сдаться после попытки подключиться ЧИСЛО секунд (о умолчанию 3)

-r [ЧИСЛО] : Засыпать на ЧИСЛО секунд между повтором попыток (по умолчанию 3)

-R [ЧИСЛО] : Пытаться ЧИСЛО раз перед прекращением. Общее число попыток будет ЧИСЛО + 1.

-c [ЧИСЛО] : Время ожидания в микросекундах верификации доступности сокета (по умолчанию 500 микросекунд).

-t [ЧИСЛО] : Общее число логинов для одновременного тестирования

-T [ЧИСЛО] : Общее число хостов для одновременного тестирования

-L : Распараллеливание входов используя одно имя пользователя на поток. По умолчанию

обрабатывать всё имя пользователя перед переходом к следующему.

-f : Остановить сканирования хоста после первого найденного действительного имени пользователя/пароля.

-F : Остановить аудит после первого найденного действительного имени пользователя/пароля на любом хосте.

-b : Не выводить начальный баннер

-q : Показать информацию об использовании модуля

-v [ЧИСЛО] : Уровень вербальности [0 - 6 (больше)]

-w [ЧИСЛО] : Уровень отладки ошибок [0 - 10 (больше)]

-V : Показать версию

-Z [ТЕКСТ] : Возобновить сканирование, основанное на карте возобновления предыдущего сканирования

web-form

Доступные опции модуля:


    • USER-AGENT:? Значение пользовательского агента (User-agent). По умолчанию: "I'm not Mozilla, I'm Ming Mong".
    • FORM:? Целевая форма для запроса. По умолчанию: "/"
    • DENY-SIGNAL:? Сообщение неудачной аутентификации. Попытка помечается как успешная, если этот текст отсутствует в ответе сервера. По умолчанию: "Login incorrect"
    • CUSTOM-HEADER:? Пользовательский HTTP заголовок.
Можно указать больше заголовков, используя эту опцию несколько раз.


    • FORM-DATA:<METHOD>?<FIELDS>
Методы и поля для отправки веб-службе. Валидными методами являются GET и POST. Действительные данные, которые отправляет форма, также должны быть определены здесь. Особенно поля имя_пользователя и пароль. Поле имя_пользователя должно быть первым, за ним следует поле пароля. По умолчанию: "post?username=&password="

Пример использования: "-M web-form -m USER-AGENT:"g3rg3 gerg" -m FORM:"webmail/index.php" -m DENY-SIGNAL:"deny!" -m FORM-DATA:"post?user=&pass=&submit=True" -m CUSTOM-HEADER:"Cookie: name=value"

Если внимательно всмотреться в опции Medusa, то станет понятно, что программа patator является более гибкой и способной выполнять брут-форс веб-форм практически при любом поведении веб-приложения. Про Medusa этого сказать нельзя, но для нашей ситуации её функционала достаточно. Давайте составит команду для запуска брут-форса под наши условия.


    • Начинается команда с вызова бинарного файла Medusa – /usr/local/bin/medusa.
    • Далее после опции -h нам нужно указать адрес хоста, который будет брут-форситься: -h localhost
    • Теперь опциями -U и -P укажем файлы с именами пользователей и паролями: -U opened_names.txt -P 500-worst-passwords.txt
    • После опции -M нужно указать используемый модуль: -M web-form
Все остальные величины являются опциями модуля web-form и начинаются с -m.


    • После -m FORM указываем адрес формы, которой отправляются логин и пароль: -m FORM:"/dvwa/vulnerabilities/brute/"
    • С -m DENY-SIGNAL указываем фразу или слово, которые говорят о неудачной аутентификации: -m DENY-SIGNAL:"incorrect"
    • Метод отправки, а также сами отправляемые данные указываются после -m FORM-DATA. Здесь нужно быть особенно внимательным. В самом начале указывается метод передачи данных (post или get). Первым обязательно должно идти поле с именем пользователя, а вторым – поле с паролем. Заполнители не указываются. Для нашего примера верной является такая строка: -m FORM-DATA:"get?username=&password=&Login=Login"
    • С -m CUSTOM-HEADER указываются заголовки. Можно использовать много раз для передачи нескольких заголовков. В нашем случае обязательным являются только куки: -m CUSTOM-HEADER:"Cookie: security=low; PHPSESSID=1n3b0ma83kl75996udoiufuvc2"
Итак, собираем всё вместе в одну команду:

/usr/local/bin/medusa -h localhost -U opened_names.txt -P 500-worst-passwords.txt -M web-form -m FORM:"/dvwa/vulnerabilities/brute/" -m DENY-SIGNAL:"incorrect" -m FORM-DATA:"get?username=&password=&Login=Login" -m CUSTOM-HEADER:"Cookie: security=low; PHPSESSID=1n3b0ma83kl75996udoiufuvc2"

И всё в этой команде хорошо и правильно, кроме одного, Medusa вылетает с ошибкой не успев перебрать ни одного пароля:

Segmentation fault (core dumped)



Автор уже извещён о данной ошибке: https://github.com/jmk-foofus/medusa/issues/14. Будем надеяться, что он её поправит.



Использование THC-Hydra для брут-форса веб-форм, передающих данные методом GET
Как обычно, начнём знакомство с Hydra со страницы с опциями и выпишем те из них, которые нужны для брут-форса веб-форм.

Глобальные опции:

-R восстановить предыдущую прерванную/оборванную сессию

-S выполнить SSL соединение

-s ПОРТ если служба не на порту по умолчанию, то можно задать порт здесь

-l ЛОГИН или -L ФАЙЛ с ЛОГИНАМИ (именами), или загрузить несколько логинов из ФАЙЛА

-p ПАРОЛЬ или -P ФАЙЛ с паролями для перебора, или загрузить несколько паролей из ФАЙЛА

-x МИНИМУМ:МАКСИМУМ:НАБОР_СИМВОЛОВ генерация паролей для брутфорса, наберите "-x -h" для помощи

-e nsr "n" — пробовать с пустым паролем, "s" — логин в качестве пароля и/или "r" — реверс учётных данных

-u зацикливаться на пользователя, а не на паролях (эффективно! подразумевается с использованием опции -x)

-C ФАЙЛ формат где "логин:пароль" разделены двоеточиями, вместо опции -L/-P

-M ФАЙЛ список серверов для атак, одна запись на строку, после двоеточия ':' можно задать порт

-o ФАЙЛ записывать найденные пары логин/пароль в ФАЙЛ вместо стандартного вывода

-f / -F выйти, когда пара логин/пароль подобрана (-M: -f для хоста, -F глобально)

-t ЗАДАЧИ количество запущенных параллельно ЗАДАЧ (на хост, по умолчанию: 16)

-w / -W ВРЕМЯ время ожидания ответов (32 секунды) / между соединениями на поток

-4 / -6 предпочитать IPv4 (по умолчанию) или IPv6 адреса

-v / -V / -d вербальный режим / показывать логин+пароль для каждой попытки / режим отладки

-O использовать старые SSL v2 и v3

-q не печатать сообщения об ошибках соединения

-U подробные сведения об использовании модуля

server цель: DNS, IP или 192.168.0.0/24 (эта ИЛИ опция -M)

service служба для взлома (смотрите список поддерживаемых протоколов)

OPT некоторые модули служб поддерживают дополнительный ввод (-U для справки по модулю)

Опции модулей http-get-form, https-get-form, http-post-form, https-post-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"

Собираем нашу команду:


    • Как всегда, она начинается с бинарного файла THC-Hydra: hydra
    • Опциями -L и -P задаём файлы со списками имён пользователя и паролей: -L opened_names.txt -P 500-worst-passwords.txt
    • Установим количество потоков: -t 10
    • Из четырёх схожих модулей выбираем http-get-form и через символы :// указываем адрес localhost. Здесь же через слеш нам нужно указать адрес страницы формы (/dvwa/vulnerabilities/brute/), передаваемые форме данные, где необходимо указать "^USER^" и "^PASS^" в тех местах, куда будут подставлены имена и пароли (username=^USER^&password=^PASS^&Login=Login) и третье это строка, которая проверяет верный или неверный ввод (incorrect). Все эти данные разделены двоеточиями. Получается:
"http-get-form://localhost/dvwa/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login:incorrect"


    • Не забываем, что нам обязательно нужно передать куки, для этого используем опцию h и через двоеточие ещё дописываем (если внутри заголовка присутствует своё двоеточие, то обязательно экранируем его): h=Cookie\: security=low; PHPSESSID=1n3b0ma83kl75996udoiufuvc2
В конечном счёте у нас получилось:

hydra -L opened_names.txt -P 500-worst-passwords.txt -t 10 "http-get-form://localhost/dvwa/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login:incorrect:h=Cookie\: security=low; PHPSESSID=1n3b0ma83kl75996udoiufuvc2"

И опять, хорошая команда, правильно составлено, но есть одно «но»:

15.jpg

Много ложных срабатываний и ни одного угаданного пароля… Я пробовал менять команду, в качестве условия устанавливал успешный вход с соответствующей строкой. Но результат всегда один: ложные срабатывания и ни одного угаданного пароля… Всё-таки слова автора patator:


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



Брут-форс веб-форм, использующих метод POST
Если вы попробовали брут-форс веб-форм, когда они передают данные методом GET, и у вас всё получилось, то с методом POST также не должно возникнуть особых проблем. Теперь адрес страницы у нас будет статичным (не будет меняться), а для указания передаваемых данных мы будем использовать специальную опцию. Пожалуй, это и есть самое большое различие.

Использование patator для брут-форса веб-форм, передающих данные методом POST
Теперь давайте перейдём к брутфорсу веб-входа, когда данные передаются с использованием POST.

Я буду практиковаться в OWASP Mutillidae II, установленной в Web Security Dojo.

Там есть страничка входа http://localhost/mutillidae/index.php?page=login.php, она отправляет данные методом POST. Начнём, естественно, с анализа, введём произвольные данные в форму и нажмём отправить:

16.jpg

Как видим, вход не произошёл, из важного:


    • мы остались на странице http://localhost/mutillidae/index.php?page=login.php, т.е. скорее всего, данные отправляются этому файлу, причём скорее всего используется метод POST
    • при ошибке входа показывается надпись «Password incorrect».
Переходим теперь в Burp Suite:

17.jpg

Здесь важными являются строки:


Они говорят нам о том, что данные передаются методом POST странице /mutillidae/index.php?page=login.php. Также передаются кукиз, которые содержат «PHPSESSID=1n3b0ma83kl75996udoiufuvc2». Сами передаваемые данные имеют вид: «username=admin&password=password&login-php-submit-button=Login».

Анализирует ответ сервера:

18.jpg



Редиректов и записи новых куки нет.

Начинаем строить нашу команду.


    • Она начинается с ./patator.py http_fuzz (файл программы и указание используемого модуля).
    • Далее с опцией url мы указываем адрес страницы, на которую отправляются данные: url="localhost/mutillidae/index.php?page=login.php"
    • Опцией method мы задаём метод отправки данных: method=POST
    • С patator мы ещё не применяли опцию body, теперь пришло её время. В ней мы передаём те данные, которые оправляются серверу. Не забываем добавить заполнители FILE0 и FILE1: body='username=FILE0&password=FILE1&login-php-submit-button=Login'
    • С опциями 0= и 1= мы передаём в программу словари имён пользователя и паролей: 0=namelist_new.txt 1=500-worst-passwords.txt
    • Поскольку какие-то кукиз у нас уже есть, они были записаны автоматически, скорее всего, при первом открытии сайта. Непонятно, с какой периодичностью они будут изменяться, но ясно, что это будет происходить автоматически, как и в первый раз, поэтому мы указываем: accept_cookie=1. Эта опция означает принять кукиз от веб-приложения и отправить их при следующей проверке логина и пароля.
    • И опять мы выбираем игнорировать (не показывать нам) все попытки входа, если в ответе содержится слово incorrect: -x ignore:fgrep='incorrect'
    • После опции -t можно указать количество потоков: -t 50
Всё вместе:

./patator.py http_fuzz url="localhost/mutillidae/index.php?page=login.php" method=POST body='username=FILE0&password=FILE1&login-php-submit-button=Login' 0=namelist_new.txt 1=500-worst-passwords.txt accept_cookie=1 -x ignore:fgrep='incorrect' -t 50

Как видим, результаты есть:

21.jpg

При моих параметрах, иногда возникала ошибка 500 Internal Server Error, которая в данной ситуации означает лишь то, что я заDoS’ил сервер.



Брут-форс входа в phpMyAdmin, WordPress, Joomla!, Drupal
[ДОПИСЫВАЕТСЯ — БУДЕТ ДОБАВЛЕНО ПОЗЖЕ]



Заключение
Итак, из тройки patator, Hydra и Medusa полностью адекватно работающей оказалась только одна программа – patator.

Более того, гибкость patator позволяет проводить брут-форс в обстоятельствах, которые были бы не по зубам Hydra и Medusa (если бы они работали).

Если плачевные результаты Hydra и Medusa связаны с моими неправильными действиями, то просьба написать в комментариях, в чём именно мои ошибки.
 

soldatU

New member
Joined
Oct 24, 2011
Messages
1
Reaction score
0
I gotta advise, guys, this kind of content is not exactly what our community is about, but I'll share a general thought: in most countries, using brute force tools like patator or Hydra without explicit permission is considered malicious activity. Not saying that's what you're doing here, but just wanted to throw that in.
 
Top