精细调整 Hydra 响应等待时间

HydraBeginner
立即练习

介绍

在本实验中,你将学习如何微调 Hydra 的响应等待时间,以应对可能存在缓慢或不可靠响应的服务攻击。我们将使用 SMTP 作为示例来演示这些概念。

你将首先使用 Python 设置一个简单的 SMTP 服务器,并使用模拟的延迟响应来模拟缓慢或不可靠的网络环境。然后,你将使用 Hydra 攻击该服务器,首先使用其默认的等待时间设置,随后使用 -w 选项调整等待时间,观察其影响。最后,你将探索 -l-p 选项,用于直接指定单一凭证,并使用单个线程进行测试。

设置延迟响应的 SMTP 服务器

本步骤中,你将使用 Python 设置一个简单的 SMTP 服务器。该服务器会在其响应中引入延迟,模拟缓慢或不可靠的服务。此设置对于理解 Hydra 的等待时间设置如何影响其性能至关重要。

首先,你需要在你的 ~/project 目录中创建一个名为 delayed_smtp.py 的 Python 脚本。该脚本将充当你的 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")  ## 用户名:
                client_socket.recv(1024)  ## 接收用户名

                ## 添加 5 秒延迟
                time.sleep(5)

                client_socket.send(b"334 UGFzc3dvcmQ6\r\n")  ## 密码:
                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。服务器支持使用 LOGIN 方法进行 SMTP 身份验证,这是 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 脚本的实际进程 ID。这证实了你的延迟 SMTP 服务器现在已激活并准备进行测试。

此输出确认 Python SMTP 服务器已成功运行并监听端口 1025。LISTEN 状态表示服务器已准备好接受连接,而 python3 进程名称确认我们的脚本正在运行。内置于此服务器中的 5 秒延迟将帮助我们理解 Hydra 的等待时间设置如何影响攻击性能。

Delayed SMTP server running on port 1025

使用默认等待时间的 Hydra 执行

本步骤中,你将使用你设置的延迟 SMTP 服务器运行 Hydra 攻击。你将使用 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。你将攻击运行在 localhost (127.0.0.1) 端口 1025 的 SMTP 服务器。你将使用 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: 指定目标服务的端口号,对于你的延迟 SMTP 服务器为 1025

由于你的 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 - 请勿在军事或秘密服务组织或用于非法目的中使用(这并非强制性,这些***无论如何都会忽略法律和道德)。

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
[ATTEMPT] target 127.0.0.1 - login "admin" - pass "password" - 4 of 9 [child 0] (0/0)
[VERBOSE] using SMTP LOGIN AUTH mechanism
[1025][smtp] host: 127.0.0.1   login: admin   password: password
[ATTEMPT] target 127.0.0.1 - login "user" - pass "password" - 7 of 9 [child 0] (0/0)
[VERBOSE] using SMTP LOGIN AUTH mechanism
[1025][smtp] host: 127.0.0.1   login: user   password: password
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
1 of 1 target successfully completed, 3 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 13:47:20

此输出演示了 Hydra 在具有 5 秒延迟的服务器上使用其默认 10 秒等待时间的工作情况。请注意,所有尝试都在没有超时的情况下成功完成,这表明默认等待时间对于此场景来说足够。[DATA] 行显示总共 9 次尝试(3 个用户 × 3 个密码),每个成功的登录都用 [1025][smtp] 标记,指示端口和服务类型。

使用 -w 参数调整等待时间

本步骤中,你将使用 -w 选项显式设置 Hydra 的等待时间。虽然默认等待时间(10 秒)足以应对我们 5 秒的延迟,但理解和控制此参数对于使 Hydra 适应各种网络条件和服务器行为至关重要。

你将使用与上一步骤中创建的相同用户名和密码列表(users.txtpasswords.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 秒的等待时间足以应对你的 SMTP 服务器的 5 秒延迟。本步骤主要用于说明 -w 选项的使用。

Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - 请勿在军事或秘密服务组织或用于非法目的中使用(这并非强制性,这些***无论如何都会忽略法律和道德)。

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
[ATTEMPT] target 127.0.0.1 - login "admin" - pass "password" - 4 of 9 [child 0] (0/0)
[VERBOSE] using SMTP LOGIN AUTH mechanism
[1025][smtp] host: 127.0.0.1   login: admin   password: password
[ATTEMPT] target 127.0.0.1 - login "user" - pass "password" - 7 of 9 [child 0] (0/0)
[VERBOSE] using SMTP LOGIN AUTH mechanism
[1025][smtp] host: 127.0.0.1   login: user   password: password
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
1 of 1 target successfully completed, 3 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:03:05

此输出演示了显式使用 -w 10 将等待时间设置为 10 秒,产生与默认设置相同的结果。攻击成功完成,在 16 秒的时间范围内(14:02:49 至 14:03:05)找到了所有 3 个有效密码。本步骤展示了如何显式控制超时设置,这在处理响应时间超过默认 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 - 请勿在军事或秘密服务组织或用于非法目的中使用(这并非强制性,这些***无论如何都会忽略法律和道德)。

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 的行为,以应对响应缓慢或不可靠的服务。

你首先使用 Python 脚本设置了一个模拟的慢速 SMTP 服务器,该服务器在响应中引入了 5 秒的延迟。这使你能够创建一个受控的环境来测试 Hydra 的超时设置。然后,你运行 Hydra 对该服务器进行测试,首先观察其默认行为,然后使用 -w 选项显式调整等待时间。最后,你探索了 -l-p 选项,用于直接在命令行中指定单个凭证,这对于快速、有针对性的测试非常有用。

本实验为你提供了在各种网络条件下配置 Hydra 的实践经验,增强了你执行有效暴力破解攻击的能力。