Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Добавление админа в SocialEngine
 
 автор: pavelwen   (13.01.2011 в 21:18)   письмо автору
 
 

На днях устроился в ПХП программистом. В компании есть сайт на движке SocialEngine.
Несправедливо уволенный админ, изменил все пароли от административной части сайта. Теперь никто не может зайти в админку.

Начальство возложило на меня обязанности по восстановлению пароля. Благо есть доступ к базе данных в которой хранится хешированный пароль. Но проблема в том, что код движка огромен и разбираться в нем можно месяцами, а начальство требует восстановление пароля в ближайшие сроки.

Если кто сталкивался с движком SocialEngine, подскажите пожалуйста, как в нем добавить нового админа напрямую через базу данных.
Пароль дам должен хешироваться, но я не могу найти каким образом добавляется "salt", т.е. не могу понять алгоритма добавления нового админа.

  Ответить  
 
 автор: elenaki   (14.01.2011 в 07:26)   письмо автору
 
   для: pavelwen   (13.01.2011 в 21:18)
 

а что мешает сделать ТОЧНО такую же запись как и у старого админа, но со СВОИМ паролем? или просто поменять хэш пароля у старого админа на свой?

  Ответить  
 
 автор: pavelwen   (14.01.2011 в 09:08)   письмо автору
 
   для: elenaki   (14.01.2011 в 07:26)
 

В том то и проблема что свой хеш не подходит.

  Ответить  
 
 автор: neadekvat   (14.01.2011 в 09:31)   письмо автору
 
   для: pavelwen   (14.01.2011 в 09:08)
 

Я думаю, найти обработчки формы входа - не такая уж большая проблема.
Там и найдете, какая "соль" добавляется.

  Ответить  
 
 автор: elenaki   (14.01.2011 в 09:32)   письмо автору
 
   для: pavelwen   (14.01.2011 в 09:08)
 

как это? ну вы хотя бы можете отрыть файл, который отвечает за авторизацию, и посмотреть, как он сравнивает пароль, введенный в форму, с тем, который в базе? сколько бы ни было файлов в движке, авторизация админа должна быть одна.

  Ответить  
 
 автор: hxt   (14.01.2011 в 11:48)   письмо автору
 
   для: elenaki   (14.01.2011 в 09:32)
 

Нашел код, который создает админа:

<?php
    
function admin_create($admin_username$admin_password$admin_name$admin_email)
  {
      global 
$database$setting;
    
    
$admin_password_encrypted $this->admin_password_crypt($admin_password);
    
      
$database->database_query("
      INSERT INTO se_admins (
        admin_username,
        admin_password,
        admin_password_method,
        admin_code,
        admin_name,
        admin_email
      ) VALUES (
        '
{$admin_username}',
        '
{$admin_password_encrypted}',
        '
{$setting['setting_password_method']}',
        '
{$this->admin_salt}',
        '
{$admin_name}',
        '
{$admin_email}'
      )
    "
);
    }
  
  
// END admin_create() METHOD
?>


И зашифровывает пароль:


<?php
function admin_password_crypt($admin_password)
  {
    global 
$setting;
    
    if( !
$this->admin_exists )
    {
      
$method $setting['setting_password_method'];
      
$this->admin_salt randomcode($setting['setting_password_code_length']);
    }
    
    else
    {
      
$method $this->admin_info['admin_password_method'];
    }
    
    
// For new methods
    
if( $method>)
    {
      if( !empty(
$this->admin_salt) )
      {
        list(
$salt1$salt2) = str_split($this->admin_saltceil(strlen($this->admin_salt) / 2));
        
$salty_password $salt1.$admin_password.$salt2;
      }
      else
      {
        
$salty_password $admin_password;
      }
    }
    
    switch( 
$method )
    {
      
// crypt()
      
default:
      case 
0:
        if( empty(
$this->admin_salt) ) $this->admin_salt 'admin123';
        
$admin_password_crypt crypt($admin_password'$1$'.str_pad(substr($this->admin_salt08), 8'0'STR_PAD_LEFT).'$');
      break;
      
      
// md5()
      
case 1:
        
$admin_password_crypt md5($salty_password);
      break;
      
      
// sha1()
      
case 2:
        
$admin_password_crypt sha1($salty_password);
      break;
      
      
// crc32()
      
case 3:
        
$admin_password_crypt sprintf("%u"crc32($salty_password));
      break;
    }
    
    return 
$admin_password_crypt;
  }
  
  
// END admin_password_crypt() METHOD
?>

  Ответить  
 
 автор: cheops   (14.01.2011 в 11:49)   письмо автору
 
   для: hxt   (14.01.2011 в 11:48)
 

Хм... тогда прогоните через этот метод новый пароль и подставьте его в таблицу se_admins

  Ответить  
 
 автор: hxt   (14.01.2011 в 11:53)   письмо автору
 
   для: hxt   (14.01.2011 в 11:48)
 

И дамп поля с неизвестным паролем:


