Изучение параметров, специфичных для модуля Hydra

HydraHydraBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии мы рассмотрим параметры HTTP POST, доступные в Hydra, с акцентом на то, как эффективно нацеливаться на сервисы, которые используют HTTP POST для аутентификации. Мы узнаем, как указать имена пользователей и пароли, а также URL-адрес, на который должен быть отправлен POST-запрос.

В этом лабораторном занятии вы научитесь просматривать параметры HTTP POST с помощью флага -U, настраивать форму HTTP POST, запускать Hydra с определенными параметрами -m и проверять результаты POST-атаки. Вы узнаете, как использовать Hydra для перебора учетных данных при нацеливании на сервисы, которые используют HTTP POST для аутентификации.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hydra(("Hydra")) -.-> hydra/HydraGroup(["Hydra"]) hydra/HydraGroup -.-> hydra/single_username("Single Username Attack") hydra/HydraGroup -.-> hydra/target_ip("Target IP Specification") hydra/HydraGroup -.-> hydra/http_form("HTTP Form Attack") hydra/HydraGroup -.-> hydra/success_detection("Login Success Detection") subgraph Lab Skills hydra/single_username -.-> lab-550767{{"Изучение параметров, специфичных для модуля Hydra"}} hydra/target_ip -.-> lab-550767{{"Изучение параметров, специфичных для модуля Hydra"}} hydra/http_form -.-> lab-550767{{"Изучение параметров, специфичных для модуля Hydra"}} hydra/success_detection -.-> lab-550767{{"Изучение параметров, специфичных для модуля Hydra"}} end

Просмотр параметров HTTP POST с помощью флага -U

На этом этапе мы рассмотрим параметры HTTP POST, доступные в Hydra, с использованием флага -U. Флаг -U используется для указания имени пользователя при выполнении POST-запроса. Это особенно полезно, когда целевая служба требует отправки имени пользователя в составе данных POST-запроса.

Прежде чем приступить к практическому примеру, давайте разберемся с основным концептом HTTP POST-запросов. HTTP POST - это метод, используемый для отправки данных на сервер с целью создания или обновления ресурса. В отличие от GET-запросов, POST-запросы передают данные в теле запроса, что делает их подходящими для отправки больших объемов данных, таких как формы.

Hydra - это мощный инструмент для перебора учетных данных входа. При нацеливании на сервисы, которые используют HTTP POST для аутентификации, нам нужно предоставить Hydra необходимую информацию, включая поля имени пользователя и пароля, а также URL-адрес, на который должен быть отправлен POST-запрос.

Опция -U в Hydra позволяет указать одно имя пользователя, которое будет использоваться для всех попыток входа. Это полезно, если вы уже знаете имя пользователя и нужно только перебрать пароль.

Давайте посмотрим, как использовать опцию -U на простом примере. Предположим, что мы хотим атаковать веб-приложение, которое использует HTTP POST для входа, и мы знаем, что имя пользователя - testuser. Мы можем использовать следующую команду Hydra:

hydra -l testuser -P ~/project/password.txt "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password" < target_ip > http-post-form

В этой команде:

  • hydra: Команда для запуска Hydra.
  • -l testuser: Указывает имя пользователя как testuser. Обратите внимание, что здесь мы используем -l вместо -U. -l указывает одно имя пользователя, в то время как -U указывает файл, содержащий список имен пользователей.
  • -P ~/project/password.txt: Указывает путь к файлу со списком паролей. Убедитесь, что у вас есть файл password.txt в директории ~/project. Вы можете создать его с помощью nano:
nano ~/project/password.txt

Добавьте в файл несколько распространенных паролей, по одному паролю на строку, например:

password
123456
qwerty

Сохраните файл и выйдите из nano.

  • <target_ip>: Замените это на IP-адрес целевого сервера. В рамках этого лабораторного занятия вам нужно будет заменить это на фактический IP-адрес сервера, который вы атакуете. Для демонстрации мы предположим, что целевой IP-адрес - 127.0.0.1.
  • http-post-form: Указывает, что мы используем модуль HTTP POST формы.
  • "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password": Это самая важная часть. Она сообщает Hydra, как сформировать POST-запрос.
    • /login.php: URL-адрес, на который должен быть отправлен POST-запрос.
    • username=^USER^&password=^PASS^: Данные POST-запроса. ^USER^ и ^PASS^ - это заполнители, которые Hydra заменит соответственно именем пользователя и паролем.
    • F=Invalid username or password: Это сообщает Hydra, какую строку искать в ответе, чтобы определить, не удалась ли попытка входа. Если Hydra найдет эту строку, он поймет, что попытка входа не удалась.

