无密码登录vbulletin(仅限用户名和哈希)

时间:2012-06-15 17:17:09

标签: authorization vbulletin

我整天都在寻找这个问题的答案: 如何在不使用密码的情况下登录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))

有人可以帮忙吗?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

我不清楚你要做什么 最后可能的解决方案,但首先,这是密码的检查方式。

md5(md5(pass+salt))是原始文本密码存储在数据库中的方式。

当您通过论坛顶部的登录字段登录时,在用户名和密码发布到服务器之前,JavaScript用于运行md5(password)。如果未启用JavaScript,则会发布纯文本密码。

verify_authentication()函数尝试三种验证密码的方法:

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挂钩添加插件。您的插件可以检查用户名,如果它与您正在使用的特定用户名匹配,您可以继续登录过程。该插件将包含:

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(); 
}
相关问题