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

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

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

Введение

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hydra(("Hydra")) -.-> hydra/HydraGroup(["Hydra"]) hydra/HydraGroup -.-> hydra/single_username("Single Username Attack") hydra/HydraGroup -.-> hydra/single_password("Single Password Attack") hydra/HydraGroup -.-> hydra/target_ip("Target IP Specification") hydra/HydraGroup -.-> hydra/target_service("Target Service Selection") hydra/HydraGroup -.-> hydra/verbose_mode("Verbose Mode Usage") hydra/HydraGroup -.-> hydra/timeout_setting("Timeout Adjustment") hydra/HydraGroup -.-> hydra/error_handling("Error Message Handling") hydra/HydraGroup -.-> hydra/troubleshooting("Basic Troubleshooting") subgraph Lab Skills hydra/single_username -.-> lab-550768{{"Настройка времени ожидания ответа Hydra"}} hydra/single_password -.-> lab-550768{{"Настройка времени ожидания ответа Hydra"}} hydra/target_ip -.-> lab-550768{{"Настройка времени ожидания ответа Hydra"}} hydra/target_service -.-> lab-550768{{"Настройка времени ожидания ответа Hydra"}} hydra/verbose_mode -.-> lab-550768{{"Настройка времени ожидания ответа Hydra"}} hydra/timeout_setting -.-> lab-550768{{"Настройка времени ожидания ответа Hydra"}} hydra/error_handling -.-> lab-550768{{"Настройка времени ожидания ответа Hydra"}} hydra/troubleshooting -.-> lab-550768{{"Настройка времени ожидания ответа Hydra"}} end

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

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

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

nano ~/project/delayed_smtp.py

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

import smtpd
import asyncore
import time
import sys

class DelayedSMTPServer(smtpd.SMTPServer):
    def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
        print('Receiving message from:', peer)
        print('From:', mailfrom)
        print('To:', rcpttos)
        print('Message length:', len(data))
        print('Waiting for 5 seconds...')
        sys.stdout.flush()
        time.sleep(5)  ## Simulate a delay
        print('Done waiting!')
        sys.stdout.flush()
        return '250 Message accepted for delivery'

def run():
    port = 1025
    server = DelayedSMTPServer(('0.0.0.0', port), None)
    print(f"Starting SMTP server on port {port}")
    sys.stdout.flush()
    asyncore.loop()

if __name__ == '__main__':
    run()

Этот скрипт определяет настраиваемый SMTP-сервер, который вводит задержку в 5 секунд перед подтверждением получения электронного письма. Он прослушивает порт 1025.

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

Теперь запустим скрипт в фоновом режиме. Мы используем команду nohup, чтобы убедиться, что скрипт продолжит работу даже после закрытия терминала. Также мы перенаправим вывод в файл с именем delayed_smtp.log, чтобы можно было отслеживать его работу.

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

Эта команда запускает скрипт delayed_smtp.py в фоновом режиме. Вы можете проверить файл delayed_smtp.log, чтобы увидеть вывод сервера.

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

netstat -tulnp | grep 1025

Вы должны увидеть вывод, похожий на следующий:

tcp        0      0 0.0.0.0:1025            0.0.0.0:*               LISTEN      <PID>/python3

Это подтверждает, что SMTP-сервер запущен и прослушивает порт 1025. Обратите внимание, что <PID> будет заменено на фактический идентификатор процесса Python-скрипта.

Теперь, когда у нас запущен SMTP-сервер с задержкой, мы можем использовать его для тестирования производительности Hydra в неблагоприятных сетевых условиях.

Запуск с настройками по умолчанию для параметра -w

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

Сначала нам нужны списки имен пользователей и паролей. Создадим простой список имен пользователей с именем users.txt и список паролей с именем passwords.txt в директории ~/project.

nano ~/project/users.txt

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

testuser
admin
user

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

Далее создайте список паролей:

nano ~/project/passwords.txt

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

password
123456
test

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

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

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: Включает подробный режим (verbose mode), показывающий как успешные, так и неудачные попытки входа.
  • -t 1: Устанавливает количество потоков (threads) равным 1. Мы используем один поток на этом этапе, чтобы вывод был более понятным.
  • 127.0.0.1: Целевой IP-адрес (localhost).
  • smtp: Модуль сервиса, который нужно использовать (SMTP).
  • -s 1025: Указывает номер порта (1025).

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

Вывод будет показывать, как Hydra пробует разные комбинации имен пользователей и паролей. Поскольку мы используем один поток (-t 1), попытки будут последовательными.

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

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

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

Теперь запустим Hydra еще раз, на этот раз указав параметр -w 10:

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: Включает подробный режим (verbose mode), показывающий как успешные, так и неудачные попытки входа.
  • -t 1: Устанавливает количество потоков (threads) равным 1.
  • -w 10: Указывает время ожидания в 10 секунд.
  • 127.0.0.1: Целевой IP-адрес (localhost).
  • smtp: Модуль сервиса, который нужно использовать (SMTP).
  • -s 1025: Указывает номер порта (1025).

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

Тестирование параметра -c с одним потоком

На этом этапе мы будем использовать параметр -c для указания одной комбинации имени пользователя и пароля непосредственно в командной строке вместо использования файлов. Также мы оставим количество потоков равным 1 (-t 1) для наглядности. Это полезно для быстрого тестирования определенных учетных данных.

Мы продолжим использовать SMTP-сервер с задержкой, который мы настроили на первом этапе.

Теперь запустим Hydra с параметром -c:

hydra -t 1 -c testuser:password -vV 127.0.0.1 smtp -s 1025

Разберем эту команду:

  • hydra: Команда запуска Hydra.
  • -t 1: Устанавливает количество потоков (threads) равным 1.
  • -c testuser:password: Указывает имя пользователя testuser и пароль password непосредственно в командной строке.
  • -vV: Включает подробный режим (verbose mode), показывающий как успешные, так и неудачные попытки входа.
  • 127.0.0.1: Целевой IP-адрес (localhost).
  • smtp: Модуль сервиса, который нужно использовать (SMTP).
  • -s 1025: Указывает номер порта (1025).

В этом случае Hydra попытается войти только с именем пользователя testuser и паролем password. Если эта комбинация верна, Hydra сообщит о успешном входе. В противном случае он сообщит о неудаче.

Вывод будет показывать, как Hydra пробует комбинацию testuser:password.

Резюме

В этом лабораторном занятии мы начинаем с настройки имитированного медленного SMTP-сервера с использованием Python-скрипта с именем delayed_smtp.py. Этот скрипт вводит задержку в 5 секунд перед подтверждением получения электронного письма, имитируя ненадежный сервер. Скрипт прослушивает подключения на порту 1025 и записывает свою активность в файл delayed_smtp.log.

Затем скрипт delayed_smtp.py запускается в фоновом режиме с использованием команды nohup, что обеспечивает его непрерывную работу даже после закрытия терминала. Эта настройка позволяет нам проверить способность Hydra обрабатывать задержанные ответы от SMTP-сервера.