使用 Hydra 攻击多个目标

HydraHydraBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何使用 Hydra 工具同时攻击多个目标。该实验重点在于利用 Hydra 的功能,对目标主机列表进行密码破解尝试。

该实验指导你创建包含 IP 地址或主机名的目标列表文件,使用 -M 选项将该文件加载到 Hydra 中,对目标进行并行 HTTP 攻击,最后检查输出以识别成功登录的多台主机。这个实践经验将为你提供使用 Hydra 进行渗透测试和安全审计的实用技能。

创建目标列表文件

本步骤中,你将创建目标列表文件。该文件包含 Hydra 将尝试连接并破解密码的目标 URL 列表。这是任何渗透测试或安全审计场景中的关键步骤。

HTTP 攻击的目标列表文件包含 URL,而不是仅包含 IP 地址。每一行都代表一个需要 HTTP 基本身份验证的目标 Web 服务。在本实验环境中,我们已设置了多个在不同端口上运行且启用基本身份验证的 Apache Web 服务器。

本实验的所有操作都将在 ~/project 目录中执行。

  1. 首先,让我们验证我们的测试 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 响应头,表明服务器正在运行。

  2. 创建包含测试 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 进行保护
  3. 验证文件已创建并包含目标:

    cat ~/project/targets.txt

    你应该看到类似的输出:

    127.0.0.1:8081
    127.0.0.1:8082
    127.0.0.1:8083
  4. 测试其中一个受保护的资源以确认需要身份验证:

    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 基本身份验证。

  1. 创建用于攻击的用户和密码列表:

    cd ~/project
    echo "admin" > users.txt
    echo "user" >> users.txt
    echo "testuser" >> users.txt
    echo "root" >> users.txt

    这将创建一个用户名列表,其中包含我们配置的实际用户名,以及一个常见的用户名 root

  2. 创建密码列表:

    echo "password123" > passwords.txt
    echo "secret" >> passwords.txt
    echo "password" >> passwords.txt
    echo "admin" >> passwords.txt
    echo "123456" >> passwords.txt

    这将创建一个密码列表,其中包含我们配置的实际密码,以及一些常见的弱密码。

  3. 现在,执行 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 服务的有效凭据。

  4. 如果需要,你也可以使用更具体的路径进行测试:

    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 攻击。

  1. 执行以下 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.
  2. 尝试使用不同的 -t 选项值。尝试增加线程数,看看它如何影响速度:

    hydra -L users.txt -P passwords.txt -t 16 -M targets.txt http-get /

    你可能会注意到,使用更多线程,攻击完成得更快,但确切的时间取决于你系统的性能。

  3. 你还可以添加详细输出,以查看有关攻击过程的更多详细信息:

    hydra -L users.txt -P passwords.txt -t 8 -v -M targets.txt http-get /

    -v 标志提供详细输出,显示每次登录尝试,这对于了解 Hydra 正在测试的内容非常有用。

  4. 为了获得更详细的输出,可以使用 -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 攻击的输出,并了解不同结果的含义。

  1. 再次运行完整的 Hydra 攻击命令,查看完整的输出:

    cd ~/project
    hydra -L users.txt -P passwords.txt -t 8 -M targets.txt http-get /
  2. 检查详细输出。你应该看到所有三个目标的结果:

    预期的完整输出:

    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.
  3. 为了查看失败尝试的样子,让我们创建一个包含一些无效凭据的场景。创建一个新的密码文件,其中大部分密码都是错误的:

    echo "wrongpass" > wrong_passwords.txt
    echo "badpass" >> wrong_passwords.txt
    echo "password123" >> wrong_passwords.txt ## 只有一个正确的密码
  4. 使用详细输出运行 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
  5. 将结果保存到文件中,以便以后分析:

    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 应用程序安全评估奠定了基础。