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

  • Автор темы HHIDE_DUMP
  • Дата начала
  • Просмотры 771
  • На форуме работает ручное одобрение пользователей. Это значит, что, если Ваша причина регистрации не соответствует тематике форума, а также Вы используете временную почту, Ваша учётная запись будет отклонена без возможности повторной регистрации. В дальнейшем - пожизненная блокировка обоих аккаунтов за создание мультиаккаунта.
  • Мы обновили Tor зеркало до v3!
    Для входа используйте следующий url: darkv3nw2...bzad.onion/
  • Мы вновь вернули telegram чат форуму, вступайте, общайтесь, задавайте любые вопросы как администрации, так и пользователям!
    Ссылка: https://t.me/chat_dark_time

HHIDE_DUMP

Гость
H

HHIDE_DUMP

Гость
Использование 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)



Автор уже извещён о данной ошибке:
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
. Будем надеяться, что он её поправит.



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

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

-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"

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


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


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



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

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

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

Там есть страничка входа
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
, она отправляет данные методом POST. Начнём, естественно, с анализа, введём произвольные данные в форму и нажмём отправить:


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


    • мы остались на странице
      Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
      , т.е. скорее всего, данные отправляются этому файлу, причём скорее всего используется метод POST
    • при ошибке входа показывается надпись «Password incorrect».
Переходим теперь в Burp Suite:


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


    • POST /mutillidae/index.php?page=login.php
    • Cookie: showhints=1; PHPSESSID=1n3b0ma83kl75996udoiufuvc2
    • username=admin&password=password&login-php-submit-button=Login
Они говорят нам о том, что данные передаются методом POST странице /mutillidae/index.php?page=login.php. Также передаются кукиз, которые содержат «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 связаны с моими неправильными действиями, то просьба написать в комментариях, в чём именно мои ошибки.
 

О нас

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

    Dark-Time 2015 - 2024

    При поддержке: XenForo.Info

Быстрая навигация

Меню пользователя