密码攻击技术

密码攻击技术
在这个房间里,我们将讨论可用于执行密码攻击的技术。 我们将介绍各种技术,例如字典、蛮力、规则库和猜测攻击。 上述所有技术都被视为主动“在线”攻击,其中攻击者需要与目标机器通信以获取密码,以便获得对机器的未授权访问。

密码破解与密码猜测
本节从网络安全的角度讨论密码破解术语。此外,我们还将讨论密码破解和密码猜测之间的显着差异。 最后,我们将演示用于密码破解的各种工具,包括 HashcatJohn the Ripper

密码破解是一种用于发现从加密或散列数据到明文数据的密码的技术。攻击者可能会从受感染的计算机获取加密或散列密码,或通过网络传输数据获取密码。一旦获得密码,攻击者就可以利用密码攻击技术使用各种工具破解这些散列密码。

密码破解被认为是渗透测试中的传统技术之一。主要目标是让攻击者升级到更高的权限并访问计算机系统或网络。 密码猜测和密码破解通常是信息安全专业人员常用的方法。两者都有不同的含义和含义。密码猜测是一种基于字典来猜测在线协议和服务密码的方法。以下是密码破解和密码猜测之间的主要区别:

  • 密码猜测是一种用于针对在线协议和服务的技术。因此,它被认为是耗时的,并且有机会为失败的登录尝试生成日志。在基于 Web 的系统上进行的密码猜测* 攻击通常需要为每次尝试发送一个新的请求,这很容易被检测到。如果系统设计和配置安全,可能会导致帐户被锁定。
    密码破解是一种在本地或在攻击者控制的系统上执行的技术

密码分析

拥有一个好的单词列表对于成功进行密码攻击至关重要。了解如何生成用户名列表和密码列表很重要

默认密码

在执行密码攻击之前,值得针对目标服务尝试几个默认密码。制造商为交换机、防火墙、路由器等产品和设备设置默认密码。在某些情况下,客户不会更改默认密码,这会使系统容易受到攻击。因此,尝试 admin:adminadmin:123456等是一个很好的做法。如果我们知道目标设备,我们可以查找默认密码并进行尝试。 例如,假设目标服务器是 Tomcat,这是一种轻量级开源 Java 应用程序服务器。在这种情况下,我们可以尝试几个可能的默认密码: admin:admintomcat:admin

以下是一些为各种产品提供默认密码的网站列表。

弱密码
专家会随着时间的推移收集和生成弱密码列表,并经常将它们组合成一个大的单词列表。列表是根据他们的经验和他们在渗透测试中看到的内容生成的。 这些列表还可能包含已公开发布的泄露密码。以下是一些常见的弱密码列表:

密码泄露
密码或哈希值等敏感数据可能会因违规而被公开披露或出售。这些公开或私人可用的泄漏通常被称为“转储”。根据转储的内容,攻击者可能需要从数据中提取密码。在某些情况下,转储可能只包含密码的哈希值,需要破解才能获得纯文本密码。以下是一些常见的存在弱密码和泄露密码的密码列表,包括webhostelitehackerhak5HotmailPhpBB公司的泄露

组合词表
假设我们有多个单词表。然后,我们可以将这些词表组合成一个大文件。这可以使用cat如下完成 :

cat file1.txt file2.txt file3.txt > combined_list.txt

要清理生成的组合列表以删除重复的单词,我们可以使用 sort 和 uniq 如下

sort combined_list.txt | uniq > password.txt
# 将重复的密码去除

分析网站生成模糊字典
自定义密码列表是增加找到有效凭据的机会的最佳方法之一。我们可以从目标网站创建自定义密码列表。通常,公司的网站包含有关公司及其员工的重要信息,包括电子邮件和员工姓名。此外,该网站可能包含特定于公司提供的关键字,包括产品和服务名称,这些关键字可能会用于员工密码!

Cewl等工具 可用于有效地抓取网站并提取字符串或关键字。Cewl是一个强大的工具,可以生成特定于给定公司或目标的词表。考虑以下示例:

user@thm$ cewl -w list.txt -d 5 -m 5 http://thm.labs

-w 将内容写入文件。在这种情况下,list.txt

-m 5 收集 5 个或更多字符的字符串(单词)

