微调 Hydra 的响应等待时间

HydraHydraBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,我们将探讨在攻击可能响应缓慢或不可靠的服务时,如何微调 Hydra 的响应等待时间。我们将以 SMTP 为例进行讲解。

本次实验包括使用 Python 设置一个具有延迟响应的简单 SMTP 服务器。然后,我们将使用默认的等待时间设置对该服务器运行 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

在这一步中,我们将使用 Python 设置一个具有延迟响应的简单 SMTP 服务器。这将使我们能够模拟一个响应缓慢或不可靠的 SMTP 服务器,这对于测试 Hydra 处理此类场景的能力非常有用。

首先,让我们在 ~/project 目录下创建一个名为 delayed_smtp.py 的 Python 脚本。这个脚本将监听 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 文件来查看服务器的输出。

为了验证服务器是否正在运行,你可以使用 netstatss 来检查 1025 端口是否正在监听。

netstat -tulnp | grep 1025

你应该会看到类似以下的输出:

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

这确认了 SMTP 服务器正在运行并监听 1025 端口。请注意,<PID> 将被替换为 Python 脚本的实际进程 ID。

现在我们已经有一个具有延迟响应的 SMTP 服务器在运行,我们可以使用它来测试 Hydra 在不利网络条件下的性能。

使用默认 -w 设置运行

在这一步中,我们将使用默认的 -w 设置,针对上一步中设置的具有延迟响应的 SMTP 服务器运行 Hydra。Hydra 中的 -w 选项指定了超时值,即 Hydra 在将尝试视为失败之前,等待目标服务响应的最长时间。-w 的默认值为 10 秒。

首先,我们需要一个用户名和密码列表。让我们在 ~/project 目录下创建一个名为 users.txt 的简单用户名列表和一个名为 passwords.txt 的密码列表。

nano ~/project/users.txt

将以下用户名添加到 users.txt 文件中:

testuser
admin
user

保存文件并退出 nano

接下来,创建密码列表:

nano ~/project/passwords.txt

将以下密码添加到 passwords.txt 文件中:

password
123456
test

保存文件并退出 nano

现在,我们将使用默认的 -w 设置针对 SMTP 服务器运行 Hydra。我们将目标设定为运行在 localhost(127.0.0.1)的 1025 端口上的 SMTP 服务器。我们将使用 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:启用详细模式,显示有效的和无效的登录尝试。
  • -t 1:将线程数设置为 1。在这一步中我们使用单线程,以便使输出清晰。
  • 127.0.0.1:目标 IP 地址(本地主机)。
  • smtp:要使用的服务模块(SMTP)。
  • -s 1025:指定端口号(1025)。

由于我们的 SMTP 服务器有 5 秒的延迟,而默认的 -w 是 10 秒,Hydra 应该能够成功测试这些凭据。你应该会看到 Hydra 尝试使用每一个用户名和密码组合进行登录。-vV 选项将显示成功和失败的尝试。

输出将显示 Hydra 尝试不同的用户名/密码组合。因为我们使用的是单线程(-t 1),所以这些尝试将是按顺序进行的。

使用 -w 将等待时间设置为 10 秒

在这一步中,我们将使用 -w 选项显式地将等待时间设置为 10 秒,并针对我们设置的具有延迟响应的 SMTP 服务器运行 Hydra。这与默认设置相同,但我们显式设置它是为了演示如何使用该选项。

我们将使用上一步中创建的相同的用户名和密码列表(users.txtpasswords.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:启用详细模式,显示有效的和无效的登录尝试。
  • -t 1:将线程数设置为 1。
  • -w 10将等待时间指定为 10 秒。
  • 127.0.0.1:目标 IP 地址(本地主机)。
  • smtp:要使用的服务模块(SMTP)。
  • -s 1025:指定端口号(1025)。

由于等待时间设置为 10 秒,而我们的 SMTP 服务器有 5 秒的延迟,Hydra 应该能够成功测试这些凭据。输出将与上一步类似,显示 Hydra 尝试使用每一个用户名和密码组合进行登录。

使用单线程测试 -c 选项

在这一步中,我们将使用 -c 选项直接在命令行中指定单个用户名/密码组合,而不是使用文件。为了使输出清晰,我们还将线程数保持为 1(-t 1)。这对于快速测试特定凭据非常有用。

我们将继续使用在第一步中设置的具有延迟响应的 SMTP 服务器。

现在,让我们使用 -c 选项运行 Hydra:

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

让我们来分解一下这个命令:

  • hydra:Hydra 命令。
  • -t 1:将线程数设置为 1。
  • -c testuser:password直接在命令行中指定用户名 testuser 和密码 password
  • -vV:启用详细模式,显示有效的和无效的登录尝试。
  • 127.0.0.1:目标 IP 地址(本地主机)。
  • smtp:要使用的服务模块(SMTP)。
  • -s 1025:指定端口号(1025)。

在这种情况下,Hydra 将仅尝试使用用户名 testuser 和密码 password 进行登录。如果该组合有效,Hydra 将报告登录成功。如果无效,则会报告失败。

输出将显示 Hydra 正在尝试 testuser:password 组合。

总结

在本次实验中,我们首先使用名为 delayed_smtp.py 的 Python 脚本设置了一个模拟的慢速 SMTP 服务器。该脚本在确认收到电子邮件之前引入了 5 秒的延迟,以此模拟不可靠的服务器。该脚本在端口 1025 上监听连接,并将其活动记录到 delayed_smtp.log 文件中。

然后,我们使用 nohup 命令在后台执行 delayed_smtp.py 脚本,确保即使关闭终端后它仍能继续运行。这种设置使我们能够测试 Hydra 处理 SMTP 服务器延迟响应的能力。