使用 Bash 脚本自动化破解

Kali LinuxBeginner
立即练习

引言

在渗透测试和安全审计中,通常需要针对一组哈希值尝试多种密码破解技术。手动运行每个命令可能耗时且效率低下。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 脚本创建(touchchmod、shebang)。
  • 使用 hashcat 进行不同的攻击模式(-a 0-a 3)。
  • 实现字典攻击、基于规则的攻击和掩码攻击。
  • 自动化命令序列以创建高效的工作流程。

这种脚本化和自动化的方法是网络安全、系统管理和许多其他 IT 领域的核心技能,它允许你用一个命令执行复杂、重复的任务。