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
Доступные опции модуля:
Пример использования: "-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 этого сказать нельзя, но для нашей ситуации её функционала достаточно. Давайте составит команду для запуска брут-форса под наши условия.
/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)
Автор уже извещён о данной ошибке:
Использование THC-Hydra для брут-форса веб-форм, передающих данные методом GET
Как обычно, начнём знакомство с
Глобальные опции:
-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.
Там есть страничка входа
Как видим, вход не произошёл, из важного:
Здесь важными являются строки:
Анализирует ответ сервера:
Редиректов и записи новых куки нет.
Начинаем строить нашу команду.
./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 связаны с моими неправильными действиями, то просьба написать в комментариях, в чём именно мои ошибки.
У программы 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>
Пример использования: "-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
- После -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). Все эти данные разделены двоеточиями. Получается:
- Не забываем, что нам обязательно нужно передать куки, для этого используем опцию 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».
Здесь важными являются строки:
- POST /mutillidae/index.php?page=login.php
- Referer: Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
- Referer:
- 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 связаны с моими неправильными действиями, то просьба написать в комментариях, в чём именно мои ошибки.