2012-06-15 290 views
1

整天我在寻找关于这个问题的答案: 如何登录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

找到解决方案。我们需要的是用户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

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

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

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(); 
}