2

一日中、この質問に対する答えを探していました: パスワードを使用せずに vbulletin にログインする方法。

たとえば、リクエストでユーザー名をモジュールに送信すると、ユーザーがログインします。

私が見つけたのは次のとおりです。

verify_authentication('username', 'pass', '', '', TRUE, TRUE);
process_new_login('', TRUE, '');

また

verify_authentication('username', '', 'md5(pass)', 'md5(pass)', TRUE, TRUE);
process_new_login('', TRUE, '');

しかし、パスワードもmd5ハッシュも持っていませんmd5(md5(pass+salt))

誰か助けてくれませんか?

4

2 に答える 2

3

解決策が見つかりました。必要なのはユーザー ID だけです。

    $vbulletin->userinfo = fetch_userinfo($userid);
    vbsetcookie('userid', $vbulletin->userinfo['userid'], true, true, true);
    vbsetcookie('password', md5($vbulletin->userinfo['password'] . COOKIE_SALT), true, true, true);
    exec_unstrike_user($vbulletin->userinfo['username']);
    $logintype = ($vbulletin->userinfo['usergroupid'] == '6') ? 'cplogin' : '';
    process_new_login($logintype, TRUE, TRUE);
于 2012-06-28T12:20:03.573 に答える
1

私はあなたが何をしようとしているのかはっきりしていません。
考えられる解決策は最後ですが、最初に、パスワードをチェックする方法を説明します。

md5(md5(pass+salt))元のテキストパスワードがデータベースに保存される方法です。

フォーラムの上部にあるログインフィールドからログインすると、JavaScriptを使用してmd5(password)、ユーザー名とパスワードがサーバーに送信される前に実行されます。JavaScriptが有効になっていない場合、プレーンテキストのパスワードが投稿されます。

このverify_authentication()関数は、パスワードを検証するために3つのアプローチを試みます。

if (
  $vbulletin->userinfo['password'] != iif($password AND !$md5password, md5(md5($password) . $vbulletin->userinfo['salt']), '') AND
  $vbulletin->userinfo['password'] != iif($md5password, md5($md5password . $vbulletin->userinfo['salt']), '') AND
  $vbulletin->userinfo['password'] != iif($md5password_utf, md5($md5password_utf . $vbulletin->userinfo['salt']), '')
)

プレーンテキストのパスワード($password)が送信された場合、それを通過させmd5(md5(pass+salt))、データベースからのハッシュされたパスワードと比較されます。

$vbulletin->userinfo['password'] != iif($password AND !$md5password, md5(md5($password) . $vbulletin->userinfo['salt']), '')

パスワードがJavaScript($md5password)によってハッシュされた場合、パスワードは渡さmd5(pass+salt)れ、データベースからのハッシュされたパスワードと比較されます。

$vbulletin->userinfo['password'] != iif($md5password, md5($md5password . $vbulletin->userinfo['salt']), '')

パスワードがJavaScriptによってハッシュされ、UTFが使用されている場合($md5password_utf)、パスワードは渡さmd5(pass+salt)れ、データベースからのハッシュされたパスワードと比較されます。

$vbulletin->userinfo['password'] != iif($md5password_utf, md5($md5password_utf . $vbulletin->userinfo['salt']), '')

特定のユーザー名でパスワードなしでログインできるようにする場合は、login_failureフックを使用してプラグインを追加してみてください。pluinはユーザー名を確認し、使用している特定のユーザー名と一致する場合は、ログインプロセスを続行できます。プラグインには次のものが含まれます。

if ($vbulletin->GPC['vb_login_username'] == 'your_username')
{
  exec_unstrike_user($vbulletin->GPC['vb_login_username']);

  process_new_login($vbulletin->GPC['logintype'], $vbulletin->GPC['cookieuser'], $vbulletin->GPC['cssprefs']);

  do_login_redirect(); 
}
于 2012-06-22T03:25:48.093 に答える