Взлом через восстановление пароля[Нужна помощь]

Discussion in 'Песочница' started by AveoSS, 5 Mar 2010.

  1. AveoSS

    AveoSS New Member

    Joined:
    19 Feb 2010
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    Здравствуйте,есть форма восстановления пароля
    с примерно таким кодом
    PHP:
    {literal}
    <
    script language=javascript>
    function 
    checkform() {
      if (
    document.forgotform.email.value == '') {
        
    alert("Введите ваше имя пользователя или email!");
        
    document.forgotform.email.focus();
        return 
    false;
      }
      return 
    true;
    }
    </script>
    {/literal}
    <h3>Восстановление пароля :</h3><br>

    <form method=post name=forgotform onsubmit="return checkform();">
    <input type=hidden name=a value="forgot_password">
    <input type=hidden name=action value="forgot_password">
    <table cellspacing=0 cellpadding=2 border=0>
    <tr>
     <td>Введите ваше имя пользователя или email!</td>
     <td><input type=text name='email' value="" class=inpts size=30></td>
    </tr>
    <tr>
     <td>&nbsp;</td>
     <td><input type=submit value="Напомнить" class=sbmt></td>
    </tr>
    </table>
    </form><br><br>

    {if $found_records == 0}
    Такой счет не существует
    {elseif $found_records > 0}
    Вход и пароль высланы Вам. Пожалуйста проверьте вашу эл.почту.
    {/if}
    вот еще forgoten_password.inc

    PHP:
    $found_records = -1;
      if (
    $frm['action'] == 'forgot_password')
      {
        
    $found_records 0;
        
    $email quote ($frm['email']);
        
    $q '' 'select * from hm2_users where username=\'' $email '\' or email=\'' $email '\' and (status=\'on\' or status=\'suspended\')';
        if (!(
    $sth mysql_query ($q)))
        {
          exit (
    mysql_error ());
          ;
        }

        while (
    $row mysql_fetch_array ($sth))
        {
          if ((
    $settings['demomode'] == AND $row['id'] <= 3))
          {
          }
          else
          {
            if (
    $row['activation_code'] != '')
            {
              
    $info = array ();
              
    $info['activation_code'] = $row['activation_code'];
              
    $info['username'] = $row['username'];
              
    $info['name'] = $row['name'];
              
    $info['ip'] = '[not logged]';
              
    $info['max_tries'] = $settings['brute_force_max_tries'];
              
    send_mail ('brute_force_activation'$row['email'], $settings['system_email'], $info);
            }

            
    $password gen_confirm_code (80);
            
    $enc_password md5 ($password);
            
    $q '' 'update hm2_users set password = \'' $enc_password '\' where id = ' $row['id'];
            if (!(
    $sth1 mysql_query ($q)))
            {
              exit (
    mysql_error ());
              ;
            }

            if (
    $settings['store_uncrypted_password'] == 1)
            {
              
    $pswd quote ($password);
              
    $q '' 'update hm2_users set pswd = \'' $pswd '\' where id = ' $row['id'];
              if (!(
    $sth1 mysql_query ($q)))
              {
                exit (
    mysql_error ());
                ;
              }
            }

            
    $info = array ();
            
    $info['username'] = $row['username'];
            
    $info['password'] = $password;
            
    $info['name'] = $row['name'];
            
    $info['ip'] = $frm_env['REMOTE_ADDR'];
            
    send_mail ('forgot_password'$row['email'], $settings['system_email'], $info);
          }

          
    $found_records 1;
        }
      }

      
    $smarty->assign ('found_records'$found_records);
      
    $smarty->display ('forgot_password.tpl');
    ?>
    Как взломщику удается отправлять пароль не только на почту админа но и себе???
     
    #1 AveoSS, 5 Mar 2010
    Last edited: 5 Mar 2010
  2. AveoSS

    AveoSS New Member

    Joined:
    19 Feb 2010
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    Я так понимаю это происходит на этапе формирования запроса здесь, как сформировать запрос в форме ввода почты для восстановления пароля?

    Code:
    $q = '' . 'select * from hm2_users where username=\'' . $email . '\' or email=\'' . $email . '\' and (status=\'on\' or status=\'suspended\')';
     
  3. AveoSS

    AveoSS New Member

    Joined:
    19 Feb 2010
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    Есть смысл пробовать так в поле ввода логина\мыла
    admin\';update hm2_users set pswd ='test' where id =1/*


    Подскажите,пожалуйста, хоть в правильном направлении иду или нет.
     
  4. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    ну тут скуля на лицо, нет проверки на то, что значение при запросе только одно, т.е. просто написав емайл админа и потом свое мыло (мы должны быть предварительно зарегены на сайте и иметь живое мыло), т.е. типо в сторону or копать, т.е. например такой запрос будет правильный:

    $q = 'select * from hm2_users where username= '' . $email . ' or email=' . $email . ' or email = "а_тут_email_ взломщика"' ;

    и вернет данные как по админу, так и по нашему акку, и все последующие действия будут верны как для почты админа, так и для почты хеккера, т.е. мы МОЖЕМ поменять пароль как себе, так и админу

    а проверка на id, которая типо существует, работает как раз на хеккера:

    if (($settings['demomode'] == 1 AND $row['id'] <= 3))
    {
    }
    else - тут как раз наоборот должно быть типо "Хеккер дай!"

    т.е. это ровным счетом означает, что чувак, надо чтобы у тебя id было >3, флаг тебе в руки

    ну а дальше идет while, который делает необходимые действия СО ВСЕМИ РЕЗУЛЬТАТАМИ первого sql запроса (где выбирается юзер по email), которых может быть не один, ибо проверки нет

    PS: Ну и не фильтруется нифига ничего, это понятно. Диагноз не факт что правильный, беглый просмотр

    т.е. при восстановлении вписать в поле мыла чонить вроде этого:

    [email protected]' or email='[email protected]
     
    #4 Pashkela, 5 Mar 2010
    Last edited: 5 Mar 2010
  5. AveoSS

    AveoSS New Member

    Joined:
    19 Feb 2010
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    Вот пытаюсь подставить сюда
    Code:
    $q = '' . 'select * from hm2_users where username=\'' . $email . '\' or email=\'' . $email . '\' and (status=\'on\' or status=\'suspended\')';
    admin\' or username= \'aveo.ssx

    Насколько я понимаю таким образом я закрою 1 юзернейм и будет закрыт 2, а дальше все исполнится как надо, НО ничего не выходит может это из-за

    Code:
    $email = quote ($frm['email']); 
    Пробывал еще так

    [email protected] ' or email= '[email protected]

    толку 0 -(

    Может кто-то еще что-то посоветует?
     
    #5 AveoSS, 5 Mar 2010
    Last edited: 5 Mar 2010
  6. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    понимаешь, не видя всего исходного кода, включая все функции и т.д.

    $email = quote ($frm['email']);

    трудно что-то говорить. Но суть взлома по идее в этом
     
  7. AveoSS

    AveoSS New Member

    Joined:
    19 Feb 2010
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    quote подставляет слеши?
     
  8. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Вообще-то устранение уязвимостей денег стоит. Ссылку дал в личку. Основное тебе тут сказал. Дальше или сам, или извини

    PS: Тут надо весь код нахрен переписывать, а не просто сказать "как"
     
    #8 Pashkela, 5 Mar 2010
    Last edited: 5 Mar 2010
  9. AveoSS

    AveoSS New Member

    Joined:
    19 Feb 2010
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    мне нужно просто узнать как юзать уязвимость,а вот как её править я уже сам разберусь!
    Точнее будет сказать как разобраться со слешами подставляемыми к кавычкам.(если я не ошибаюсь)


    Вот не могу понять почему на такие данные в форме
    получаю No accounts found
    слеши подставляются насколько я понял+ судя по коду запросакавычки будут тоже закрыты для email и username
     
    #9 AveoSS, 5 Mar 2010
    Last edited: 5 Mar 2010
  10. AveoSS

    AveoSS New Member

    Joined:
    19 Feb 2010
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    Неужели ни у кого нету мыслей по реализации? Буду благодарен за любую помощь, идею или просто толковый совет!
     
  11. [ DSU ]

    [ DSU ] Elder - Старейшина

    Joined:
    22 Oct 2007
    Messages:
    103
    Likes Received:
    96
    Reputations:
    88
    Профлинк в студию или сам ....
     
  12. AveoSS

    AveoSS New Member

    Joined:
    19 Feb 2010
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    Что имеется ввиду? Не совсем понял...
     
  13. Welemir

    Welemir Elder - Старейшина

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Имелось в виду ссылку на скрипт в студию,если я правильно понял )
     
  14. AveoSS

    AveoSS New Member

    Joined:
    19 Feb 2010
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    Вот залил архив с данной CMS,
    http://slil.ru/28766198
     
  15. AveoSS

    AveoSS New Member

    Joined:
    19 Feb 2010
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    config.inc.php
    Вот тут интересный участок генерации пароля, если исходить из статьи Неслучайные числа
    можно организовать брут пароля используя сгенерированный для своего аккаунта пароль, если не терять соединение.

    Я в правильном направлении иду?Не хочется париться с брутом, чтобы потом обламаться!


    _______________________________________________

    Вот допустим у меня пароль сгенерированый 4wmirzc8
    то есть номер первого сгенерированного числа = 3(в массиве а соответствует 4). Если я подставлю сид равный 3, то результат rand(0,34) должен быть равен 32 и соответствовать 'w'??
    Я правильно все понял, а то чот не клеится....
     
    #15 AveoSS, 9 Mar 2010
    Last edited: 10 Mar 2010
Loading...