密码破解基础知识与入门教程

作者:FancyPig | 发布时间: | 更新时间:

相关阅读

往期分享

data-postsbox="{"id":32142,"title":"什么是SSRF漏洞 | 如何寻找和利用SSRF漏洞","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2023/02/20230212030457710.jpg","cover_video":"https://v.pigsec.cn/Find%20and%20Exploit%20Server-Side%20Request%20Forgery%20%28SSRF%29_ts.m3u8","views":2499,"comment_count":2,"category":"cybersecurity","is_forum_post":false}">{"id":32142,"title":"什么是SSRF漏洞 | 如何寻找和利用SSRF漏洞","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2023/02/20230212030457710.jpg","cover_video":"https://v.pigsec.cn/Find%20and%20Exploit%20Server-Side%20Request%20Forgery%20%28SSRF%29_ts.m3u8","views":2499,"comment_count":2,"category":"cybersecurity","is_forum_post":false}
data-postsbox="{"id":32869,"title":"失效的对象级授权 (BOLA) 概念解析 | OWASP API TOP 1","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2023/02/20230222022155506.jpg","cover_video":"https://v.pigsec.cn/Broken%20Object%20Level%20Authorization%20%28BOLA%29%20Explained_ts.m3u8","views":1283,"comment_count":0,"category":"cybersecurity","is_forum_post":false}">{"id":32869,"title":"失效的对象级授权 (BOLA) 概念解析 | OWASP API TOP 1","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2023/02/20230222022155506.jpg","cover_video":"https://v.pigsec.cn/Broken%20Object%20Level%20Authorization%20%28BOLA%29%20Explained_ts.m3u8","views":1283,"comment_count":0,"category":"cybersecurity","is_forum_post":false}
data-postsbox="{"id":33652,"title":"什么是NoSQL注入 | 如何挖掘、利用NoSQL注入漏洞","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2023/03/20230309012436321.jpg","cover_video":"https://v.pigsec.cn/Find%20and%20Exploit%20NoSQL%20Injection_ts.m3u8","views":2658,"comment_count":3,"category":"cybersecurity","is_forum_post":false}">{"id":33652,"title":"什么是NoSQL注入 | 如何挖掘、利用NoSQL注入漏洞","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2023/03/20230309012436321.jpg","cover_video":"https://v.pigsec.cn/Find%20and%20Exploit%20NoSQL%20Injection_ts.m3u8","views":2658,"comment_count":3,"category":"cybersecurity","is_forum_post":false}
data-postsbox="{"id":34610,"title":"什么是JSON Web Tokens | 如何针对JWT进行渗透测试","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2023/03/20230331063118715.jpg","cover_video":"https://v.pigsec.cn/Cracking%20JSON%20Web%20Tokens_2_ts.m3u8","views":2090,"comment_count":4,"category":"knowledge","is_forum_post":false}">{"id":34610,"title":"什么是JSON Web Tokens | 如何针对JWT进行渗透测试","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2023/03/20230331063118715.jpg","cover_video":"https://v.pigsec.cn/Cracking%20JSON%20Web%20Tokens_2_ts.m3u8","views":2090,"comment_count":4,"category":"knowledge","is_forum_post":false}
data-postsbox="{"id":35172,"title":"什么是文件上传漏洞 | 如何发现并进行漏洞利用","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2023/04/20230416081924640.jpg","cover_video":"https://v.pigsec.cn/Web%20Application%20Hacking%20-%20File%20Upload%20Attacks%20Explained_ts.m3u8","views":2318,"comment_count":0,"category":"knowledge","is_forum_post":false}">{"id":35172,"title":"什么是文件上传漏洞 | 如何发现并进行漏洞利用","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2023/04/20230416081924640.jpg","cover_video":"https://v.pigsec.cn/Web%20Application%20Hacking%20-%20File%20Upload%20Attacks%20Explained_ts.m3u8","views":2318,"comment_count":0,"category":"knowledge","is_forum_post":false}

相关讲解

