PHPでLM/NT Hash
Samba(+LDAP)でドメインログオンする場合、LDAP側にuserPassword以外にもNTPassowordとLMPasswordという属性を持たなければならない。
これらはmkntpwdというコマンドで生成することができるが、管理ツールを刷新する際、できればPHPで完結している方が望ましいので実装してみた。
環境設定
$ wget http://dist.justplayer.com/JPCRPM/CentOS/5/JPCRPM-php53.repo $ sudo mv JPCRPM-php53.repo /etc/yum.repos.d $ sudo yum install php-pear php-mcrypt $ sudo pear install Crypt_CHAP
パスワードを生成するスクリプト
$ cat nthash.php #!/usr/bin/php <?php require_once 'Crypt/CHAP.php'; $password = $argv[1]; $cr = new Crypt_CHAP_MSv1(); $nthash = strtoupper(bin2hex($cr->ntPasswordHash($password))); printf("%s(NT Hash)\n", $nthash); $lmhash = strtoupper(bin2hex($cr->lmPasswordHash($password))); printf("%s(LM hash)\n", $lmhash);
mkntpwdコマンドの出力と合っていることを確認
$ ./mkntpwd -N test 0CB6948805F797BF2A82807973B89537 $ ./mkntpwd -L test 01FC5A6BE7BC6929AAD3B435B51404EE $ ./nthash.php test 0CB6948805F797BF2A82807973B89537(NT Hash) 01FC5A6BE7BC6929AAD3B435B51404EE(LM hash)