Теперь давайте запустим команду с примерным IP-адресом:

hydra -l testuser -P ~/project/password.txt 127.0.0.1 http-post-form "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password"

Эта команда попытается перебрать пароль для учетной записи testuser с использованием паролей из файла password.txt. Hydra отправит HTTP POST-запросы на URL-адрес /login.php с соответствующими полями имени пользователя и пароля. Если Hydra найдет действительный пароль, он отобразит его на экране.

Этот пример демонстрирует базовое использование опции -l с модулем http-post-form. В следующих шагах мы рассмотрим более продвинутые опции и техники для атаки HTTP POST форм с использованием Hydra.

Настройка HTTP POST формы

На этом этапе мы настроим простую HTTP POST форму, которую можно использовать в качестве цели для атак с помощью Hydra. Мы создадим базовую HTML-форму и PHP-скрипт для обработки отправки формы. Это позволит нам понять, как Hydra взаимодействует с HTTP POST формами и как составить правильную команду Hydra.

Сначала создадим HTML-форму. Создадим файл с именем login.html в директории ~/project.

nano ~/project/login.html

Теперь вставьте следующий HTML-код в файл:

<!DOCTYPE html>
<html>
  <head>
    <title>Login Form</title>
  </head>
  <body>
    <h1>Login</h1>
    <form method="post" action="login.php">
      <label for="username">Username:</label><br />
      <input type="text" id="username" name="username" /><br /><br />
      <label for="password">Password:</label><br />
      <input type="password" id="password" name="password" /><br /><br />
      <input type="submit" value="Login" />
    </form>
  </body>
</html>

Этот HTML-код создает простую форму входа с двумя полями ввода: username и password. Форма использует метод POST и отправляет данные на login.php.

Сохраните файл и выйдите из nano.

Далее нам нужно создать скрипт login.php для обработки отправки формы. Создайте файл с именем login.php в директории ~/project:

nano ~/project/login.php

Теперь вставьте следующий PHP-код в файл:

<?php
$username = $_POST['username'];
$password = $_POST['password'];

if ($username == 'testuser' && $password == 'password') {
  echo "Login successful!";
} else {
  echo "Invalid username or password";
}
?>

Этот PHP-скрипт извлекает имя пользователя и пароль из данных POST-запроса и проверяет, соответствуют ли они жестко заданным значениям testuser и password. Если учетные данные верны, он выводит "Login successful!"; в противном случае выводит "Invalid username or password".

Сохраните файл и выйдите из nano.

Теперь у вас настроена базовая HTTP POST форма. Чтобы протестировать ее, обычно нужно запустить веб-сервер (например, Apache или Nginx) и настроить его для обслуживания этих файлов. Поскольку мы сосредотачиваемся на Hydra, а среда LabEx не включает в себя предварительно настроенный веб-сервер, мы продолжим, предполагая, что у вас есть возможность доступа к этим файлам через веб-сервер. Например, если вы запускаете веб-сервер локально и обслуживаете директорию ~/project, вы можете открыть форму, перейдя по адресу http://localhost/login.html в веб-браузере.

На следующем этапе мы будем использовать Hydra для атаки на эту форму. Мы будем использовать опцию -m для указания данных POST-запроса и опцию -F для определения сообщения об ошибке.

Запуск с опцией -m

На этом этапе мы будем использовать опцию -m в Hydra для прямого указания данных HTTP POST-запроса. Это альтернатива использованию модуля http-post-form и позволяет нам более точно контролировать структуру POST-запроса.

Опция -m позволяет определить весь текст тела POST-запроса. Вам нужно указать заполнители для имени пользователя и пароля (^USER^ и ^PASS^) в данных POST-запроса.

В качестве цели используем форму login.php, которую мы создали на предыдущем этапе. Мы будем использовать опцию -m для указания данных POST-запроса в виде username=^USER^&password=^PASS^. Также мы используем опцию -l для указания одного имени пользователя (testuser) и опцию -P для указания файла со списком паролей (~/project/password.txt).

Вот команда Hydra, которую мы будем использовать:

hydra -l testuser -P ~/project/password.txt "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password" < target_ip > http-post

В этой команде:

  • hydra: Команда для запуска Hydra.
  • -l testuser: Указывает имя пользователя как testuser.
  • -P ~/project/password.txt: Указывает путь к файлу со списком паролей.
  • <target_ip>: Замените это на IP-адрес целевого сервера. Как и раньше, для демонстрации мы предположим, что целевой IP-адрес - 127.0.0.1.
  • http-post: Указывает, что мы используем модуль HTTP POST.
  • "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password": Здесь указываются URL-адрес, данные POST-запроса и строка, обозначающая неудачную попытку входа.
    • /login.php: URL-адрес, на который должен быть отправлен POST-запрос.
    • username=^USER^&password=^PASS^: Данные POST-запроса. ^USER^ и ^PASS^ - это заполнители, которые Hydra заменит соответственно именем пользователя и паролем.
    • F=Invalid username or password: Это сообщает Hydra, какую строку искать в ответе, чтобы определить, не удалась ли попытка входа.