data-postsbox="{"id":5494,"title":"【视频教程】如何高效、优雅地破解密码?hydra、Hashcat你值得拥有!","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2021/12/20211218022439993.png","cover_video":"","views":5287,"comment_count":167,"category":"cybersecurity","is_forum_post":false}">{"id":5494,"title":"【视频教程】如何高效、优雅地破解密码?hydra、Hashcat你值得拥有!","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2021/12/20211218022439993.png","cover_video":"","views":5287,"comment_count":167,"category":"cybersecurity","is_forum_post":false}
data-postsbox="{"id":22999,"title":"黑客如何破解密码?Hashcat?Hydra?Medusa?John?","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2022/09/20220910121649438.png","cover_video":"","views":2521,"comment_count":5,"category":"knowledge","is_forum_post":false}">{"id":22999,"title":"黑客如何破解密码?Hashcat?Hydra?Medusa?John?","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2022/09/20220910121649438.png","cover_video":"","views":2521,"comment_count":5,"category":"knowledge","is_forum_post":false}
data-postsbox="{"id":14551,"title":"如何使用hashcat破解zip压缩包密码?","author":"FancyPig","author_id":1,"cover_image":"","cover_video":"","views":9714,"comment_count":12,"category":"knowledge","is_forum_post":false}">{"id":14551,"title":"如何使用hashcat破解zip压缩包密码?","author":"FancyPig","author_id":1,"cover_image":"","cover_video":"","views":9714,"comment_count":12,"category":"knowledge","is_forum_post":false}
data-postsbox="{"id":25830,"title":"RTX4090性能有多猛?40分钟8位密码轻松破解?","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2022/11/20221103031027922.png","cover_video":"","views":2952,"comment_count":13,"category":"knowledge","is_forum_post":false}">{"id":25830,"title":"RTX4090性能有多猛?40分钟8位密码轻松破解?","author":"FancyPig","author_id":1,"cover_image":"https://static.pigsec.cn/wp-content/uploads/2022/11/20221103031027922.png","cover_video":"","views":2952,"comment_count":13,"category":"knowledge","is_forum_post":false}
data-postsbox="{"id":17966,"title":"未来密码会消失吗?FIDO2标准会取代密码身份验证吗?","author":"FancyPig","author_id":1,"cover_image":"","cover_video":"","views":1722,"comment_count":3,"category":"knowledge","is_forum_post":false}">{"id":17966,"title":"未来密码会消失吗?FIDO2标准会取代密码身份验证吗?","author":"FancyPig","author_id":1,"cover_image":"","cover_video":"","views":1722,"comment_count":3,"category":"knowledge","is_forum_post":false}

视频讲解

欢迎来到本期视频,今天我们将带你走进密码学的神秘世界,解密神秘的散列函数与密码破解的奥秘!你知道什么是散列吗?我喜欢将它比喻为数据的指纹,这个过程可以将任意长度的数据转化为固定长度的字符或数值。我们可以通过这个“指纹”来验证原始数据。不过,别急着下结论,因为并不是所有的散列函数都是一样的。像人类指纹有时会有误认,散列函数也有所谓的“碰撞”,也就是不同的数据有时候会产生相同的输出。我不是一个数学家,但是据我所知,散列函数不可能完全没有碰撞,因为它就像是用一个小的数据集来表示一个大的数据集。然而,散列函数是被设计成抗碰撞的,稍后我们会深入讨论一些不安全的散列算法。所以,接下来我们将一起探索散列函数的运作过程,从原始数据的输入,到哈希值的输出,一步步揭开密码学的神秘面纱。敬请期待,让我们一起揭开密码破解的神秘面纱,探索密码学的奇妙世界!

图文讲解

欢迎回来观看另一个视频。今天我们要看的是密码破解的工具和技术。在我们深入探讨之前,什么是散列?我喜欢把它看作是一个指纹,一个将一些任意长度的数据转换成固定的长度的字符或数值的过程。然后我们可以用它来验证原始数据。我花时间提一下,当然不是所有的散列函数都是平等的,所以当我们在谈论理论时,当然总会有例外。有时我们有所谓的碰撞,不同的数据往往会产生相同的输出。现在我不是一个数学家,但据我所知,一个散列函数不可能完全没有碰撞,这是有道理的,因为我们正在做的是用一个较小的数值集合来代表一个较大的集合。但散列函数被设计成抗碰撞的,我们在后面会更多地谈到一些不安全的散列算法。因此,创建散列的过程包括将原始数据通过散列函数运行该函数的输出是哈希值,它是一个固定长度的字符串。相同的输入数据将始终产生相同的输出,但实际上,或至少应该是,不可能仅从哈希值中重新创建原始数据。我曾经在网上看到一个很好的比喻。这基本上就像猫的便便。猫吃了的食物,所以它被混合、消化、脱水,然后出来的就是你的哈希值。主要的用例是密码存储、数据完整性检查数字签名等,而我们要看的主要攻击是字典攻击、暴力攻击、查找表,以及最后的彩虹表。当我们通过这些攻击时,我将尝试并演示几个不同的工具,如Hashcat和John,如果你喜欢这个视频,别忘了点击喜欢和订阅让我们深入了解一下。让我们来看看你在测试网络应用时将会遇到的一些哈希值。从臭名昭著的MD5开始,当然,它从90年代初就已经存在了。