-d 5 是网络爬虫/爬虫的深度级别(默认2

http://thm.labs 是将要使用的 URL

现在我们对目标有了一个名称、位置和他们的许多商业术语的字典,可以使用该字典进行用户名和密码的模糊测试

生成密码字典

准备单词列表的另一种方法是使用键空间技术。在这种技术中,我们在单词列表中指定了一系列字符、数字和符号。 crunch 是创建离线单词列表的众多强大工具之一。使用 crunch,我们可以指定许多选项,包括最小值、最大值和选项,如下所示:

user@thm$ crunch -h
crunch version 3.6

Crunch can create a wordlist based on the criteria you specify.  
The output from crunch can be sent to the screen, file, or to another program.

Usage: crunch   [options]
where min and max are numbers

Please refer to the man page for instructions and examples on how to use crunch.

下面的示例创建一个包含 2 个字符的所有可能组合的单词列表,内容包括 0-4ad。 我们可以使用 -o参数并指定一个文件将输出保存

user@thm$ crunch 2 2 01234abcd -o crunch.txt
Crunch will now generate the following amount of data: 243 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: xx
crunch: 100% completed generating output

值得注意的是,根据您指定的字长和组合选项,crunch 可以生成非常大的文本文件。以下命令创建一个最小和最大长度为 8 个字符的列表,其中包含数字 0-9af 小写字母AF 大写字母

crunch 8 8 0123456789abcdefABCDEF -o crunch.txt生成的文件为459 GB ,包含54875873536 个单词

crunch 还允许我们使用 -t 选项指定一个字符集来组合我们选择的单词。以下是一些其他选项,可用于帮助创建您选择的不同组合:

  • @ - 小写字母字符

  • , - 大写字母字符

  • % - 数字字符

  • ^ - 包括空格在内的特殊字符

例如,如果我们知道密码的一部分,并且我们知道它以 pass开头 ,后面跟着两个数字,我们可以使用 上面的% 符号来匹配数字。在这里,我们生成一个包含 pass 后跟 2 个数字的单词列表

user@thm$  crunch 6 6 -t pass%%
Crunch will now generate the following amount of data: 700 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 100
pass00
pass01
pass02
pass03

使用规则生成密码相关字典

基于规则的攻击也称为 混合攻击。基于规则的攻击假定攻击者对密码策略有所了解。规则用于在给定密码策略的指导方针内创建密码,理论上应该只生成有效密码。在生成符合策略的密码时,使用预先存在的单词列表可能很有用——例如,操纵或“修改”密码,例如“password”: p@sswordPa$$wordPassw0rd

对于这种攻击,我们可以使用hashcatJohn the ripper扩展我们的词表。然而,对于这次攻击,让我们看看开膛手约翰是如何工作的。通常,John the ripper 有一个包含规则集的配置文件,该文件位于/etc/john/john.conf/opt/john/john.conf,具体取决于您的发行版或 john 的安装方式。您可以阅读/etc/john/john.conf并查找 List.Rules以查看所有可用规则

这里推荐使用john --rules=然后摁下TAB键进行补全,会显示所有可用的规则

我们可以看到我们有很多规则可供我们使用。我们将创建一个只有一个密码且包含字符串 tryhackme 的词表,以查看我们如何扩展该词表。让我们选择其中一个规则, best64 规则,它包含最好的 64 个内置 John 规则,看看它能做什么!

user@machine$ john --wordlist=/tmp/single-password-list.txt --rules=best64 --stdout | wc -l
Using default input encoding: UTF-8
Press 'q' or Ctrl-C to abort, almost any other key for status
76p 0:00:00:00 100.00% (2021-10-11 13:42) 1266p/s pordpo
76

--wordlist= 指定单词列表或字典文件。

--rules 指定要使用的规则

--stdout 将输出打印到终端

|wc -l 计算 John 生成了多少行

通过运行前面的命令,我们将密码列表从 1 个扩展到 76 个。 现在让我们检查另一个规则, KoreLogicJohn中最好的规则之一 。KoreLogic使用各种内置和自定义规则来生成复杂的密码列表。如需更多信息,请在此处访问该网站。现在让我们使用此规则检查 Tryh@ckm3是否在我们的列表中可用!

user@machine$ john --wordlist=single-password-list.txt --rules=KoreLogic --stdout |grep "Tryh@ckm3"
Using default input encoding: UTF-8
Press 'q' or Ctrl-C to abort, almost any other key for status
Tryh@ckm3
7089833p 0:00:00:02 100.00% (2021-10-11 13:56) 3016Kp/s tryhackme999999

上一个命令的输出显示我们的列表具有tryhackme的复杂版本,即Tryh@ckm3 。 最后,我们建议您查看所有规则并找到最适合您的规则。许多规则将组合应用于现有的单词列表并扩展单词列表以增加找到有效密码的机会!

自定义规则

John the ripper有很多东西可以提供。例如,我们可以构建自己的规则并在约翰破解哈希时在运行时使用它,或者使用规则构建自定义词表!

假设我们想从一个预先存在的字典创建一个自定义单词列表,并对原始字典进行自定义修改。目标是在每个单词的开头添加特殊字符(例如:!@#$*&)并在末尾添加数字 0-9。格式如下:

[符号]单词[0-9]

我们可以将我们的规则添加到 john.conf 的末尾:

user@machine$ sudo vi /etc/john/john.conf 
[List.Rules:THM-Password-Attacks] 
Az"[0-9]" ^[!@#$]

[List.Rules:THM-Password-Attacks] 指定规则名称 THM-Password-Attacks

Az使用表示原始单词列表/词典中的每个单词

“[0-9]”在单词末尾 附加一个数字(从 0到 9 )。对于两位数,我们可以加上 “[0-9][0-9]” 等等。

^[!@#$] 在每个单词的开头添加一个特殊字符。 ^ 表示行/字的开头。请注意,将 ^ 更改为 $会将特殊字符附加到行/单词的末尾。

现在让我们创建一个包含单个单词password的文件,看看我们如何使用此规则扩展我们的单词列表

user@machine$ echo "password" > /tmp/single.lst

我们使用--rules选项使用我们在 John 命令中创建的规则的名称 。我们还需要在终端中显示结果。我们可以使用 --stdout 来做到这一点,如下所示:

user@machine$ john --wordlist=/tmp/single.lst --rules=THM-Password-Attacks --stdout 
Using default input encoding: UTF-8 
!password0 
@password0 
#password0 
$password0

如果想要保存导出的密码字典,在末尾加入> 文件名即可

练习题目

  1. 你能 不用暴力破解就猜出FTP凭据吗?旗帜是什么?
    直接匿名用户登录下载flag文件即可

  2. 在这个问题中,您需要从上一个任务中的 词表 clinic.lst生成一个 基于规则的词典。电子邮件: pittman@clinic.thmredteam.com针对 465 (SMTPS)。注意密码格式如下: [符号][字典词][0-9][0-9]

首先使用该命令生成一个模糊字典clinic.lst

user@machine$ cewl -m 8 -w clinic.lst https://clinic.thmredteam.com/  

通过提示得到符号

修改/etc/john/john.conf文件,规则如下

[List.Rules:Test-Rule]
Az"[0-9][0-9]" ^[!@]