【问题标题】:How can I calculate shadow password for sha-512 using php/shell如何使用 php/shell 计算 sha-512 的影子密码
【发布时间】:2011-12-17 22:52:40
【问题描述】:

我使用密码 delme 创建了帐户 sysadmin。然后我想用php计算密码的sha-512。

我预计这应该会产生相同的哈希...

billy@iserve:~$ sudo cat /etc/shadow | grep sysadmin
sysadmin:$6$q5HxMEDr$VUPS0JrRFv5bohFtsscvjQ7t2fUhi0m2z8f0ObKtorwlSHqiGde8N9hprkqmnB9LOtEDorG.3yBSXYSAKcJmz.:15276:0:99999:7:::
billy@iserve:~$ php -r "echo crypt('delme','$6$rounds=5000$q5HxMEDr$').\"\n"\";"
=54Jjswxnfslg

我无法在影子文件中复制密码...你能告诉我怎么做吗?

【问题讨论】:

  • 您可以将其复制并粘贴为文本而不是图片吗?

标签: php linux passwords


【解决方案1】:

比利的回答有一点更新:

function authenticate($user, $pass){
  $shad =  preg_split("/[$:]/",`cat /etc/shadow | grep "^$user\:"`);
  if (!isset($shad[2]) || !isset($shad[3])) return false;
  $mkps = preg_split("/[$:]/",crypt($pass, '$'.$shad[2].'$'.$shad[3].'$'));
  return ($shad[4] == $mkps[3]);
}

【讨论】:

    【解决方案2】:

    您的 PHP 代码中有一个错误。您必须转义 $ 符号!

    $ echo "<?php \$foo=crypt('delme', '\$6\$q5HxMEDr\$'); echo \$foo; ?>" | php5-cgi; echo ""
    X-Powered-By: PHP/5.4.4-14+deb7u7
    Content-type: text/html
    
    $6$q5HxMEDr$VUPS0JrRFv5bohFtsscvJQ7tZfUhi0m2z8f0ObKtorwlSHqiGde8N9hprkqmnB9LOtEDorG.3yBSXYSAKcJmz.
    

    【讨论】:

      【解决方案3】:

      我最终这样做是为了解决我的问题...

      /*    Need to add www-data to group shadow (and restart apache)
              $ sudo adduser www-data shadow
              $ sudo /etc/init.d/apache2 restart
            Needs whois to be installed to run mkpasswd
              $ sudo apt-get install whois
            Assumes that sha-512 is used in shadow file
      */
      
      function authenticate($user, $pass){
        // run shell command to output shadow file, and extract line for $user
        // then split the shadow line by $ or : to get component parts
        // store in $shad as array
        $shad =  preg_split("/[$:]/",`cat /etc/shadow | grep "^$user\:"`);
        // use mkpasswd command to generate shadow line passing $pass and $shad[3] (salt)
        // split the result into component parts and store in array $mkps
        $mkps = preg_split("/[$:]/",trim(`mkpasswd -m sha-512 $pass $shad[3]`));
        // compare the shadow file hashed password with generated hashed password and return
        return ($shad[4] == $mkps[3]);
      }
      
      // usage...
      if(authenticate('myUsername','myPassword')){
        // logged in   
      } else {
        // not valid user
      }
      

      我对这种方法的安全性并不完全有信心,所以会问一个关于这个的问题。

      【讨论】:

      • 仅使用散列函数是不够的,仅添加盐对提高安全性无济于事。相反,iIterate over an HMAC with a random salt for about 100ms duration and save the salt with the hash.使用PBKDF2password_hashBcrypt等函数和类似函数。关键是让攻击者花费大量时间通过蛮力寻找密码。
      【解决方案4】:

      这是因为真实系统使用的是随机生成的盐(在第二个$ 和第三个$ 之间)。你在你的 php 代码中使用了同样的盐吗?

      【讨论】:

      • 我认为盐是q5HxMEDr,我将它放入我的crypt函数中,我认为这是$6$rounds=5000$q5HxMEDr$这样的适当位置......但它没有产生我想要的结果跨度>
      猜你喜欢
      • 1970-01-01
      • 2015-10-23
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      相关资源
      最近更新 更多