Настройка времени ожидания ответов Hydra

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

Введение

В этом лабораторном практикуме вы узнаете, как настраивать время ожидания ответов Hydra при атаке на сервисы с потенциально медленными или ненадежными ответами. Мы будем использовать SMTP в качестве примера для демонстрации этих концепций.

Вы начнете с настройки простого SMTP-сервера с имитацией задержки ответа с использованием Python. Это позволит вам смоделировать медленную или ненадежную сетевую среду. Затем вы запустите Hydra против этого сервера, сначала с настройками времени ожидания по умолчанию, а затем скорректируете время ожидания с помощью опции -w, чтобы наблюдать за ее влиянием. Наконец, вы изучите опции -l и -p для указания отдельных учетных данных напрямую и протестируете их с одним потоком.

Настройка SMTP с задержкой ответа

На этом шаге вы настройте простой SMTP-сервер с использованием Python. Этот сервер будет вводить задержку в своих ответах, имитируя медленный или ненадежный сервис. Эта настройка имеет решающее значение для понимания того, как настройки времени ожидания Hydra влияют на его производительность.

Сначала вам нужно создать Python-скрипт с именем delayed_smtp.py в каталоге ~/project. Этот скрипт будет действовать как ваш SMTP-сервер.

Откройте текстовый редактор nano, чтобы создать этот файл:

nano ~/project/delayed_smtp.py

Теперь скопируйте и вставьте следующий код Python в файл delayed_smtp.py:

import socket
import time
import threading

def handle_client(client_socket):
    try:
        ## Отправка приветствия
        client_socket.send(b"220 localhost ESMTP\r\n")

        while True:
            data = client_socket.recv(1024).decode('utf-8').strip()
            if not data:
                break

            if data.upper().startswith('EHLO') or data.upper().startswith('HELO'):
                client_socket.send(b"250-localhost\r\n250-AUTH LOGIN\r\n250 OK\r\n")

            elif data.upper().startswith('AUTH LOGIN'):
                client_socket.send(b"334 VXNlcm5hbWU6\r\n")  ## Username:
                client_socket.recv(1024)  ## Получение имени пользователя

                ## Добавление задержки в 5 секунд
                time.sleep(5)

                client_socket.send(b"334 UGFzc3dvcmQ6\r\n")  ## Password:
                client_socket.recv(1024)  ## Получение пароля
                client_socket.send(b"235 Authentication successful\r\n")

            elif data.upper().startswith('QUIT'):
                client_socket.send(b"221 Bye\r\n")
                break
            else:
                client_socket.send(b"250 OK\r\n")

    except:
        pass
    finally:
        client_socket.close()

def run_server():
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server.bind(('127.0.0.1', 1025))
    server.listen(5)
    print("SMTP-сервер запущен на порту 1025")

    while True:
        try:
            client, addr = server.accept()
            thread = threading.Thread(target=handle_client, args=(client,))
            thread.daemon = True
            thread.start()
        except:
            break

if __name__ == '__main__':
    run_server()

Этот упрощённый Python-скрипт создаёт базовый SMTP-сервер, который прослушивает порт 1025. Сервер поддерживает SMTP-аутентификацию с использованием метода LOGIN, что ожидается Hydra. Ключевой особенностью является строка time.sleep(5) в обработчике аутентификации, которая вводит задержку в 5 секунд во время процесса аутентификации, чтобы смоделировать медленный сетевой ответ.

После вставки кода сохраните файл и выйдите из nano, нажав Ctrl + X, затем Y и Enter.

Далее, вам нужно запустить этот Python-скрипт в фоновом режиме. Использование nohup гарантирует, что скрипт продолжает работать даже если вы закроете сеанс терминала. Вы также перенаправите его вывод в файл журнала с именем delayed_smtp.log для мониторинга.

Выполните следующую команду в вашем терминале:

nohup python3 ~/project/delayed_smtp.py > ~/project/delayed_smtp.log 2>&1 &

Эта команда запускает SMTP-сервер. & в конце отправляет процесс в фоновый режим, позволяя вам продолжить работу в терминале.

Чтобы подтвердить, что SMTP-сервер запущен и прослушивает порт 1025, вы можете использовать команду ss. Команда ss — это утилита для исследования сокетов.

ss -tulnp | grep 1025

Вы должны увидеть вывод, подобный этому, указывающий, что сервер прослушивает порт 1025:

tcp   LISTEN 0      4096   0.0.0.0:1025      0.0.0.0:*    users:(("python3",pid=XXXX,fd=X))

pid=XXXX покажет фактический идентификатор процесса вашего Python-скрипта. Это подтверждает, что ваш задержанный SMTP-сервер теперь активен и готов к тестированию.

Этот вывод подтверждает, что Python SMTP-сервер успешно запущен и прослушивает порт 1025. Состояние LISTEN указывает, что сервер готов принимать подключения, а имя процесса python3 подтверждает, что наш скрипт работает. Задержка в 5 секунд, встроенная в этот сервер, поможет нам понять, как настройки времени ожидания Hydra влияют на производительность атаки.

