
21.08.2008, 10:28
|
|
Banned
Регистрация: 05.12.2005
Сообщений: 982
Провел на форуме: 4839935
Репутация:
1202
|
|
Все бы хорошо, если бы не одно НО.
Видимо тебе попалась древняя версия.
Ибо в 1.1.4 validation_code состоит из 10 символов, тоесть является неполным хешем.
С точки зрения криптостойкости - это смешно, поскольку такому урезку будет соответствовать большое кол-во коллизий паролей.
Но авторы smf поставили видимо на сторону практического нахождения коллизии пароля по неполному хешу,
потому что лично мне не известен более менее приличный софт для нахождения коллизий по неполному хешу
(именно хешу, а не паролю - не спутайте с поиском по маске пароля в пассвордпро)
Щас выяснилось, что _https://hashcracking.info/index.php?1 единственный онлайн сервис, позволющий искать известный пароль по маске неполного хеша.
Пусть validation_code=d8578edf84
Тогда ищем по маске как d8578edf84%
Ну и еще одно маленькое НО: чтобы validation_code присутствовал в бд, необходимо, чтобы юзверь хоть раз запрашивал востановление пароля, до того как вы сняли дамп(и не запрашивал после, ибо тогда validation_code изменится).
smf_1-1-4
/Sources/Reminder.php
PHP код:
function RemindMail()
{
// Randomly generate a new password, with only alpha numeric characters that is a max length of 10 chars.
$password = substr(preg_replace('/\W/', '', md5(rand())), 0, 10);
// Set the password in the database.
updateMemberData($row['ID_MEMBER'], array('validation_code' => "'" . substr(md5($password), 0, 10) . "'"));
require_once($sourcedir . '/Subs-Post.php');
sendmail($row['emailAddress'], $txt['reminder_subject'],
sprintf($txt['sendtopic_dear'], $row['realName']) . "\n\n" .
"$txt[reminder_mail]:\n\n" .
"$scripturl?action=reminder;sa=setpassword;u=$row[ID_MEMBER];code=$password\n\n" .
"$txt[512]: $user_info[ip]\n\n" .
"$txt[35]: $row[memberName]\n\n" .
$txt[130]);
/Sources/Reminder.php
function setPassword2()
{
// Quit if this code is not right.
if (empty($_POST['code']) || substr($realCode, 0, 10) != substr(md5($_POST['code']), 0, 10))
fatal_error($txt['invalid_activation_code'], false);
Последний раз редактировалось Elekt; 21.08.2008 в 10:38..
|
|
|