Исследование Runcms

Тема в разделе "Статьи", создана пользователем Koller, 6 дек 2006.

  1. Koller
    Koller Guest
    С вами снова я :)
    Хотелось бы опубликовать мини-статью о том, как я искал ответ на вопрос о том, какой алгоритм хеширования данных применяется в движке под названием Runsmc...
    Выкладывал чуть менее месяца тому назад на античат...решил и тут опубликовать...может кому-нибудь будет интересно...

    ==============================================

    Ночью сидел, изучал движок...на самом деле интересно было самому поглядеть...
    Ну так вот...там, как оказалось, нестандартный способ хэширования данных, ох какой нестандартный...)
    Поясню...
    Когда регистрируется новый пользователь на подобном сайте его пароль хэшируется простым алгоритмом 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.3) движка, так и на последней 1.5 RC1...
    P.ss. Надеюсь ничего не напутал и рассказал все правильно...

    Update: Затем меня дополнили:

    Так и не удалось узнать зачем нужна тут соль :laughing:
    Спасибо за внимание )
     
    6 дек 2006
    1 человеку нравится это.
  2. rijy
    rijy Новичок
    Симпатии:
    33
    читал на ачате.. толковая статейка. если столкнусь с Runsmc изучу подробнее))
     
    6 дек 2006
  3. Koller
    Koller Guest
    Целью этой статьи, если ее конечно можно назвать таковой была в том, чтобы узнать какой все-таки алгоритм хеширования данных там применяется...вот и все :)
    Тут нет никакого взлома самого движка )
     
    6 дек 2006
  4. rijy
    rijy Новичок
    Симпатии:
    33
    дык без знания алгоритма хэш и не вскроешь))
     
    6 дек 2006
  5. Koller
    Koller Guest
    Да, согласен, но без знания как его (хеш) достать вовсе ты тоже мало что сделаешь ))
     
    6 дек 2006
Загрузка...