【问题标题】:How to brute force a password that has been hashed multiple times?如何暴力破解多次散列的密码?
【发布时间】:2011-09-14 17:58:58
【问题描述】:

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

$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)运行蛮力程序。

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

【问题讨论】:

    标签: passwords hash


    【解决方案1】:

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

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

    如果您的攻击者已经知道您计算加盐哈希的方式,我们可以安全地假设他可以访问您的数据库(这也必然会存储盐)、转储或访问您的应用程序之间的明文通信和一个客户。

    要破解哈希,他只需复制您的 sha1($salt . $hash) 函数并开始向其提供常用密码。与纯暴力破解所有可能的组合相比,这将节省时间。他会从您的数据库中获取 $salt 并将哈希加盐哈希密码的结果与存储在同一数据库中的加盐哈希进行比较。 如果生成的哈希匹配,则密码已“破解”。

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

    也就是说,如果攻击者深入您的系统以实际获取哈希/盐,那么他会更容易更改您的代码以首先向他发送用户登录凭据的纯文本副本。

    【讨论】:

      【解决方案2】:

      这个问题太简单了。有很多事情需要考虑,而且在一篇文章中无法触及,但这里有一些。 1) 黑客有密码存储吗?如果是这样,蛮力攻击可能会更成功,因为没有其他缓解措施可以阻止攻击继续进行。 2) 黑客是否能够侵入您的系统并泄露您的盐/散列系统?这将使蛮力攻击更容易,特别是如果 1 为真。 3) 如果 1 和 2 为假,是否有缓解系统来防止/减缓暴力攻击,例如在连续多次输入错误密码后锁定帐户等。

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

      【讨论】:

      • ahhh 对不起,我再次没有清楚地构建我的问题。让我编辑澄清一下
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多