|
|
|
| На днях устроился в ПХП программистом. В компании есть сайт на движке SocialEngine.
Несправедливо уволенный админ, изменил все пароли от административной части сайта. Теперь никто не может зайти в админку.
Начальство возложило на меня обязанности по восстановлению пароля. Благо есть доступ к базе данных в которой хранится хешированный пароль. Но проблема в том, что код движка огромен и разбираться в нем можно месяцами, а начальство требует восстановление пароля в ближайшие сроки.
Если кто сталкивался с движком SocialEngine, подскажите пожалуйста, как в нем добавить нового админа напрямую через базу данных.
Пароль дам должен хешироваться, но я не могу найти каким образом добавляется "salt", т.е. не могу понять алгоритма добавления нового админа. | |
|
|
|
|
|
|
|
для: pavelwen
(13.01.2011 в 21:18)
| | а что мешает сделать ТОЧНО такую же запись как и у старого админа, но со СВОИМ паролем? или просто поменять хэш пароля у старого админа на свой? | |
|
|
|
|
|
|
|
для: elenaki
(14.01.2011 в 07:26)
| | В том то и проблема что свой хеш не подходит. | |
|
|
|
|
|
|
|
для: pavelwen
(14.01.2011 в 09:08)
| | Я думаю, найти обработчки формы входа - не такая уж большая проблема.
Там и найдете, какая "соль" добавляется. | |
|
|
|
|
|
|
|
для: pavelwen
(14.01.2011 в 09:08)
| | как это? ну вы хотя бы можете отрыть файл, который отвечает за авторизацию, и посмотреть, как он сравнивает пароль, введенный в форму, с тем, который в базе? сколько бы ни было файлов в движке, авторизация админа должна быть одна. | |
|
|
|
|
|
|
|
для: 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>0 )
{
if( !empty($this->admin_salt) )
{
list($salt1, $salt2) = str_split($this->admin_salt, ceil(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_salt, 0, 8), 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
?>
|
| |
|
|
|
|
|
|
|
для: hxt
(14.01.2011 в 11:48)
| | Хм... тогда прогоните через этот метод новый пароль и подставьте его в таблицу se_admins | |
|
|
|
|
|
|
|
для: 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);
|
| |
|
|
|
|
|
|
|
для: hxt
(14.01.2011 в 11:53)
| | А тут метод даже указан в четвертом столбце - md5().
Только нужно выяснить нет ли чего в $this->admin_salt, который влияет на формирование префикса и суффикса пароля. | |
|
|
|
|
|
|
|
для: cheops
(14.01.2011 в 11:59)
| | судя по SQL-коду оператора INSERT , переменная класса admin_salt живет в поле admin_code таблицы se_admins.
To pavelwen: поле это содержит значение из 16 символов. ЛЕвые 8 добавляются в начало строки пароля, правые 8 - в конец. Дальше md5 , и в таблицу. | |
|
|
|
|
|
|
|
для: Trianon
(14.01.2011 в 12:17)
| | Видимо у меня алгоритм немного иной.
Я сделал так как сказал Trianon
SELECT md5("jKkAE2PY112233IKIMQAM8");
|
Получилось: 3a68a1d93bc32f7a2ab07b7da36bf4d1
Остальные поля скопировал из приведенного hxt запроса. Но в админку так и не могу войти. | |
|
|
|
|
|
|
|
для: pavelwen
(14.01.2011 в 13:01)
| | У вас в таблице se_admins поле admin_code такое же как тут или другое? И вообще правильно советуют: действительно проверьте не изменен ли алгоритм и какое состояние таблицы se_admins. | |
|
|
|
|
|
|
|
для: cheops
(14.01.2011 в 13:03)
| | Поля были одинаковы. Извиняюсь, я не заметил, что в поле `admin_password_method` был метод 2, вместо 1.
Все заработало. | |
|
|
|
|
|
|
|
для: hxt
(14.01.2011 в 11:48)
| | 2hxt
Спасибо за приведенный код. Не подскажите, в каком файле он находится?
Их там миллионы, а я их только два дня назад увидел. | |
|
|
|
|
|
|
|
для: pavelwen
(14.01.2011 в 12:44)
| | А зачем? Trianon же сообщил алгоритм создания нового хэша для пароля? | |
|
|
|
|
|
|
|
для: cheops
(14.01.2011 в 12:46)
| | я сперва не заметил, кому отвечаю. Думал, что тредстартеру.
pavelwen прав в том смысле, что если это не его код, то в его версии движка могут быть отличия, как штатные, так и внесенные предыдущим админом. И поэтому в свой код, безусловно, стоит заглянуть.
И неправ в том, что взялся что-то администрить, не будучи в состоянии самостоятельно справиться с поиском фрагмента строки function admin_create по набору php-файлов. | |
|
|
|
|
|
|
|
для: Trianon
(14.01.2011 в 12:55)
| | Работу не всегда приходится выбирать по силам... Да и собственно, как еще расти над собой, если не браться за такие задачи. | |
|
|
|
|
|
|
|
для: Trianon
(14.01.2011 в 12:55)
| | Я бы и не брался, заставляют :(
При этом требуют сделать поскорее. Я с этим движком никогда не работал. Вот сейчас сижу, ковыряюсь в нем. | |
|
|
|
|
|
|
|
для: pavelwen
(14.01.2011 в 13:04)
| | Всем огромное человеческое спасибо за участие в решение моей проблемы. Проблема решена.
Вы отличные программисты. Мне придется долго расти до вашего уровня.
P.S. Извиняюсь, что отвечаю на свое же сообщение, просто я не нашел как ответить всем :) | |
|
|
|
|
|
|
|
для: pavelwen
(14.01.2011 в 13:04)
| | grep
Midnight commander - ESC ?
far - Alt-f7
пуск - найти - файлы и папки | |
|
|
|