它的速度很快,但被认为是不安全的,因为它容易受到碰撞、长度扩展和预像攻击。但今天是关于破解的,所以它计算的速度非常快,这意味着它的破解速度也非常快。接下来,我们有SHA-1,它大多已被SHA-256和SHA-3及其他算法所取代,但你可能会不时地看到它,它也是一种相对快的算法,被认为是不安全的算法。

现在,我要花点时间说,我不打算介绍每一种散列算法,只是介绍一些我认为你在测试网络应用时将会碰到的关键算法。当然,你可能需要做进一步的研究。接下来,我们有bcrypt,我个人在构建网络应用时使用。

它是Blowfish算法的一个变种,是为了难以破解而建立的,我们稍后在尝试破解bcrypt散列时可能会看到这一点。它使用称为迭代散列和自适应散列的技术,基本上是耗时和计算昂贵的。

我们名单上的最后一个是argon2,我想、如果你使用的是像bcrypt这样稍微老一点的算法,那就是下一个步骤了。如果你不确定使用什么算法来哈希密码,那么你应该使用这个算法。现在,所有这些都是在我的本地Kali实例上生成的,所以如果你想创建一些哈希值,然后自己尝试破解它们,这里是我使用的命令。

对于argon2,你可能需要sudo apt install argon2,但对于其他的,我认为它们都是与最新的Kali实例预先打包的,现在,让我们来看看我们如何识别哈希值。有时,你会清楚地知道使用的是什么哈希值,因为它的结构,它来自哪里,也许你有机会接触到源代码。如果我们设法得到了一个哈希值,但我们并不确定它是什么,有几种不同的方法来尝试和识别它。因此,首先,我们将看看Kali中的几个工具,哈希识别器,它是预装的,和haiti,这实际上是一个观众在直播中向我推荐的工具,我基本上一直在使用它。因此,让我们快速浏览一下。所以,我有这个文件,里面有所有的哈希值,而且我还把它们分成了文本文件,以便稍微方便一些,所以我们要做的是,首先使用一个哈希标识符。所以我将快速加载这个,让我们看看它是如何识别这些哈希值的。

所以我们只是要复制md5开始,把这个粘贴进去,你可以看到它出现了很多结果,但实际上这些结果是不可能的。

你想向上滚动,你想看到可能的哈希值,你可以看到它确实识别了md5,而且它还说,啊,这也看起来像域缓存的凭证。这给了我们一个非常明确的指示,我们要从哪里开始,这是非常方便的。接下来,我们要看一下sha1,所以我就复制粘贴,它也做了同样的事情。

如果我们向上滚动,它也说sha1和mysql5 sha1。所以这是一个相当好的指示,说明了哈希值是什么。

我们的下一个,下一个是什么?sha256,然后我们将复制这个把它粘贴进去,我们就会得到sha256和haval256。

我们并不经常看到这种情况,但我认为有一个完整的哈夫尔哈希函数家族存在,但我并没有任何使用它们的经验,但你可能会看到它们不时地出现。接下来,我们有我们的bcrypt,所以我就抓起这个,把这个粘贴进去,有趣的是,它没有找到bcrypt,所以我们得到了not found,鉴于这个结构,这也是很熟悉的。所以2y是,我想,是最新的版本,或者说肯定是比2a更安全的bcrypt版本,而10,我想,是成本,所以你可以在创建哈希值时增加生成成本。因此有点令人惊讶,考虑到它有相当特殊的结构,你知道,Hash Identifier没有找到这个,但这没关系。

最后,我们有argon2,所以我们就复制这个,粘贴这个,它实际上认为这是sha-256和haval-256,所以也许Hash Identifier工具有点过时了,对较新的、更先进的哈希值有困难。

所以我们要做的是快速浏览一下haiti,所以我们可以直接运行haiti并传入哈希值,这不是Kali打包的,所以你必须去GitHub上安装它,让我们看一下bcrypt。所以我们复制这个,粘贴在这里,啊,当然它使用了特殊字符,所以实际上,如果我们再运行这个,只是添加一些引号,希望它能给我们一个结果,然后我们就这样。好的,所以我们得到了bcrypt的结果,而且我们还得到了hashcat攻击模式和JohnTheRipper格式,这很方便。