INSERT INTO `se_admins` (
`admin_id`, `admin_username`, `admin_password`, 
`admin_password_method`, `admin_code`, `admin_name`,
 `admin_email`, `admin_enabled`, `admin_language_id`, `admin_lostpassword_code`, `admin_lostpassword_time`)
 VALUES
(1, 'admin', '0519e02d36c4136a1ab17fd7c4eeb90f', 1, 'jKkAE2PYIKIMQAM8', 'Administrator', 'email@domain.com', 1, 1, '', 0);

  Ответить  
 
 автор: cheops   (14.01.2011 в 11:59)   письмо автору
 
   для: hxt   (14.01.2011 в 11:53)
 

А тут метод даже указан в четвертом столбце - md5().

Только нужно выяснить нет ли чего в $this->admin_salt, который влияет на формирование префикса и суффикса пароля.

  Ответить  
 
 автор: Trianon   (14.01.2011 в 12:17)   письмо автору
 
   для: cheops   (14.01.2011 в 11:59)
 

судя по SQL-коду оператора INSERT , переменная класса admin_salt живет в поле admin_code таблицы se_admins.

To pavelwen: поле это содержит значение из 16 символов. ЛЕвые 8 добавляются в начало строки пароля, правые 8 - в конец. Дальше md5 , и в таблицу.

  Ответить  
 
 автор: pavelwen   (14.01.2011 в 13:01)   письмо автору
 
   для: Trianon   (14.01.2011 в 12:17)
 

Видимо у меня алгоритм немного иной.
Я сделал так как сказал Trianon

SELECT md5("jKkAE2PY112233IKIMQAM8");

Получилось: 3a68a1d93bc32f7a2ab07b7da36bf4d1
Остальные поля скопировал из приведенного hxt запроса. Но в админку так и не могу войти.

  Ответить  
 
 автор: cheops   (14.01.2011 в 13:03)   письмо автору
 
   для: pavelwen   (14.01.2011 в 13:01)
 

У вас в таблице se_admins поле admin_code такое же как тут или другое? И вообще правильно советуют: действительно проверьте не изменен ли алгоритм и какое состояние таблицы se_admins.

  Ответить  
 
 автор: pavelwen   (14.01.2011 в 13:14)   письмо автору
 
   для: cheops   (14.01.2011 в 13:03)
 

Поля были одинаковы. Извиняюсь, я не заметил, что в поле `admin_password_method` был метод 2, вместо 1.
Все заработало.

  Ответить  
 
 автор: pavelwen   (14.01.2011 в 12:44)   письмо автору
 
   для: hxt   (14.01.2011 в 11:48)
 

2hxt
Спасибо за приведенный код. Не подскажите, в каком файле он находится?
Их там миллионы, а я их только два дня назад увидел.

  Ответить  
 
 автор: cheops   (14.01.2011 в 12:46)   письмо автору
 
   для: pavelwen   (14.01.2011 в 12:44)
 

А зачем? Trianon же сообщил алгоритм создания нового хэша для пароля?

  Ответить  
 
 автор: Trianon   (14.01.2011 в 12:55)   письмо автору
 
   для: cheops   (14.01.2011 в 12:46)
 

я сперва не заметил, кому отвечаю. Думал, что тредстартеру.

pavelwen прав в том смысле, что если это не его код, то в его версии движка могут быть отличия, как штатные, так и внесенные предыдущим админом. И поэтому в свой код, безусловно, стоит заглянуть.
И неправ в том, что взялся что-то администрить, не будучи в состоянии самостоятельно справиться с поиском фрагмента строки function admin_create по набору php-файлов.

  Ответить  
 
 автор: cheops   (14.01.2011 в 13:04)   письмо автору
 
   для: Trianon   (14.01.2011 в 12:55)
 

Работу не всегда приходится выбирать по силам... Да и собственно, как еще расти над собой, если не браться за такие задачи.

  Ответить  
 
 автор: pavelwen   (14.01.2011 в 13:04)   письмо автору
 
   для: Trianon   (14.01.2011 в 12:55)
 

Я бы и не брался, заставляют :(
При этом требуют сделать поскорее. Я с этим движком никогда не работал. Вот сейчас сижу, ковыряюсь в нем.

  Ответить  
 
 автор: pavelwen   (14.01.2011 в 13:18)   письмо автору
 
   для: pavelwen   (14.01.2011 в 13:04)
 

Всем огромное человеческое спасибо за участие в решение моей проблемы. Проблема решена.
Вы отличные программисты. Мне придется долго расти до вашего уровня.

P.S. Извиняюсь, что отвечаю на свое же сообщение, просто я не нашел как ответить всем :)

  Ответить  
 
 автор: Trianon   (14.01.2011 в 13:21)   письмо автору
 
   для: pavelwen   (14.01.2011 в 13:04)
 

grep
Midnight commander - ESC ?
far - Alt-f7
пуск - найти - файлы и папки

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования