简介
在本次实验中,我们将探讨在攻击可能响应缓慢或不可靠的服务时,如何微调 Hydra 的响应等待时间。我们将以 SMTP 为例进行讲解。
本次实验包括使用 Python 设置一个具有延迟响应的简单 SMTP 服务器。然后,我们将使用默认的等待时间设置对该服务器运行 Hydra,随后使用 -w
选项调整等待时间。最后,我们将使用单线程测试 -c
选项,以观察其对攻击过程的影响。
在本次实验中,我们将探讨在攻击可能响应缓慢或不可靠的服务时,如何微调 Hydra 的响应等待时间。我们将以 SMTP 为例进行讲解。
本次实验包括使用 Python 设置一个具有延迟响应的简单 SMTP 服务器。然后,我们将使用默认的等待时间设置对该服务器运行 Hydra,随后使用 -w
选项调整等待时间。最后,我们将使用单线程测试 -c
选项,以观察其对攻击过程的影响。
在这一步中,我们将使用 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
文件来查看服务器的输出。
为了验证服务器是否正在运行,你可以使用 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 脚本的实际进程 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.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
:启用详细模式,显示有效的和无效的登录尝试。-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 服务器延迟响应的能力。