用20行围棋破解WordPress密码

2020-05-31 09:30:21

如果你像我一样喜欢去WordCamps,你可能已经听说过这句话:";WordPress密码散列是不安全的";,或者在最专业的版本中:";……因为它是基于MD5的";。

不管是真是假,强大的密码散列对于像WordPress one这样的大型生态系统至关重要,而WordPress one一直是黑客的攻击目标。因此,我决定仔细研究一下散列系统,并尝试从头开始破解WordPress散列!

我开始用谷歌搜索,发现那里的大多数信息都是通用的,令人困惑。使用了大量对PHP库的引用(来自phpass的可移植散列),但没有真正具体的东西。

散列是一个单向的过程,但是WordPress能够以某种方式验证与数据库中存储的散列匹配的密码输入的用户。

从那里,我开始检查代码,发现了第一个有趣的函数:WP_CHECK_PASSWORD($PASSWORD,$HASH),它将纯文本密码与散列进行比较,如果匹配则返回TRUE。

仔细查看代码,我们很快就会看到CheckPassword、CRYPT_PRIVATE和encode64,这基本上就是魔术发生的地方。

长话短说,CRYPT_PRIVATE($PASSWORD,$STORED_HASH)在密码与存储的散列进行比较之前重新散列密码。如果它们匹配,则密码正确,身份验证继续进行。这意味着我们也可以使用该函数来破解散列。

为简单起见,我们假设站点使用PHP>;5和最新的phpass可移植散列,这是最常见的设置。

前3个字符$P$是ID,告诉系统我们有哪种散列。

字符数3(从0开始计数)用于确定MD5()必须处理输入字符串的次数。

从4到12个nPVO4gP9的字符是盐,它是散列前附加到密码上的随机字符串,以使其更具随机性。例如,如果您的密码是admin,它将转换为nPVO4gP9admin,然后进行散列。

散列JUMSAM1WlLTHPdH6EDj4e1的其余部分是真正的随机性,由传递到一个未记录的encode64函数中的salt+password生成,该函数对输入字符串执行一些按位操作,并返回22个字符的输出。

因此,我们可以重写逻辑(盐+密码散列X次并传入encode64)来执行字典或暴力攻击,并获得相同的散列最后部分,这将是成功的散列破解!

在现实生活中,黑客更感兴趣的是寻找弱密码,因为它们更有可能被重复使用,而不是通常由密码管理器生成的随机密码,因此是特定于站点的。

我决定使用Golang,因为它非常快,我们需要所有的速度来计算大型密码字典。

就像在WordPress加密过程中一样,脚本获取散列并隔离SALT,然后它编写密码(SALT+PASS),尝试字典中的每个密码并对X进行MD5散列X次,我们已经看到了X是如何确定的。

这样做之后,它将对PHP中使用order()获得的字节执行一系列按位操作,这在golang中是不需要的,因为我们已经有了字节值:

在这一点上,我意识到我们甚至不需要找到整个字符串。只需匹配几个字符即可匹配整个密码,从而使脚本更具表现力!因此,由于散列过程的性质,如果字符n.0/4/8.。匹配,则作为输入传递的密码正确。

代码在gihub-https://github.com/francescocarlucci/wphashcrash上一如既往-目前,脚本是一个poc,只获得一个密码散列作为输入,以及密码字典的路径。

我已经在自述文件中概述了一些很好的改进,我可能会在将来添加。

如果您确实想要破解散列列表,您可以对其进行分叉,或者将脚本包装在bash for循环中。

在这一点上,我认为很明显,如果攻击者访问WordPress网站上的数据库,他/她基本上可以破解每一个弱密码。

WordPress生态系统是自由职业者工作的一个巨大领域,经常会发现旧的/不使用的wp-admin和ftp帐户,这些帐户是为临时需要而创建的。

最后一点,再加上用户枚举,这是WordPress的一个常见问题,为使用偷来的/典当的管理员凭据访问数据库敞开了大门。

最重要的是,许多网站不强制使用强密码,以不损害用户体验,我对上述任何一点都有直接经验。

一旦一个网站被攻破,如果攻击者倾向于重复使用密码(我们知道他们确实会这样做),那么存储的弱散列将允许攻击者攻破其他网站上的其他用户帐户。

我的研究没有走到那一步,我只想看看如何破解WordPress的散列。

众所周知,与MD5相比,bcrypt是一种更强大的散列方法,并且有一个现有的插件使用bcrypt并取代了处理密码所需的所有核心函数:

当然,您可以作为开发人员编写您自己的解决方案,但我认为这是一个需要在核心级别解决的问题,目的是要实现大规模采用。

有很多破解散列的工具,比如Hashcat和John the Ripper,它们的性能可能会更好,但同样,本研究的范围是理解WordPress散列结构并从头开始破解它。