Теперь давайте запустим команду с примерным IP-адресом:

hydra -l testuser -P ~/project/password.txt 127.0.0.1 http-post "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password"

Эта команда попытается перебрать пароль для учетной записи testuser с использованием паролей из файла password.txt. Hydra отправит HTTP POST-запросы на URL-адрес /login.php с указанными данными POST-запроса. Если Hydra найдет действительный пароль, он отобразит его на экране.

Основное отличие этой команды от команды на этапе 1 - использование http-post вместо http-post-form. Модуль http-post требует указания всей строки данных POST-запроса с помощью опции -m (которая здесь встроена в строку URL), в то время как http-post-form автоматически формирует данные POST-запроса на основе полей формы.

Этот пример демонстрирует, как использовать опцию -m для прямого указания данных POST-запроса. На следующем этапе мы проверим атаку с использованием POST-запроса и узнаем, как фиксировать успешный вход.

Проверка атаки с использованием POST-запроса

На этом этапе мы проверим атаку с использованием POST-запроса, убедившись, что Hydra успешно определяет правильный пароль. Для этого мы изменим файл password.txt, чтобы он содержал правильный пароль, и убедимся, что Hydra его найдет. Также мы проанализируем вывод, чтобы подтвердить успешный вход.

Сначала изменим файл ~/project/password.txt, чтобы он содержал правильный пароль, который, согласно нашему скрипту login.php, равен password.

nano ~/project/password.txt

Добавьте пароль password в файл. Хорошей практикой является поместить его ближе к началу файла для более быстрых результатов. Теперь файл должен выглядеть примерно так:

password
123456
qwerty

Сохраните файл и выйдите из nano.

Теперь запустите команду Hydra еще раз, используя ту же команду, что и на предыдущем этапе:

hydra -l testuser -P ~/project/password.txt 127.0.0.1 http-post "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password"

На этот раз Hydra должен быстро найти правильный пароль и отобразить его в выводе. Вывод должен быть похож на следующий:

Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!

Hydra starting at 2024-10-27 14:30:00
[DATA] 1 task, 1 server, 13 login tries (l:1/p:13), ~1 try per task
[DATA] attacking service http-post on 127.0.0.1
[2;32][http-post] host: 127.0.0.1   login: testuser   password: password
Hydra is finishing at 2024-10-27 14:30:05

Строка [http-post] host: 127.0.0.1 login: testuser password: password указывает, что Hydra успешно нашел пароль password для имени пользователя testuser.

Если вы не видите такой вывод, проверьте следующее:

  • Убедитесь, что файл password.txt содержит правильный пароль (password).
  • Убедитесь, что скрипт login.php правильно настроен для проверки имени пользователя testuser и пароля password.
  • Убедитесь, что команда Hydra правильно отформатирована, особенно URL-адрес, данные POST-запроса и строка, обозначающая неудачную попытку входа.

Успешно запустив команду Hydra и проанализировав вывод, вы проверили атаку с использованием POST-запроса и подтвердили, что Hydra может успешно подобрать учетные данные для входа на HTTP POST форме.

Это завершает лабораторную работу по атаке на HTTP POST формы с использованием Hydra. Вы узнали, как настроить простую HTTP POST форму, как использовать опцию -m для указания данных POST-запроса и как проверить атаку, убедившись, что Hydra находит правильный пароль.

Резюме

В этой лабораторной работе мы изучили параметры HTTP POST в Hydra, сосредоточившись на том, как подобрать учетные данные для входа, когда веб-приложение использует HTTP POST для аутентификации. Мы узнали о опции -l, которая позволяет указать одно имя пользователя для всех попыток входа, и о том, как передать Hydra необходимую информацию, включая поля имени пользователя и пароля, а также URL-адрес, на который должен быть отправлен POST-запрос.

Мы также освежили базовое понятие HTTP POST-запросов, понимая, что POST-запросы передают данные в теле запроса, что делает их подходящими для отправки больших объемов данных, таких как отправка форм. В лабораторной работе подчеркивается важность передачи правильных параметров Hydra для успешного подбора пароля, включая целевой URL-адрес, поле имени пользователя, поле пароля и сообщение об ошибке для определения неудачных попыток входа.