Введение
В этом лабораторном практикуме мы рассмотрим, как остановить атаки Hydra на ранней стадии, используя её возможности ограничения числа попыток. Мы начнём с настройки FTP-сервера с помощью vsftpd и конфигурирования его с несколькими учётными записями пользователей, testuser1 и testuser2, каждая со своим паролем. Эта настройка позволит нам смоделировать сценарий, где Hydra пытается взломать несколько учётных записей одновременно.
Далее лабораторный практикум проведет вас через использование опции -f для остановки Hydra после первой успешной авторизации и опции -F с списком нескольких хостов. Наконец, мы сравним поведение опций -f и -F, чтобы понять, как они могут быть использованы для смягчения атак Hydra.
Настройка FTP с несколькими учетными данными
На этом шаге мы настроим FTP-сервер и сконфигурируем его с несколькими учётными данными пользователей. Это позволит нам протестировать способность Hydra взламывать несколько учётных записей одновременно. Мы будем использовать vsftpd (Very Secure FTP Daemon) в качестве нашего FTP-сервера.
Сначала установим vsftpd. Откройте терминал и выполните следующую команду:
sudo apt update
sudo apt install vsftpd -y
Далее нам нужно сконфигурировать vsftpd. Начнём с создания резервной копии исходного файла конфигурации. Это хорошая практика перед внесением любых изменений в системные файлы конфигурации.
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
Теперь отредактируем файл конфигурации /etc/vsftpd.conf с помощью nano. Этот файл управляет поведением FTP-сервера.
sudo nano /etc/vsftpd.conf
Внутри редактора nano добавьте или измените следующие строки. Эти настройки отключат анонимный доступ, включат вход локальных пользователей, разрешат запись и поместят локальных пользователей в их домашние каталоги для обеспечения безопасности.
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
listen=YES
listen_ipv6=NO
Чтобы сохранить файл в nano:
- Нажмите
Ctrl + Xдля выхода. - Нажмите
Y, чтобы подтвердить сохранение. - Нажмите
Enter, чтобы подтвердить имя файла.
После сохранения файла проверьте файл конфигурации, чтобы убедиться, что изменения были применены правильно, используя следующую команду:
sudo cat /etc/vsftpd.conf | grep -E "^(anonymous_enable|local_enable|write_enable|chroot_local_user|listen)"
Убедитесь, что вывод показывает те же настройки, что и те, которые мы добавили.
Теперь создадим несколько учётных записей пользователей. Мы создадим двух пользователей: testuser1 и testuser2, и установим для них пароли. Эти пользователи будут использоваться Hydra для попыток входа.
Создайте testuser1 с домашним каталогом:
sudo useradd -m testuser1
Установите пароль для testuser1 с помощью неинтерактивной команды:
echo 'testuser1:password123' | sudo chpasswd
Создайте testuser2 с домашним каталогом:
sudo useradd -m testuser2
Установите пароль для testuser2 с помощью неинтерактивной команды:
echo 'testuser2:password456' | sudo chpasswd
Эти команды неинтерактивны и создадут пользователей напрямую без запроса ввода, что делает их более надёжными в автоматизированных средах.
Теперь нам нужно исправить разрешения домашнего каталога для конфигурации chroot. Когда chroot_local_user=YES включено, домашний каталог пользователя не должен быть доступен для записи пользователем по соображениям безопасности:
sudo chmod 755 /home/testuser1
sudo chmod 755 /home/testuser2
Создайте подкаталог для записи для каждого пользователя, где они могут загружать файлы:
sudo mkdir /home/testuser1/files
sudo mkdir /home/testuser2/files
sudo chown testuser1:testuser1 /home/testuser1/files
sudo chown testuser2:testuser2 /home/testuser2/files
Далее перезапустите службу vsftpd, чтобы применить внесённые изменения в файл конфигурации и распознать новых пользователей.
sudo service vsftpd restart
Теперь протестируем FTP-сервер, чтобы убедиться, что он работает правильно и что наши новые пользователи могут войти. Вы можете использовать командную строку клиента ftp для подключения к серверу. Поскольку мы запускаем сервер локально, мы можем подключиться к localhost.
ftp localhost
Вам будет предложено ввести имя пользователя. Введите testuser1, а затем пароль password123. Если всё настроено правильно, вы увидите сообщение, указывающее на успешный вход.
Connected to localhost.
220 (vsFTPd 3.0.3)
Name (localhost:labex): testuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
Вы можете ввести bye, чтобы выйти из FTP-клиента.
ftp> bye
221 Goodbye.
Теперь подготовим файлы, которые Hydra будет использовать для атаки. Перейдите в каталог ~/project, который является вашим стандартным рабочим каталогом.
cd ~/project
Создайте файл с именем users.txt в каталоге ~/project. Этот файл будет содержать имена пользователей, которые Hydra будет пытаться использовать.
nano users.txt
Добавьте следующие имена пользователей в users.txt:
testuser1
testuser2
Сохраните файл и выйдите из nano.
Далее создайте файл с именем passwords.txt в каталоге ~/project. Этот файл будет содержать список паролей, включая правильные для наших тестовых пользователей, а также некоторые распространённые неправильные пароли.
nano passwords.txt
Добавьте следующие пароли в passwords.txt:
password123
password456
password
123456
qwerty
Сохраните файл и выйдите из nano.
Теперь у нас настроен FTP-сервер с несколькими учётными записями пользователей и списком имён пользователей и паролей, которые Hydra может использовать для попыток взлома учётных записей.
Запуск с опцией -f для остановки после первой пары
На этом шаге мы будем использовать опцию -f с Hydra. Опция -f сообщает Hydra о прекращении работы после обнаружения первой корректной пары имя пользователя/пароль для одного целевого объекта. Это полезно, когда вам нужно найти только одну корректную учётную запись на определённом сервисе и вы не хотите, чтобы Hydra продолжал пробовать другие комбинации после успешного входа.
Убедитесь, что вы находитесь в каталоге ~/project.
cd ~/project
Теперь запустим Hydra против нашего FTP-сервера, используя списки имён пользователей и паролей, которые мы создали на предыдущем шаге. Мы добавим опцию -f.
hydra -L users.txt -P passwords.txt localhost ftp -f
Давайте разберём эту команду:
hydra: инструмент командной строки для перебора паролей.-L users.txt: указывает файл, содержащий список имён пользователей (users.txtв текущем каталоге).-P passwords.txt: указывает файл, содержащий список паролей (passwords.txtв текущем каталоге).localhost: адрес целевого FTP-сервера.ftp: протокол сервиса для атаки (в данном случае FTP).-f: эта важная опция сообщает Hydra о прекращении работы после обнаружения первой корректной пары имя пользователя/пароль.
Обратите внимание на вывод в вашем терминале. Hydra будет пытаться войти в систему, используя имена пользователей и пароли из списков. Как только он найдёт корректную комбинацию (например, testuser1:password123), он отобразит успешный вход и остановит свою работу.
Вывод должен быть похож на этот:
Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 14:41:46
[DATA] max 10 tasks per 1 server, overall 10 tasks, 10 login tries (l:2/p:5), ~1 try per task
[DATA] attacking ftp://localhost:21/
[21][ftp] host: localhost login: testuser1 password: password123
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:41:47
Обратите внимание, что Hydra остановился сразу после обнаружения первой корректной комбинации (testuser1:password123). Без опции -f Hydra продолжал бы пробовать все остальные комбинации в файле passwords.txt для testuser1, а затем перешёл бы к testuser2 и попробовал все пароли для этого пользователя.
Эта опция особенно полезна при тестировании определённого сервиса, когда нужно только проверить, что хотя бы одна учётная запись уязвима, экономя значительное время и ресурсы.
Тестирование с -F и списком нескольких хостов
В этом шаге мы рассмотрим опцию -F в Hydra. В отличие от -f, которая останавливается после нахождения первой корректной пары имя пользователя/пароль для одного хоста, -F останавливается после нахождения первой корректной пары имя пользователя/пароль для всех хостов в списке. Это особенно полезно, когда вы атакуете несколько систем и вам нужно найти только одну уязвимую из них.
Для демонстрации этого сценария с несколькими хостами, поскольку у нас всего одна виртуальная машина, мы будем использовать localhost несколько раз в нашем списке хостов, чтобы смоделировать разные цели.
Сначала убедитесь, что вы находитесь в каталоге ~/project.
cd ~/project
Теперь создадим файл с именем hosts.txt в вашем каталоге ~/project. Этот файл будет содержать список целевых хостов.
nano hosts.txt
Добавьте следующие строки в hosts.txt:
localhost
localhost
Сохраните файл и выйдите из nano. Указав localhost дважды, мы говорим Hydra рассматривать это как две отдельные цели, даже если они указывают на одну и ту же машину.
Теперь запустим Hydra с опцией -F, нацелив её на список хостов, указанных в hosts.txt.
hydra -L users.txt -P passwords.txt -M hosts.txt ftp -F
Давайте разберём эту команду:
-L users.txt: указывает файл, содержащий список имён пользователей.-P passwords.txt: указывает файл, содержащий список паролей.-M hosts.txt: эта новая опция указывает файл, содержащий список целевых хостов (hosts.txtв текущем каталоге).ftp: протокол сервиса для атаки.-F: эта важная опция сообщает Hydra о прекращении атаки после нахождения первого успешного входа на любой из хостов в списке.
Обратите внимание на вывод в вашем терминале. Hydra будет пытаться войти на каждый хост в файле hosts.txt, используя имена пользователей и пароли из списков. Как только он найдёт корректную комбинацию на любом из хостов, он отобразит успешный вход и прекратит атаку на все хосты, указанные в hosts.txt.
Вывод должен быть похож на этот:
Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 14:42:10
[DATA] max 10 tasks per 2 servers, overall 20 tasks, 10 login tries (l:2/p:5), ~1 try per task
[DATA] attacking ftp://(2 targets):21/
[21][ftp] host: localhost login: testuser1 password: password123
[STATUS] attack finished for localhost (valid pair found)
2 of 2 targets successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:42:11
Несмотря на то, что в hosts.txt есть два localhost, Hydra останавливается после нахождения первого успешного входа на первом localhost. Он не продолжает попытки найти учётные данные для второго localhost, демонстрируя эффект опции -F.
Опция -F очень полезна, когда вы атакуете несколько систем и вам нужно найти только одну уязвимую систему, чтобы достичь своей цели. Она может значительно сэкономить время и вычислительные ресурсы, остановив атаку, как только уязвимость будет найдена на любом из целевых хостов в списке.
Сравнение поведения опций -f и -F
В этом шаге мы напрямую сравним поведение опций -f и -F, чтобы закрепить понимание их различий. Мы будем использовать ту же настройку, что и в предыдущих шагах: FTP-сервер, работающий на localhost, файлы users.txt и passwords.txt, а также файл hosts.txt, содержащий два входа для localhost.
Сначала давайте повторно запустим команду с опцией -f. Эта команда нацелена на один хост (localhost) и останавливается после нахождения первой корректной пары имя пользователя/пароль для этого конкретного хоста.
hydra -L users.txt -P passwords.txt localhost ftp -f
Как мы наблюдали в шаге 2, Hydra найдёт testuser1:password123 и затем остановится. Он не будет пытаться найти testuser2:password456 для localhost.
Теперь давайте повторно запустим команду с опцией -F. Эта команда нацелена на список хостов (hosts.txt) и останавливается после нахождения первой корректной пары имя пользователя/пароль на любом из хостов в этом списке.
hydra -L users.txt -P passwords.txt -M hosts.txt ftp -F
Как мы наблюдали в шаге 3, Hydra найдёт testuser1:password123 на первом входе localhost в hosts.txt и затем остановится. Он не будет продолжать проверять второй вход localhost в файле hosts.txt.
Ключевое различие заключается в том, как Hydra интерпретирует цель и когда принимает решение остановить процесс:
-f(одна цель): Когда вы указываете одну цель (например,localhost),-fсообщает Hydra остановить процесс, как только он найдёт любую корректную пару имя пользователя/пароль для этой конкретной цели. Он не будет продолжать поиск других корректных данных для той же цели.-F(список нескольких хостов): Когда вы указываете список целей с помощью-M,-Fсообщает Hydra остановить процесс, как только он найдёт любую корректную пару имя пользователя/пароль на любом из хостов в этом списке. Он не будет продолжать поиск других корректных данных для того же хоста, и не будет проверять последующие хосты в списке.
Для дальнейшей иллюстрации различия рассмотрим гипотетический сценарий, где вы сканируете сеть с несколькими FTP-серверами: ftp1.example.com, ftp2.example.com и ftp3.example.com.
Если вы используете
-fи нацеливаетесь наftp1.example.com, Hydra найдёт первые корректные данные наftp1.example.comи остановится. Если вы затем захотите проверитьftp2.example.com, вам потребуется запустить отдельную команду Hydra для него.Если вы поместите все три сервера в файл
hosts.txtи используете-F, Hydra начнёт проверятьftp1.example.com. Если он найдёт корректные данные там, он немедленно остановит весь процесс, даже не попытавшись подключиться кftp2.example.comилиftp3.example.com.
Подводя итог:
- Используйте
-f, когда вы фокусируетесь на одной цели и хотите найти хотя бы одну корректную пару имя пользователя/пароль для неё. - Используйте
-F, когда вы сканируете несколько целей и хотите остановить весь процесс, как только любые корректные данные будут найдены на любой из целей.
На этом лабораторная работа завершена. Вы успешно настроили FTP-сервер, наконфигурировали несколько учётных записей пользователей и использовали Hydra для взлома учётных записей, изучив опции -f и -F для управления поведением атаки Hydra.
Резюме
В этой лабораторной работе вы изучили, как управлять поведением атаки Hydra с помощью опций -f и -F. Вы начали с настройки локального FTP-сервера с помощью vsftpd и его конфигурации с несколькими учётными записями пользователей (testuser1 и testuser2), чтобы смоделировать реальную ситуацию. Вы также подготовили файлы users.txt и passwords.txt для использования Hydra.
Затем вы использовали опцию -f, чтобы указать Hydra остановить атаку после нахождения первой корректной пары имя пользователя/пароль для одной цели, продемонстрировав, как эффективно найти одну уязвимую учётную запись. После этого вы изучили опцию -F с использованием списка нескольких хостов (hosts.txt), узнав, как Hydra может остановить всю атаку на несколько целей, как только будет найдена одна корректная пара имя пользователя/пароль на любом из перечисленных хостов.
Наконец, вы сравнили разное поведение опций -f и -F, поняв их соответствующие области применения: -f для остановки после первого успеха на одной цели, и -F для остановки после первого успеха на нескольких целях. Эти знания имеют решающее значение для оптимизации атак методом перебора и эффективного управления ресурсами.