Delayed SMTP server running on port 1025

Запуск Hydra с настройками по умолчанию для времени ожидания

На этом шаге вы запустите Hydra против настроенного вами задержанного SMTP-сервера. Вы будете использовать стандартное время ожидания Hydra, которое составляет 10 секунд. Это продемонстрирует, как Hydra ведет себя, когда целевой сервис имеет задержку ответа, которая находится в пределах стандартного таймаута Hydra.

Сначала вам нужно создать список имен пользователей и список паролей для использования Hydra. Эти файлы будут находиться в каталоге ~/project.

Создайте файл users.txt:

nano ~/project/users.txt

Добавьте следующие имена пользователей в файл users.txt:

testuser
admin
user

Сохраните файл и выйдите из nano (Ctrl + X, Y, Enter).

Далее, создайте файл passwords.txt:

nano ~/project/passwords.txt

Добавьте следующие пароли в файл passwords.txt:

password
123456
test

Сохраните файл и выйдите из nano (Ctrl + X, Y, Enter).

Теперь вы выполните Hydra. Вы будете атаковать SMTP-сервер, работающий на localhost (127.0.0.1) на порту 1025. Вы будете использовать модуль smtp, ваш список users.txt и ваш список passwords.txt. Опция -t 1 гарантирует, что Hydra использует только один поток, что упрощает отслеживание результатов.

hydra -L ~/project/users.txt -P ~/project/passwords.txt -vV -t 1 127.0.0.1 smtp -s 1025

Давайте разберем команду:

  • hydra: Команда для запуска инструмента Hydra.
  • -L ~/project/users.txt: Указывает путь к файлу, содержащему список имен пользователей.
  • -P ~/project/passwords.txt: Указывает путь к файлу, содержащему список паролей.
  • -vV: Включает подробный режим, который отображает подробную информацию о попытках входа в систему, включая успешные и неудачные.
  • -t 1: Устанавливает количество параллельных задач (потоков) в 1. Это полезно для наблюдения за каждой попыткой последовательно.
  • 127.0.0.1: Целевой IP-адрес, который является вашим локальным компьютером.
  • smtp: Модуль сервиса, который Hydra должен использовать для атаки, в данном случае SMTP.
  • -s 1025: Указывает номер порта целевого сервиса, который равен 1025 для вашего задержанного SMTP-сервера.

Поскольку ваш SMTP-сервер имеет задержку в 5 секунд, а стандартное время ожидания Hydra составляет 10 секунд, Hydra должен успешно завершить каждую попытку без таймаута. Вы увидите вывод, похожий на следующий, показывающий, как Hydra пытается использовать каждую комбинацию имени пользователя и пароля:

labex:project/ $ hydra -L ~/project/users.txt -P ~/project/passwords.txt -vV -t 1 127.0.0.1 smtp -s 1025
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-05-29 13:47:03
[INFO] several providers have implemented cracking protection, check with a small wordlist first - and stay legal!
[DATA] max 1 task per 1 server, overall 1 task, 9 login tries (l:3/p:3), ~9 tries per task
[DATA] attacking smtp://127.0.0.1:1025/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "password" - 1 of 9 [child 0] (0/0)
[VERBOSE] using SMTP LOGIN AUTH mechanism
[1025][smtp] host: 127.0.0.1   login: testuser   password: password
... (остальные попытки)

Этот вывод демонстрирует работу Hydra со стандартным временем ожидания в 10 секунд против сервера с задержкой в 5 секунд. Обратите внимание, что все попытки завершаются успешно без таймаутов, показывая, что стандартного времени ожидания достаточно для этого сценария. Строка [DATA] показывает 9 общих попыток (3 пользователя × 3 пароля), и каждый успешный вход в систему отмечается [1025][smtp], указывающим порт и тип сервиса.

Настройка времени ожидания с помощью параметра -w

На этом шаге вы явно зададите время ожидания Hydra с помощью опции -w. Хотя стандартное время ожидания (10 секунд) было достаточным для нашей задержки в 5 секунд, понимание и управление этим параметром имеет решающее значение для адаптации Hydra к различным сетевым условиям и поведению сервера.

Вы будете использовать те же списки имен пользователей и паролей (users.txt и passwords.txt), которые вы создали на предыдущем шаге.

Теперь снова запустите Hydra, но на этот раз явно добавьте опцию -w. Эта команда будет вести себя идентично предыдущей, так как 10 секунд — это стандартное время ожидания Hydra, но она демонстрирует, как использовать эту опцию.

hydra -L ~/project/users.txt -P ~/project/passwords.txt -vV -t 1 -w 10 127.0.0.1 smtp -s 1025

