引言
在渗透测试和安全审计中,通常需要针对一组哈希值尝试多种密码破解技术。手动运行每个命令可能耗时且效率低下。Bash 脚本提供了一种强大的自动化此过程的方法,可以创建一系列攻击,按顺序运行直到找到密码。
在本实验中,你将创建一个 Bash 脚本来自动化使用 hashcat(一款流行且强大的密码恢复工具)的一系列攻击。你将学习如何构建一个脚本,首先尝试字典攻击,然后是基于规则的攻击,最后是掩码攻击。这种实践经验将为你介绍网络安全背景下的自动化基础知识。
完成本实验后,你将能够:
- 创建并使 Bash 脚本可执行。
- 向脚本添加一系列
hashcat命令。 - 理解并实现不同的
hashcat攻击模式。 - 执行脚本以自动化工作流程。
创建新的 Bash 脚本文件
在此步骤中,你将创建一个空的 Bash 脚本文件,添加必要的 shebang 行,并使其可执行。Bash 脚本是一个包含一系列命令的纯文本文件。脚本开头的 shebang (#!/bin/bash) 告诉系统使用哪个解释器来执行文件中的命令。
首先,使用 touch 命令在 ~/project 目录中创建一个名为 attack.sh 的新文件。
touch attack.sh
接下来,使用 nano 文本编辑器打开文件以添加 shebang 行。
nano attack.sh
在 nano 编辑器中,在文件顶部添加以下行。这声明该文件是一个 Bash 脚本。
#!/bin/bash
按 Ctrl+X,然后按 Y,最后按 Enter 保存文件并退出 nano。
最后,你需要为脚本授予执行权限,以便你可以将其作为程序运行。使用带有 +x 标志的 chmod 命令来完成此操作。
chmod +x attack.sh
你可以使用 ls -l 来验证权限。你应该在 attack.sh 的权限块中看到一个 'x'。
ls -l attack.sh
预期输出:
-rwxr-xr-x 1 labex labex 12 May 20 10:00 attack.sh
添加用于字典攻击的 Hashcat 命令
在此步骤中,你将向脚本添加第一个命令:字典攻击。这是最常见且有效的密码破解方法之一。它通过尝试给定列表(字典)中的每个单词作为潜在密码来工作。
我们将使用 hashcat 来执行此攻击。实验环境已预先配置了哈希文件 hashes.txt 和单词列表 wordlist.txt。
再次使用 nano 打开你的 attack.sh 脚本。
nano attack.sh
在 #!/bin/bash 行下方添加以下 hashcat 命令。
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist.txt
让我们分解一下这个命令:
hashcat: 我们正在运行的程序。-m 0: 指定哈希类型。0对应 MD5。-a 0: 指定攻击模式。0对应直接字典攻击。/home/labex/project/hashes.txt: 包含要破解的哈希值的文件。/home/labex/project/wordlist.txt: 用于攻击的字典文件。
你的 attack.sh 文件现在应该如下所示:
#!/bin/bash
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist.txt
按 Ctrl+X,然后按 Y,最后按 Enter 保存并退出。目前,我们只是在构建脚本,直到最后一步才会执行它。
添加用于基于规则攻击的第二个命令
在此步骤中,你将向脚本添加第二个攻击。如果字典攻击失败,基于规则的攻击通常是下一个合乎逻辑的步骤。此攻击会采用一个单词列表,并对每个单词应用一组规则来生成新的密码候选。例如,一个规则可能会在每个单词后附加 "123" 或将首字母大写。
我们为此演示准备了一个单独的单词列表 wordlist_for_rule.txt 和一个简单的规则文件 rules.txt。
再次使用 nano 打开 attack.sh。
nano attack.sh
在字典攻击命令之后,在新的一行添加以下命令。
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist_for_rule.txt -r /home/labex/project/rules.txt
此命令的新增部分是:
-r /home/labex/project/rules.txt: 此标志告诉hashcat应用指定文件中的规则。
你的 attack.sh 脚本现在应包含两个 hashcat 命令:
#!/bin/bash
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist.txt
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist_for_rule.txt -r /home/labex/project/rules.txt
按 Ctrl+X,然后按 Y,最后按 Enter 保存更改。运行脚本时,它将按顺序执行这些命令。
添加用于掩码攻击的第三个命令
在此步骤中,你将向脚本添加最后一个攻击方法:掩码攻击。此方法也称为暴力破解攻击(brute-force attack),当你了解密码的结构时(例如其长度或包含的字符类型),它会很有用。
掩码定义了结构。例如,?l 代表小写字母,?u 代表大写字母,?d 代表数字,?s 代表特殊字符。
最后一次使用 nano 打开 attack.sh。
nano attack.sh
在脚本末尾的新行上添加以下掩码攻击命令。此掩码 ?l?l?l?l?l?l?l?l 将尝试所有 8 个字符的小写密码组合。
hashcat -m 0 -a 3 /home/labex/project/hashes.txt ?l?l?l?l?l?l?l?l
此命令的关键部分是:
-a 3: 这将攻击模式设置为3,即掩码攻击。?l?l?l?l?l?l?l?l: 这是掩码本身,定义了要测试的密码结构。
你完整的 attack.sh 脚本现在应该如下所示:
#!/bin/bash
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist.txt
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist_for_rule.txt -r /home/labex/project/rules.txt
hashcat -m 0 -a 3 /home/labex/project/hashes.txt ?l?l?l?l?l?l?l?l
按 Ctrl+X,然后按 Y,最后按 Enter 保存文件并退出 nano。你的自动化攻击脚本现已完成。
执行脚本以自动运行攻击链
在最后一步中,你将执行你构建的脚本。当你运行 ./attack.sh 时,shell 将逐一执行其中的命令。hashcat 很智能;一旦它破解了一个哈希,它就会将结果存储在“potfile”(~/.local/share/hashcat/hashcat.potfile)中,并且不会再次尝试破解它。
现在,在你的终端中运行脚本。
./attack.sh
脚本将启动第一个 hashcat 命令。由于我们的 wordlist.txt 包含正确的密码("password"),第一个攻击将成功。你将看到 hashcat 初始化和运行时产生的输出。
成功运行将显示 Cracked 状态。因为密码在第一步中找到,hashcat 会将其添加到 potfile。脚本中的后续命令将运行,但 hashcat 会发现哈希已被破解,并会跳过它。
要查看破解的密码,你可以使用 hashcat 的 --show 选项。
hashcat -m 0 --show /home/labex/project/hashes.txt
此命令会检查 potfile 中与输入文件匹配的任何已破解哈希,并显示它们。
预期输出:
5f4dcc3b5aa765d61d8327deb882cf99:password
恭喜!你已成功创建并执行了一个 Bash 脚本,以自动化一系列密码破解攻击。
总结
在本实验中,你学习了使用 Bash 脚本自动化安全任务的基础知识。你成功创建了一个脚本,将多种 hashcat 密码破解技术串联起来。
你首先创建了一个新的 Bash 脚本文件并使其可执行。然后,你逐步添加了字典攻击、基于规则的攻击和掩码攻击的命令。最后,你执行了脚本以观察其运行情况,了解 hashcat 如何在第一阶段高效地找到密码并记录结果。
你练习的关键技能包括:
- 基本的 Bash 脚本创建(
touch、chmod、shebang)。 - 使用
hashcat进行不同的攻击模式(-a 0、-a 3)。 - 实现字典攻击、基于规则的攻击和掩码攻击。
- 自动化命令序列以创建高效的工作流程。
这种脚本化和自动化的方法是网络安全、系统管理和许多其他 IT 领域的核心技能,它允许你用一个命令执行复杂、重复的任务。


