Ночью сидел, изучал движок...на самом деле интересно было самому поглядеть...
Ну так вот...там, как оказалось, нестандартный способ хэширования данных, ох какой нестандартный...)
Поясню...
Когда регистрируется новый пользователь на подобном сайте его пароль хэшируется простым алгоритмом md5, но как только он заходит в свой аккаунт хэш меняется, причем кардинально...
Теперь по порядку...
Есть пользователь с паролем 123123, только что зарегистрировался...
Его хэш - 4297f44b13955235245b2497399d7a93, salt отсутствует вовсе...
Но как только он зайдет в аккаунт его пароль чудесным образом хэшируется алгоритмом sha-1 + добавляется pwdsalt...которая состоит из 4-ех аж символов...
Получается, что sha-1 (HMAC), но не тут то было...не брутит он и все...
А теперь примеры с кодом.
Страница регистрации (register.php), ввод пароля:
Код:
$newuser->setVar("actkey", substr(md5(makepass()), 0, 8));
$newuser->setVar("pass", md5($passw));
Страница, где производится вход в аккаунт -->ввод пароля:
Код:
function login() {
sleep(1);
$uname = !isset($_POST['uname']) ? '' : trim($_POST['uname']);
$pass = !isset($_POST['pass']) ? '' : trim($_POST['pass']);
if ($uname == '' || $pass == '')
{
redirect_header("user.php", 1, _US_INCORRECTLOGIN);
exit();
}
$user = XoopsUser::login($uname, $pass);
if (false != $user)
{
if ( 0 == $user->getVar('level') )
{
redirect_header("index.php", 5, _US_NOACTTPADM);
exit();
}
include_once(XOOPS_ROOT_PATH.'/class/sessions.class.php');
$session = new XoopsUserSession();
$session->setUid($user->getVar('uid'));
$session->setUname($user->getVar('uname'));
$session->setPass($user->getVar('pass'));
$session->setSalt($user->getVar('pwdsalt'));
if (!$session->store())
{
redirect_header("index.php", 1, _NOTUPDATED);
exit();
}
Как видим добавляется соль, но не видем почему меняется пасс...
В файле sessions.class.php находим такие строчки:
Код:
...
$db->query("DELETE FROM ".RC_SESS_TBL." WHERE uid=".$this->uid);
$this->hash = rc_shatool($this->pass.$this->salt);
...
И видем непонятную функцию rc_shatool...лезем в functions.php
Код:
...
function rc_shatool($vara='', $varb='', $varc='') {
if (function_exists('sha1'))
{
$shatool = 'sha1'; // правда что-то эта надпись начинает напоминать...
}
else
{
require_once XOOPS_ROOT_PATH."/include/rcsha.php";
$shatool = 'rcsha1';
}
...
Переходим в rcsha.php и читаем комментарий в начале страницы:
Код:
** PHP implementation of the Secure Hash Algorithm, SHA-1, as defined
** in FIPS PUB 180-1
*
** Version 1.1
** Copyright 2002 - 2003 Marcus Campbell
** http://www.tecknik.net/sha-1/
Из чего мы делаем вывод, что да, вот он, алгоритм sha-1!
Правда соленный получается, потому как добавляется pwdsalt, то бишь выходит sha-1 (hmac), но нам от этого легче не становится...
Примеры пароля 123123:
7f7e0aadf63ed2e5b527c4b23beabab3892b81e7:9c54
06b3e18deab1e5e3365853925f7559ede5838421:b39e
87e29d7e0d6fe5d46897a13e1b1b792ae6974a7c:0a3b
2bd654cf49f953b8b9a8aec27f2bf66c8bc07655:cec2
Я так и не смог докопаться до истины, но надеюсь, что небольшое повествования о том, как я искал ответ на вопрос о том, как же все-таки алгоритмом хэшируются данные в этом движке, вам поможет...
P.s. Тестировал как на данной версии движка, так и на последней 1.5 RC1...
P.ss. Надеюсь ничего не напутал и рассказал все правильно...