Вот разбор команды, с выделенной ключевой разницей:

  • hydra: Команда Hydra.
  • -L ~/project/users.txt: Указывает файл со списком имен пользователей.
  • -P ~/project/passwords.txt: Указывает файл со списком паролей.
  • -vV: Включает подробный режим.
  • -t 1: Устанавливает количество потоков в 1.
  • -w 10: Явно устанавливает время ожидания (таймаут) в 10 секунд. Это означает, что Hydra будет ждать до 10 секунд ответа от целевого сервиса, прежде чем считать попытку неудачной.
  • 127.0.0.1: Целевой IP-адрес.
  • smtp: Модуль сервиса.
  • -s 1025: Указывает номер порта.

Вывод будет похож на предыдущий шаг, так как 10-секундное время ожидания достаточно для задержки в 5 секунд вашего SMTP-сервера. Этот шаг в основном служит для иллюстрации использования опции -w.

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-05-29 14:02:49
[INFO] several providers have implemented cracking protection, check with a small wordlist first - and stay legal!
[DATA] max 1 task per 1 server, overall 1 task, 9 login tries (l:3/p:3), ~9 tries per task
[DATA] attacking smtp://127.0.0.1:1025/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "password" - 1 of 9 [child 0] (0/0)
[VERBOSE] using SMTP LOGIN AUTH mechanism
[1025][smtp] host: 127.0.0.1   login: testuser   password: password
... (остальные попытки)

Этот вывод демонстрирует явное использование -w 10 для установки времени ожидания в 10 секунд, что приводит к идентичным результатам, как и при использовании стандартного значения. Атака завершилась успешно, найдя все 3 правильных пароля в течение 16-секундного временного интервала (с 14:02:49 до 14:03:05). Этот шаг показывает, как вы можете явно управлять настройками таймаута, что становится необходимым при работе с серверами, время ответа которых превышает стандартный лимит в 10 секунд.

Тестирование одного набора учетных данных с параметрами -l и -p

В этом шаге вы узнаете, как использовать опции Hydra -l и -p для тестирования одной комбинации имени пользователя и пароля. Этот подход позволяет указать пару данных для входа непосредственно в командной строке, вместо использования отдельных файлов. Это особенно полезно для быстрого тестирования конкретной пары данных для входа без создания или изменения файлов.

Вы будете продолжать использовать задержанный SMTP-сервер, настроенный на первом шаге.

Выполните следующую команду Hydra, используя опцию -l для указания имени пользователя и опцию -p для указания пароля:

hydra -t 1 -l testuser -p password -vV 127.0.0.1 smtp -s 1025

Давайте разберем эту команду:

  • hydra: Команда Hydra.
  • -t 1: Устанавливает количество потоков в 1, обеспечивая четкую последовательную попытку.
  • -l testuser: Указывает имя пользователя для тестирования. Опция -l (маленькая буква L) используется для одного имени пользователя.
  • -p password: Указывает пароль для тестирования. Опция -p используется для одного пароля.
  • -vV: Включает подробный режим.
  • 127.0.0.1: Целевой IP-адрес.
  • smtp: Модуль сервиса.
  • -s 1025: Указывает номер порта.

В этом сценарии Hydra будет пытаться войти в систему только с одной парой данных для входа testuser:password. Поскольку наш SMTP-сервер принимает любые данные для входа в демонстрационных целях, Hydra сообщит об успешном входе.

Вы увидите вывод, похожий на этот:

labex:project/ $ hydra -t 1 -l testuser -p password -vV 127.0.0.1 smtp -s 1025
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-05-29 13:50:25
[INFO] several providers have implemented cracking protection, check with a small wordlist first - and stay legal!
[DATA] max 1 task per 1 server, overall 1 task, 1 login try (l:1/p:1), ~1 try per task
[DATA] attacking smtp://127.0.0.1:1025/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "password" - 1 of 1 [child 0] (0/0)
[VERBOSE] using SMTP LOGIN AUTH mechanism
[1025][smtp] host: 127.0.0.1   login: testuser   password: password
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 13:50:30

Этот вывод демонстрирует тестирование одной пары данных для входа с помощью опций -l и -p вместо файлов со списками. Обратите внимание, что строка [DATA] теперь показывает 1 login try (l:1/p:1), что указывает на то, что тестируются только одно имя пользователя и один пароль. Этот подход эффективен для целевого тестирования, когда у вас есть конкретные данные для входа, которые нужно проверить, и он завершается намного быстрее, так как есть только одна попытка вместо девяти.

Резюме

В этом лабораторном практикуме вы изучили, как настроить поведение Hydra при работе с сервисами, которые имеют медленные или ненадёжные ответы.

Вы начали с настройки имитируемого медленного SMTP-сервера с помощью скрипта Python, который ввёл 5-секундную задержку в его ответах. Это позволило создать контролируемую среду для тестирования настроек таймаута Hydra. Затем вы запустили Hydra против этого сервера, сначала наблюдая за его стандартным поведением, а затем явно настраивали время ожидания с помощью опции -w. Наконец, вы изучили опции -l и -p для указания отдельных учетных данных непосредственно в командной строке, что полезно для быстрых и целевых тестов.

Этот лабораторный практикум предоставил вам практический опыт настройки Hydra для различных сетевых условий, улучшив вашу способность проводить эффективные атаки методом грубой силы.