让我们给argon2一个快速的尝试,不幸的是,它认为这是sha-256或其他的东西,所以有时候准确,有时候不准确,对一些算法很好,不幸的是,对其他的算法却没有。

另一种识别这些哈希值的方法是使用网络,所以如果我只是来到谷歌,如果我搜索识别一个哈希网站,然后我们得到的东西,如TunnelsUp,和hashhes.com,和onlinehashcrack.com,所以让我们先试试第一个我们想要做的是尝试并得到这个bcrypt一个识别。没有找到盐,字符长度,所以看起来它不知道它是什么。让我们试试argon2,认为argon2是sha-256,所以很有趣。

让我们再试一个,所以hash.com,我想我们可以,如果我记得,在这里复制和粘贴多个哈希值,所以事实上,让我们把所有的都做一遍,看看它返回了什么,它确实成功地识别了bcrypt。我要放大一点,让你看到这个,所以你可以看到可能的算法bcrypt,但是它没有识别argon2,所以结果是混合的,这让事情变得有点棘手,你可以看到它也返回了前三个哈希值的结果。

所以Cheesecake是所有算法的输入,当然Blowfish和argon2需要一个盐,所以你不能使用彩虹表除非你用一个非常可预测的盐,我想,来识别这些哈希值,我们将在下一节谈论。最后我想给大家看的是,如果我只是快速回到谷歌,我们只是去hashcats,识别哈希,我们找到这个例子页面,你可以看到,这通常是我们如何为hashcat选择破解哈希的模式

所以当我们破解哈希值时,我们需要告诉它我们要破解的是哪种类型的哈希值。

所以如果你的哈希模式是0,例如,我们要破解的是MD5,如果是100,我们要破解的是SHA1,如果文字有点小,对不起,好了。所以这对你来说也是一个有用的参考,所以绝对值得把这个页面收藏起来。所以,在成功识别了五个哈希值中的四个后,我们应该尝试破解一些。现在我们要从字典攻击开始,所以我们基本上找到或创建一个充满常见单词或短语的文件,这些单词或短语很有可能是某人用作密码的东西,比如password123,有时我们会做进一步的处理,比如我们会把的e改成3,或者把l改成1,或者我们会在最后加上1或2或3,或者叹号,比如。每个词都被依次散列,然后将散列值与我们要破解的原始散列值进行比较。如果它们匹配,那么我们就知道用来创建该哈希值的原始文本文件。所以这是一个字典攻击,让我们用hashcat来试试。所以我要做的是,我们只是输入hashcat,我想我们需要攻击模式0代表字典。如果你不确定,你可以直接输入-h,然后,你知道,它会显示帮助,我们可以看到这里的某个地方,帮助文件其实很长,但我很确定是-a 0 hashcat -a 0表示字典攻击,然后-m 0表示md5,然后我们就要传入我们的md5,然后我们要使用usr/share/wordlists/rockyou.txt的字典非常臭名昭著的一个,就这样了。

hashcat -a 0 -m 0 md5.txt /usr/share/wordlists/rockyou.txt

所以非常非常快,正如我们所看到的,如果我们想让看到被破解的密码,我们可以直接输入--show,它会告诉我们密码是cheesecake

hashcat -a 0 -m 0 md5.txt /usr/share/wordlists/rockyou.txt --show

现在,如果我们想做同样的事情,但对于bcrypt来说,会慢很多,慢很多,让我传入bcrypt,我想模式是3200。我必须检查一下,让我回来,是的,3200,你可以看到2和*号,所以这将是旧的版本的bcrypt,也是新的版本,所以如果你看到$2Y或$2A,你应该可以使用3200。

所以输入-m 3200

hashcat -a 0 -m 3200 bcrypt.txt /usr/share/wordlists/rockyou.txt

我们点击回车,如果你看一下速度值,那么3131

我们可以把它与破解bcrypt密码的速度进行比较。

所以我就输入s查看状态,你可以看到它慢了很多很多

这实际上要花一点时间,所以我们要做的可能就是点击q退出,它的进度。它通过了大约2002个密码,所以要通过1400万个显然需要相当长的时间。

