- Автор темы
- #1
Брут-форс веб-сайтов: инструкция по использованию patator, Hydra, Medusa ЧАСТЬ 2
hello worldFebruary 11, 2019 https://t.me/blockchainSellBot
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 без переменных. Параметр принимает три разделённых ":" значения, плюс опциональные значения.
(Примечание: если вам нужно двоеточие в строке опций в качестве значения, экранируйте его с "\:", но не экранируйте "\" с "\\".)
Синтаксис:
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 -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"
И опять, хорошая команда, правильно составлено, но есть одно «но»:
Много ложных срабатываний и ни одного угаданного пароля… Я пробовал менять команду, в качестве условия устанавливал успешный вход с соответствующей строкой. Но результат всегда один: ложные срабатывания и ни одного угаданного пароля… Всё-таки слова автора patator:
Брут-форс веб-форм, использующих метод POST
Если вы попробовали брут-форс веб-форм, когда они передают данные методом GET, и у вас всё получилось, то с методом POST также не должно возникнуть особых проблем. Теперь адрес страницы у нас будет статичным (не будет меняться), а для указания передаваемых данных мы будем использовать специальную опцию. Пожалуй, это и есть самое большое различие.
Использование patator для брут-форса веб-форм, передающих данные методом POST
Теперь давайте перейдём к брутфорсу веб-входа, когда данные передаются с использованием POST.
Я буду практиковаться в OWASP Mutillidae II, установленной в Web Security Dojo.
Там есть страничка входа http://localhost/mutillidae/index.php?page=login.php, она отправляет данные методом POST. Начнём, естественно, с анализа, введём произвольные данные в форму и нажмём отправить:
Как видим, вход не произошёл, из важного:
Здесь важными являются строки:
Анализирует ответ сервера:
Редиректов и записи новых куки нет.
Начинаем строить нашу команду.
./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
Как видим, результаты есть:
При моих параметрах, иногда возникала ошибка 500 Internal Server Error, которая в данной ситуации означает лишь то, что я заDoS’ил сервер.
Брут-форс входа в phpMyAdmin, WordPress, Joomla!, Drupal
[ДОПИСЫВАЕТСЯ — БУДЕТ ДОБАВЛЕНО ПОЗЖЕ]
Заключение
Итак, из тройки patator, Hydra и Medusa полностью адекватно работающей оказалась только одна программа – patator.
Более того, гибкость patator позволяет проводить брут-форс в обстоятельствах, которые были бы не по зубам Hydra и Medusa (если бы они работали).
Если плачевные результаты Hydra и Medusa связаны с моими неправильными действиями, то просьба написать в комментариях, в чём именно мои ошибки.
Всем спасибо за внимание!
hello worldFebruary 11, 2019 https://t.me/blockchainSellBot
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). Все эти данные разделены двоеточиями. Получается:
- Не забываем, что нам обязательно нужно передать куки, для этого используем опцию 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"
И опять, хорошая команда, правильно составлено, но есть одно «но»:
Много ложных срабатываний и ни одного угаданного пароля… Я пробовал менять команду, в качестве условия устанавливал успешный вход с соответствующей строкой. Но результат всегда один: ложные срабатывания и ни одного угаданного пароля… Всё-таки слова автора patator:
- Неудовлетворённость существующими программами была вызвана следующими их недостатками:они не работают или работают ненадёжно (несколько раз в прошлом они выдавали ложноотрицательные результаты)
- они недостаточно гибкие (как сделать перебор по всем спискам слов, подставить любой параметр модуля)
- у них отсутствуют полезные функции (отображение прогресса или пауза во время выполнения)
Брут-форс веб-форм, использующих метод POST
Если вы попробовали брут-форс веб-форм, когда они передают данные методом GET, и у вас всё получилось, то с методом POST также не должно возникнуть особых проблем. Теперь адрес страницы у нас будет статичным (не будет меняться), а для указания передаваемых данных мы будем использовать специальную опцию. Пожалуй, это и есть самое большое различие.
Использование patator для брут-форса веб-форм, передающих данные методом POST
Теперь давайте перейдём к брутфорсу веб-входа, когда данные передаются с использованием POST.
Я буду практиковаться в OWASP Mutillidae II, установленной в Web Security Dojo.
Там есть страничка входа http://localhost/mutillidae/index.php?page=login.php, она отправляет данные методом POST. Начнём, естественно, с анализа, введём произвольные данные в форму и нажмём отправить:
Как видим, вход не произошёл, из важного:
- мы остались на странице http://localhost/mutillidae/index.php?page=login.php, т.е. скорее всего, данные отправляются этому файлу, причём скорее всего используется метод POST
- при ошибке входа показывается надпись «Password incorrect».
Здесь важными являются строки:
- POST /mutillidae/index.php?page=login.php
- Referer: http://localhost/mutillidae/index.php?page=login.php
- Cookie: showhints=1; PHPSESSID=1n3b0ma83kl75996udoiufuvc2
- username=admin&password=password&login-php-submit-button=Login
Анализирует ответ сервера:
Редиректов и записи новых куки нет.
Начинаем строить нашу команду.
- Она начинается с ./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
Как видим, результаты есть:
При моих параметрах, иногда возникала ошибка 500 Internal Server Error, которая в данной ситуации означает лишь то, что я заDoS’ил сервер.
Брут-форс входа в phpMyAdmin, WordPress, Joomla!, Drupal
[ДОПИСЫВАЕТСЯ — БУДЕТ ДОБАВЛЕНО ПОЗЖЕ]
Заключение
Итак, из тройки patator, Hydra и Medusa полностью адекватно работающей оказалась только одна программа – patator.
Более того, гибкость patator позволяет проводить брут-форс в обстоятельствах, которые были бы не по зубам Hydra и Medusa (если бы они работали).
Если плачевные результаты Hydra и Medusa связаны с моими неправильными действиями, то просьба написать в комментариях, в чём именно мои ошибки.
Всем спасибо за внимание!
