如何对经过多次哈希处理的密码进行暴力破解



昨天我问了一个关于安全哈希的问题,这让我思考如何破解使用自定义哈希算法创建的密码。我当前(非常不安全)的密码脚本在密码上使用sha1的迭代,然后在该密码生成的哈希上使用3位salt的迭代。

$hash = sha1($pass1);
//creates a 3 character sequence
function createSalt()
{
    $string = md5(uniqid(rand(), true));
    return substr($string, 0, 3);
}
$salt = createSalt();
$hash = sha1($salt . $hash);

现在,作为这台服务器的管理员,我可以完全访问源代码和密码表,再加上管理工具,我可以简单地将用户的密码重置为我想要的任何值,但为了更好地理解安全性,我很好奇如何像黑客那样做。我有一个叫cain&abel哪种暴力攻击特定的哈希算法,但我该如何做,比如获取每个尝试的密码,对其进行sha1,将其连接到(已知的)salt,然后再次sha1?这看起来很简单,但我从来没有用C++这样的语言编程过,我认为这是必要的。

编辑:

我应该指定以下内容:

这是离线暴力攻击。

我有一个数据库,里面充满了散列和它们各自的盐。

盐是每个用户的,但我一次只想攻击一个用户的密码。

具体来说,我在问如何使用一系列自定义的哈希算法来强行破解密码,比如我上面展示的算法:

伪代码:

$hash = sha1( 'password' );
$salt = '3Sf';
$hash = sha1( $salt.$hash);

我想,无论用什么方法来做这件事,都可以用来强行使用已知算法散列的密码,例如:

$hash = sha1( 'password' );
$salt = '3Sf';
for($i; $i<1000; $i++){
    $hash = sha1( $salt.$hash);
}

因此,我并不是特别要求CODE做第一件事,我是在问我可以用什么方法针对定制的哈希算法运行蛮力程序,比如我上面列出的2。

注意:我并不是说我可能会遇到这种情况,但我想知道是如何做到的。

据我所知,没有广泛可用的哈希破解工具支持此功能。

然而,正如你所说,如果有足够的时间,编写一个程序来破解哈希是非常简单的。

如果您的攻击者已经知道您计算盐散列的方法,我们可以放心地假设他可以访问您的数据库(它也必然存储盐)、转储数据库,或者访问您的应用程序和客户端之间的明文通信。

然后,为了破解哈希,他只需复制你的sha1($salt.$hash)函数,并开始向其提供通用密码。与纯粹的暴力强制所有可能的组合相比,这将节省时间。他会从你的数据库中取出$salt,并将散列后的加盐散列密码的结果与存储在同一数据库中的加盐哈希进行比较。如果生成的哈希匹配,则密码已被"破解"。

一般来说,为每个用户使用单独的salt是一个好主意,因为它会成倍地增加破解整个数据库密码表的时间。他将不得不针对数据库中的每个哈希PW运行整个单词列表,而不是针对单个salt的单个哈希函数运行单词列表。

也就是说,如果攻击者进入你的系统足够远,能够真正获取哈希/盐,那么他将更容易修改你的代码,向他发送用户登录凭据的纯文本副本。

这个问题太简单了。有很多事情需要考虑,在一个帖子中有太多的事情需要关注,但这里有一些。1) 黑客有密码存储吗?如果是这样,暴力攻击可能会更成功,因为没有其他缓解措施可以阻止攻击继续进行。2) 黑客是否能够穿透你的系统并揭露你的salt/hashing系统?这将使暴力攻击更加容易,尤其是在1为真的情况下。3) 如果1和2为假,是否有缓解系统来防止/减缓暴力攻击,例如在连续出现多个错误密码后锁定帐户等。

总的来说,网络钓鱼,尤其是鱼叉式网络钓鱼,在维护良好/安全的系统上比暴力更容易成功,尽管暴力也是实现DOS的好方法。有一个完整的学科是基于这个主题的,还有很多需要考虑。

相关内容

  • 没有找到相关文章

最新更新