我知道我们很早就停止了,但是0.02%的通过了1400万个单词,这是在rockyou.txt中。好了,接下来我们有暴力破解攻击,因此,如果我们不确定密码是什么,或者我们认为它是随机生成的,所以使用像字母数字,0到9,特殊字符,不同的情况,那么暴力攻击可能是最好的方法。这基本上是尝试所有可能的字符组合,所以它会去像a b c d,然后a a a b a c,哎呀,a c a d,然后a a a然后a a b然后a a c然后a a d,它将通过每一个迭代,直到你选择的字符长度。所以很明显,随着密码变长,或者我们散列的原始文本变长,强度会急剧增加,所以从9个字符到10个字符,显然需要更长的时间来破解,然后从10个到11个,需要更长的时间,难度会呈指数级增长。而当我们增加更多的字符,如数字和特殊字符以及不同的情况,我们可以说这具有更高的熵。所以,让我们用john做这个。对不起,我的虚拟机刚刚崩溃了。所以我们要做的是我们要运行john,但是如果我们在没有任何单词表的情况下运行它,它就会给我们一个默认的单词表。所以我们要做的是使用增量模式,并将其设置为阿尔法,我认为这基本上就是所有的小写字符。我们可以定义自定义规则,如长度和字符集,但现在这应该是可行的。所以,输入sudo john md5.txt incremental=Alpha 然后我们就传入输入format=raw-md5我们会给它一秒钟时间来运行。

sudo john md5.txt --incremental=Alpha --format=raw-md5

所以,如果密码又长又复杂,这将花费非常非常长的时间,但正如你所看到的,我们有一个相对短而简单的密码,所以它根本不需要时间。

sudo john md5.txt --incremental=Alpha --format=raw-md5 --show

所以用这种方法还是相当容易破解的。所以这就是hashcat和john的使用方法。现在,下一个攻击被称为查找表,这个攻击并不像前两个那么出名,但它是一个真正有效的方法,破解大量的哈希值。因此,在我之前做的一个渗透测试中,我们用这种方法从域中转储了所有的哈希值后,对该组织的密码进行了审计此外,如果你设法从一个网络应用程序的数据库中转储了大量的哈希值,你也可以尝试这种攻击。这个想法是预先计算出密码的哈希值,并将它们存储在一个查询表中。当我们采取每一个哈希值,我们做一个查询,看看它是否存在。所以,我相信你可以看出,这比字典攻击节省了大量的计算能力因为我们不需要在每次给它提供新的哈希值时重新计算列表中的每个条目的哈希。我们只需做一次,剩下的就是查找了。最后,我们有彩虹表,基本上是预先计算好的查找表。在我们有了表之后,我们就可以进行查找攻击了。所以最后,我想和你谈谈盐(salt)和胡椒(pepper)。这些都是用来使哈希值更强更耐攻击的。加盐是在密码被哈希之前添加一个随机值然后通常将其存储在数据库中的该密码旁边。现在已经添加了盐,使得使用预先计算的表,如彩虹表,变得不可能。如果两个用户有相同的密码,那么这个密码的加盐哈希将与从同一密码生成的标准哈希以及彼此不同。所以在这种情况下,攻击者需要为每个单独的密码创建哈希表。如果数据库中每个密码的盐都相同,那么这就是一个错误。我会说这是一个配置错误或开发错误。我在这里也应该提到,盐并不是一个密钥,理论上除了在数据库中存储并在生成密码哈希进行比较时读取,如用户登录时,不需要另外的保护。它不是一个密钥。另一方面,胡椒(pepper)是在密码被哈希之前添加到每个密码的秘密值。它对所有用户都是相同的值,并且不存储在数据库中。重要的是,它不存储在这里因为它有助于保护哈希值,即使数据库被破坏,本质上是在密码哈希过程中增加了一个秘密的安全层。这两种方法都使破解密码变得更加困难。因此,今天的视频就到此为止。

现在,如果你想来点挑战,进一步了解你的知识,那么我强烈建议你来TryHackMe,来搜索,搜索哈希,然后你就会有一些挑战,比如破解哈希和其他一些涉及破解哈希的CTF。

这是一个继续学习的好地方,并巩固我们今天所学的内容。下回见。

标签:密码破解, 哈希值, 密码学, 散列算法, 散列函数, 数据指纹, 抗碰撞设计, 碰撞问题, 原始数据验证, 不安全的散列算法, 固定长度字符串, 数据转换, 数值集合, 原始数据重建, 数据输出, 数据输入