それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

EC-CUBEのパスワードを再生成する(&してみたら◯◯だった)

EC-CUBEのパスワードがわからなくなった。
再設定するのは、面倒なので、直接DBを書き換えたい。


http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=5754&forum=11

を参考に、書き換え方を探った。


data/class/pages/admin/system/LC_Page_Admin_System_Input.php


を見ると

<?php
    /**
     * 入力された管理者データをInsertする.
     *
     * @param array 管理者データの連想配列
     * @return void
     */
    function insertMemberData($arrMemberData) {
        $objQuery = new SC_Query();
        // INSERTする値を作成する.
        $sqlVal = array();
        $sqlVal['name']        = $arrMemberData['name'];
        $sqlVal['department']  = $arrMemberData['department'];
        $sqlVal['login_id']    = $arrMemberData['login_id'];
        $sqlVal['password']    = sha1($arrMemberData['password'] . ':' . AUTH_MAGIC);
        $sqlVal['authority']   = $arrMemberData['authority'];
        $sqlVal['rank']        = $objQuery->max('dtb_member', 'rank') + 1;
        $sqlVal['work']        = '1'; // 稼働に設定
        $sqlVal['del_flg']     = '0'; // 削除フラグをOFFに設定
        $sqlVal['creator_id']  = $_SESSION['member_id'];
        $sqlVal['create_date'] = 'NOW()';
        $sqlVal['update_date'] = 'NOW()';
        // INSERTの実行
        $objQuery->insert('dtb_member', $sqlVal);
    }
?>

とあるので

パスワードの生成方法は

<?php
sha1($arrMemberData['password'] . ':' . AUTH_MAGIC);

だと分かる。

じゃぁAUTH_MAGIC が必要ですね。

そこでgrep AUTH_MAGICすると、ビンゴですね。

takuya@debian00:/var/www/www.example.com/public_html$ grep AUTH_MAGIC . -R
./install/sql/insert_data.sql:788:INSERT INTO mtb_constants VALUES ('AUTH_MAGIC','"31eafcbd7a81d7b401a7fdc1****************"',10,'認証用 magic');
./install/temp/install.log:4644:INSERT INTO mtb_constants VALUES ('AUTH_MAGIC','"31eafcbd7a81d7b401a7fdc1****************"',10,'認証用 magic') from 114.164.43.95
./data/class/pages/mypage/LC_Page_Mypage_Change.php:589:        if ($array["password"] != DEFAULT_PASSWORD) $arrRegist["password"] = sha1($array["password"] . ":" . AUTH_MAGIC);
./data/class/pages/mypage/LC_Page_Mypage_Change.php:648:        $arrRegist["password"] = sha1($arrRegist["password"] . ":" . AUTH_MAGIC);
./data/class/pages/admin/LC_Page_Admin_Login.php:101:        $ret = sha1($_POST['password'] . ":" . AUTH_MAGIC);
./data/class/pages/admin/customer/LC_Page_Admin_Customer_Edit.php:232:            $arrRegist["password"] = sha1($array["password"] . ":" . AUTH_MAGIC);
./data/class/pages/admin/system/LC_Page_Admin_System_Input.php:358:        $sqlVal['password']    = sha1($arrMemberData['password'] . ':' . AUTH_MAGIC);
./data/class/pages/admin/system/LC_Page_Admin_System_Input.php:388:            $sqlVal['password'] = sha1($arrMemberData['password'] . ":" . AUTH_MAGIC);
バイナリー・ファイル./data/class/pages/admin/system/.LC_Page_Admin_System_Input.php.swpは一致しました
./data/class/pages/campaign/LC_Page_CampaignEntry.php:240:        $arrRegist["password"] = sha1($arrRegist["password"] . ":" . AUTH_MAGIC);
./data/class/pages/entry/LC_Page_Entry.php:591:        $arrRegist["password"] = sha1($arrRegist["password"] . ":" . AUTH_MAGIC);
./data/class/pages/forgot/LC_Page_Forgot.php:139:                    $conn->query( $sql, array( sha1($this->temp_password . ":" . AUTH_MAGIC) ,$data['customer_id']) );
./data/class/helper/SC_Helper_DB.php:495:        if ($array["password"] != DEFAULT_PASSWORD) $arrRegist["password"] = sha1($array["password"] . ":" . AUTH_MAGIC);
./data/class/SC_Customer.php:86:        if ( sha1($pass . ":" . AUTH_MAGIC) == $data['password'] ){
./data/class/SC_Customer.php:139:        if (sha1($pass . ':' . AUTH_MAGIC) == @$data['password']) {
./data/downloads/module/mdl_db_export/LC_Page_Mdl_Down_Cw_Config.php:140:        //AUTH_MAGICを保存
./data/downloads/module/mdl_db_export/LC_Page_Mdl_Down_Cw_Config.php:143:        fwrite($fp, AUTH_MAGIC);
./data/downloads/backup/bk120405/bkup_data.csv:25524:"AUTH_MAGIC","\"31eafcbd7a81d7b401a7fdc1****************\"","10","認証用 magic"
./data/downloads/tmp/1306564568/mdl_db_export/files/LC_Page_Mdl_Down_Cw_Config.php:140:        //AUTH_MAGICを保存
./data/downloads/tmp/1306564568/mdl_db_export/files/LC_Page_Mdl_Down_Cw_Config.php:143:        fwrite($fp, AUTH_MAGIC);
./data/mtb_constants_init.php:21:define('AUTH_MAGIC', "31eafcbd7a81d7b401a7fdc1****************");
./data/cache/mtb_constants.php:21:define('AUTH_MAGIC', "31eafcbd7a81d7b401a7fdc1****************");

AUTH_MAGICは constants に入ってました。

./data/cache/mtb_constants.php:21:define('AUTH_MAGIC', "31eafcbd7a81d7b401a7fdc1****************");

これで、AUTH_MAGICを使って、再生成できますね。

EC-CUBEのパスワード再生成

再生成コマンドスクリプトをつくるとこんな感じ?

ec-cube_regenpasswd.php
<?php

define(AUTH_MAGIC, "31eafcbd7a81d7b401a7fdc12bba047c*****");
echo sha1($arg[1] . ':' . AUTH_MAGIC);
php ec-cube_regenpasswd.php my_password

これで、出てきたデータを元にパスワードを書き換えることができます

SQLを実行

update dtb_member set password = "生成したパス" where login_id = "ログインID" limit 1;


めでたしめでたし

めでたしめでたし???

いや、ちょっと待って下さい

EC-CUBEさん、もしかしてAUTH_MAGICがソースコードから共通では有りませんか?saltもない。

もしかしたら、EC-CUBEの2.4系は、全てで同じパスワードのAUTH_MAGICのキーを使っている可能性が微レ存?


EC-CUBEには近づきたくないですね―。


EC-CUBEは sha1 でパスワードを生成してるのも、SHA256にして欲しいところですね.


EC-CUBE2.4は使ってはいけない。かも知れない

デファクトスタンダード暗号技術の大移行(1):すべてはここから始まった〜SHA-1の脆弱化 (1/2) - @IT