2012-06-15 284 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(); 
}