MT(movable type)のパスワード強制上書き
MT(movable type)のログインパスワードが分からない。
調べると色々と方法があるけど、どれもバージョンの問題だったり、他の問題でよくわからない。
DBにアクセスできるんだからパスワードを強制上書きしちゃえってコトで調べてみた。
パスワードの保存場所
DBの「テーブル:mt_author」がアカウント情報っぽい。
その中にある「カラム:author_password」がログインパスワードっぽい。
問題はログインパスワードが暗号化された状態で格納されている。
「{SHA}○○○○○○」って感じ。
あとは適当なパスワードを暗号化して、上書きすればOKなはず。
パスワードの暗号化
色々調べると・・・MTの「lib/MT/Author.pm」の「set_password」っていう関数(?)が文字を暗号化してるらしい。
あとはココの部分を抜き出して実行ファイルを用意すればOKだそうだ。
他のサイトのヤツと私のMTではバージョンが違うらしいので、作り変える。
use strict;
use lib qw ( lib extlib );
use MT::Util;
my $pass = $ARGV[0];
my @alpha = ( ‘a’ .. ‘z’, ‘A’ .. ‘Z’, 0 .. 9 );
my $salt = join ”, map $alpha[ rand @alpha ], 1 .. 16;
my $crypt_sha;
if ( eval { require Digest::SHA } ) {
# Can use SHA512
$crypt_sha
= ‘$6$’
. $salt . ‘$’
. Digest::SHA::sha512_base64( $salt . $pass );
}
else {
# Use SHA-1 algorism
$crypt_sha
= ‘{SHA}’
. $salt . ‘$’
. MT::Util::perl_sha1_digest_hex( $salt . $pass );
}
print $crypt_sha;
※「use lib qw ( lib extlib );」はMTの「lib」と「extlib」のPATHにする。
実行
実行方法はCMDから、上記を実行。
- 上記スクリプトのファイル名を「mtpwd.pl」とする。
- パスワードは「zebra」とする。
▼CMDで叩くコマンド
※「cd ○○○」は省略(カレントディレクトリがmtpwd.plのあるトコならOK。)
これで暗号化された「パスワード:zebra」が出力されるはず。
あとは、出力された暗号化のパスワードで対象のアカウントの「mt_author.author_password」を書き換える。
注意
すべて自己責任で何かあってイヤなら別の手段を考えたほうがいい。